Java全栈开发---Java ERP系统开发:商业ERP(九)销售订单

*/

@Override

public void doOutStore(Long uuid, Long storeuuid, Long empuuid) {

// 一、第一步,更新订单信息

// 1、更新明细的状态,获取明细信息

Orderdetail orderdetail = orderdetailDao.get(uuid);// 通过uuid获取订单明细

// 2、在入库前判断订单明细的状态是否为入库的状态

if (!Orderdetail.STATE_NO_OUT.equals(orderdetail.getState())) {

throw new ErpException(“亲!该明细已经出库了,不能重复出库哦!”);

}

// 3、修改状态已经出库

orderdetail.setState(Orderdetail.STATE_IN);

// 4、出库时间

orderdetail.setEndtime(new Date());

// 5.出库管理人员

orderdetail.setEnder(empuuid);

// 6、出到哪一个仓库

orderdetail.setStoreuuid(storeuuid);

// 以上设置的值会自动保存到数据库当中

// 第二步出库

// 1、构建查询条件 查询的条件,查询对应

Storedetail storedetail = new Storedetail();

storedetail.setGoodsuuid(orderdetail.getGoodsuuid());

storedetail.setStoreuuid(storeuuid);

// 2、通常查询 检查是否在库存信息(对应订单详情的库存信息)

List storeList = storedetailDao.getList(storedetail, null, null);

// 如果通过订单明细可以查询到对应的库存信息

if (storeList.size() > 0) {

// 存在的话,则应该累加数据

Storedetail sd = storeList.get(0);

sd.setNum(sd.getNum() - orderdetail.getNum() );

if(sd.getNum() < 0) {

throw new ErpException(“库存不足”);

}

} else {

throw new ErpException(“库存不足”);

}

/* 第三步增加操作记录 */

Storeoper log = new Storeoper();// 获取操作记录的对象

// 设置操作员的id

log.setEmpuuid(empuuid);

// 设置商品id,当前商品id就是当前订单的id

log.setGoodsuuid(orderdetail.getGoodsuuid());

// 设置数量操作记录的数量为当前订单详情的数量

log.setNum(orderdetail.getNum());

// 设置操作时间为当前订单入库的时间

log.setOpertime(orderdetail.getEndtime());

// 设置入库到那个仓库的记录

log.setStoreuuid(storeuuid);

// 设置当前记录的状态为1

log.setType(Storeoper.TYPE_OUT);

// 保存到数据库当中(将操作记录保存到数据库当中)

storeoperDao.add(log);

/*

  • 第四部,判断当前订单下 所有的订单是否都已经更新完成(即出库完成)

*/

// 1、查询当前订单是否还存在,状态为0 (0为未出库)的明细

// 2、count(1) where state = 0 orderuuid = 为当前订单的uuid

// 构建查询条件

Orderdetail queryParam = new Orderdetail();

Orders orders = orderdetail.getOrders();// 获取订单明细对应的订单信息

queryParam.setOrders(orders);// 设置订单是当前订单明细,对应的订单

queryParam.setState(Orderdetail.STATE_NO_OUT);// 设置查询条件状态为0,未审核

// 3、调用getCount方法,来计算是否存在状态为0的明细

long count = orderdetailDao.getCount(queryParam, null, null);

if (count == 0) {

// 4、 代表的所有订单当中 的订单明细都已经出库了

orders.setState(Orders.STATE_OUT);// 设置当前订单装为结束

orders.setEndtime(orderdetail.getEndtime());// 并设置当前订单结束时间为当前订单明细 的结束时间

orders.setEnder(empuuid);// 设置库管员

// 应为在上面过去过订单 状态

}

}

(5)在OrderdetailAction当中

在这里插入图片描述

(6)销售出库前端实现

修改orders.js以及添加一些方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

将doInStore改为doInOutStore并添加一些判断和属性

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

入库演示

在这里插入图片描述

出库演示

在这里插入图片描述

6、商品库存管理
6.1设置查询以及查询显示
(1)商品库存查询:修改storedetail.html
仓库库存管理

仓库:<input name=“t1.storeuuid” class=“easyui-combobox” data-options="

url:‘store_list’,valueField:‘uuid’,textField:‘name’

" >

商品:<input name=“t1.goodsuuid” class=“easyui-combobox” data-options="

url:‘goods_list’,valueField:‘uuid’,textField:‘name’

" >

查询

必看视频!获取2024年最新Java开发全套学习资料 备注Java

(2)修改创建storedetail.js

$(function(){

// 列表

$(‘#grid’).datagrid({

url : ‘storedetail_listByPage’,

columns : [[

{field:‘uuid’,title:‘编号’,width:100},

{field:‘storeName’,title:‘仓库’,width:100},

{field:‘goodName’,title:‘商品’,width:100},

{field:‘num’,title:‘数量’,width:100}

]],

singleSelect : true,

pagination : true

});

})

(3)修改Storedetail,添加一些属性,添加仓库名称和商品名称

在这里插入图片描述

(4)在StoredetailBiz当中重写getListByPage方法,通过反射设置对应的属性以及一些其他的方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

/*

  • 分页查询

*/

public List getListByPage(Storedetail t1, Storedetail t2, Object param, int firstResult,

int maxResults) {

List list = super.getListByPage(t1, t2, param, firstResult, maxResults);

Map<Long, String> goodsNameMap = new HashMap<Long, String>();

Map<Long, String> storeNameMap = new HashMap<Long, String>();

for(Storedetail sd : list) {//遍历库存集合,

//通过商品的id取到的商品的集合,将其放入到库存当中的商品库存集合当中

sd.setGoodsName(getGoodsName(sd.getGoodsuuid(), goodsNameMap));

//通过仓库的id取到的仓库的集合,将其放入到库存的仓库库存的集合当中

sd.setStoreName(getStoreName(sd.getStoreuuid(),storeNameMap));

}

return list;

}

private String getGoodsName(Long uuid, Map<Long, String> goodsNameMap) {

// 通过当前集合当中的uuid获取对应的值的员工姓名

if (null == uuid) {

return null;

}

String goodsName = goodsNameMap.get(uuid);

// 先从Map集合当中通过对应的id获取name如果有就不需要获取对应的姓名,如果没有就通过id、

// 重新向数据库查询对应id的name并将其id】和姓名放入到map 集合当中

if (null == goodsName) {

// 如果没有找到员工的名称,则进行数据库查询

goodsName = goodsDao.get(uuid).getName();// 通过id查询对应员工的姓名

// 存入缓存中

goodsNameMap.put(uuid, goodsName);// 将员工的id和姓名存入emp集合当中

}

return goodsName;

}

private String getStoreName(Long uuid, Map<Long, String> storeNameMap) {

// 通过当前集合当中的uuid获取对应的值的员工姓名

if (null == uuid) {

return null;

}

String storeName = storeNameMap.get(uuid);

// 先从Map集合当中通过对应的id获取name如果有就不需要获取对应的姓名,如果没有就通过id、

// 重新向数据库查询对应id的name并将其id】和姓名放入到map 集合当中

if (null == storeName) {

// 如果没有找到员工的名称,则进行数据库查询

storeName = storeDao.get(uuid).getName();// 通过id查询对应员工的姓名

// 存入缓存中

storeNameMap.put(uuid, storeName);// 将员工的id和姓名存入emp集合当中

}

return storeName;

}

(5)在applicationContext_biz.xml配置文件当中注入对应的内容

在这里插入图片描述

在这里插入图片描述

6.2设置查询搜索

在这里插入图片描述

在这里插入图片描述

7、库存变动记录查询
(1)需求分析

需求:库存变动记录表查询,查询条件为商品(自动补全下拉列表)仓库(下拉列表)、日期范围搜索、操作员(自动补全下拉列表)、类型(出库,入库)

在这里插入图片描述

(2)代码实现

1)修改Storeoper的getDetachedCriteria方法,在StoreoperDao 当中添加条件BaseDao当中实现查询

package com.itzheng.erp.dao.impl;

import org.hibernate.criterion.DetachedCriteria;

import org.hibernate.criterion.MatchMode;

import org.hibernate.criterion.Restrictions;

import com.itzheng.erp.dao.IStoreoperDao;

import com.itzheng.erp.entity.Storeoper;

/**

  • 仓库操作记录数据访问类

  • @author Administrator

*/

public class StoreoperDao extends BaseDao implements IStoreoperDao {

/**

  • 构建查询条件

  • @param dep1

  • @param dep2

  • @param param

  • @return

*/

public DetachedCriteria getDetachedCriteria(Storeoper storeoper1,Storeoper storeoper2,Object param){

DetachedCriteria dc=DetachedCriteria.forClass(Storeoper.class);

if(storeoper1!=null){

//根据类型查询

if(storeoper1.getType()!=null && storeoper1.getType().trim().length()>0)

{

dc.add(Restrictions.eq(“type”, storeoper1.getType()));

}

//商品查询

if(storeoper1.getGoodsuuid()!=null)

{

dc.add(Restrictions.eq(“goodsuuid”, storeoper1.getGoodsuuid()));

}

//仓库

if(storeoper1.getStoreuuid() != null)

{

dc.add(Restrictions.eq(“storeuuid”, storeoper1.getStoreuuid()));

}

//员工

if(storeoper1.getEmpuuid() !=null)

{

dc.add(Restrictions.eq(“empuuid”, storeoper1.getEmpuuid()));

}

//操作时间,开始

if(null != storeoper1.getOpertime()) {

dc.add(Restrictions.ge(“opertime”, storeoper1.getOpertime()));

}

}

if(null != storeoper2) {

//操作时间结束

if(null != storeoper2.getOpertime()) {

dc.add(Restrictions.le(“opertime”, storeoper1.getOpertime()));

}

}

return dc;

}

}

2)在StoreoperBiz中,重写listByPage方法:

package com.itzheng.erp.biz.impl;

import java.util.List;

import org.hibernate.criterion.DetachedCriteria;

import com.itzheng.erp.biz.IStoreoperBiz;

import com.itzheng.erp.dao.IStoreoperDao;

import com.itzheng.erp.entity.Storeoper;

/**

  • 仓库操作记录业务逻辑类

  • @author Administrator

*/

public class StoreoperBiz extends BaseBiz implements IStoreoperBiz {

private IStoreoperDao storeoperDao;

public void setStoreoperDao(IStoreoperDao storeoperDao) {

this.storeoperDao = storeoperDao;

setBaseDao(storeoperDao);

}

/**

  • 分页条件查询

*/

public List getListByPage(Storeoper t1, Storeoper t2, Object param, int firstResult, int maxResults) {

List logList = super.getListByPage(t1, t2, param, firstResult, maxResults);

return logList;

}

}

3)修改BaseBiz,添加getGoodsName和getStoreName以及getEmpName

public String getGoodsName(Long uuid, Map<Long, String> goodsNameMap, IGoodsDao goodsDao) {

// 通过当前集合当中的uuid获取对应的值的员工姓名

if (null == uuid) {

return null;

}

String goodsName = goodsNameMap.get(uuid);

// 先从Map集合当中通过对应的id获取name如果有就不需要获取对应的姓名,如果没有就通过id、

// 重新向数据库查询对应id的name并将其id】和姓名放入到map 集合当中

if (null == goodsName) {

// 如果没有找到员工的名称,则进行数据库查询

goodsName = goodsDao.get(uuid).getName();// 通过id查询对应员工的姓名

// 存入缓存中

goodsNameMap.put(uuid, goodsName);// 将员工的id和姓名存入emp集合当中

}

return goodsName;

}

public String getStoreName(Long uuid, Map<Long, String> storeNameMap, IStoreDao storeDao) {

// 通过当前集合当中的uuid获取对应的值的员工姓名

if (null == uuid) {

return null;

}

String storeName = storeNameMap.get(uuid);

// 先从Map集合当中通过对应的id获取name如果有就不需要获取对应的姓名,如果没有就通过id、

// 重新向数据库查询对应id的name并将其id】和姓名放入到map 集合当中

if (null == storeName) {

// 如果没有找到员工的名称,则进行数据库查询

storeName = storeDao.get(uuid).getName();// 通过id查询对应员工的姓名

// 存入缓存中

storeNameMap.put(uuid, storeName);// 将员工的id和姓名存入emp集合当中

}

return storeName;

}

// 获取员工的名称

// uuid 员工编号

// empNameMap 员工编号以及员工的名称

// 返回员工的名称

public String getEmpName(Long uuid, Map<Long, String> empNameMap,IEmpDao empDao) {

// 通过当前集合当中的uuid获取对应的值的员工姓名

if (null == uuid) {

return null;

}

String empName = empNameMap.get(uuid);

// 先从Map集合当中通过对应的id获取name如果有就不需要获取对应的姓名,如果没有就通过id、

// 重新向数据库查询对应id的name并将其id】和姓名放入到map 集合当中

if (null == empName) {

// 如果没有找到员工的名称,则进行数据库查询

empName = empDao.get(uuid).getName();// 通过id查询对应员工的姓名

// 存入缓存中

empNameMap.put(uuid, empName);// 将员工的id和姓名存入emp集合当中

}

return empName;

}

4)修改OrdersBiz删除getEmpName方法修改getListByPage方法

在这里插入图片描述

5)修改Storeoper设置属性并生成对应的值

在这里插入图片描述

6)回到StoreoperBiz当中,注入biz,修改getListByPage方法并设置对应的缓存分别查询员工集合

package com.itzheng.erp.biz.impl;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.hibernate.criterion.DetachedCriteria;

import com.itzheng.erp.biz.IStoreoperBiz;

import com.itzheng.erp.dao.IEmpDao;

import com.itzheng.erp.dao.IGoodsDao;

import com.itzheng.erp.dao.IStoreDao;

import com.itzheng.erp.dao.IStoreoperDao;

import com.itzheng.erp.entity.Storeoper;

/**

  • 仓库操作记录业务逻辑类

  • @author Administrator

*/

public class StoreoperBiz extends BaseBiz implements IStoreoperBiz {

private IStoreoperDao storeoperDao;

private IEmpDao empDao;

private IGoodsDao goodsDao;

private IStoreDao storeDao;

public void setEmpDao(IEmpDao empDao) {

this.empDao = empDao;

}

public void setGoodsDao(IGoodsDao goodsDao) {

this.goodsDao = goodsDao;

}

public void setStoreDao(IStoreDao storeDao) {

this.storeDao = storeDao;

}

public void setStoreoperDao(IStoreoperDao storeoperDao) {

this.storeoperDao = storeoperDao;

setBaseDao(storeoperDao);

}

/**

  • 分页条件查询

*/

public List getListByPage(Storeoper t1, Storeoper t2, Object param, int firstResult, int maxResults) {

List logList = super.getListByPage(t1, t2, param, firstResult, maxResults);

Map<Long, String> empNameMap = new HashMap<Long, String>();

Map<Long, String> goodsNameMap = new HashMap<Long, String>();

Map<Long, String> storeNameMap = new HashMap<Long, String>();

for(Storeoper log : logList ) {

log.setEmpName(getEmpName(log.getEmpuuid(),empNameMap,empDao));

log.setGoodsName(getGoodsName(log.getGoodsuuid(), goodsNameMap, goodsDao));

log.setStoreName(getStoreName(log.getStoreuuid(), storeNameMap, storeDao));

}

return logList;

}

}

7)在配置文件当中注入该上述的biz,applicationContext_biz.xml当中

在这里插入图片描述

8)修改storeoper.html

仓库操作记录管理

操作员号:<input name=“t1.empuuid” class=“easyui-combobox” data-options="

url:‘emp_list’,valueField:‘uuid’,textField:‘name’

" >

操作日期:->

仓库:<input name=“t1.storeuuid” class=“easyui-combobox” data-options="

url:‘store_list’,valueField:‘uuid’,textField:‘name’

" >

商品:<input name=“t1.goodsuuid” class=“easyui-combobox” data-options="

url:‘goods_list’,valueField:‘uuid’,textField:‘name’

" >

类型:<input name=“t1.type” class=“easyui-combobox” data-options="

data:[{uuid:‘’,name:‘全部’},{uuid:‘1’,name:‘入库’},{uuid:‘2’,name:‘出库’}],valueField:‘uuid’,textField:‘name’

" >

查询

9)创建storeoper.js

$(function(){

$(‘#grid’).datagrid({

url:‘storeoper_listByPage’,

最后

腾讯T3大牛总结的500页MySQL实战笔记意外爆火,P8看了直呼内行

腾讯T3大牛总结的500页MySQL实战笔记意外爆火,P8看了直呼内行
div class=“easyui-panel”>

操作员号:<input name=“t1.empuuid” class=“easyui-combobox” data-options="

url:‘emp_list’,valueField:‘uuid’,textField:‘name’

" >

操作日期:->

仓库:<input name=“t1.storeuuid” class=“easyui-combobox” data-options="

url:‘store_list’,valueField:‘uuid’,textField:‘name’

" >

商品:<input name=“t1.goodsuuid” class=“easyui-combobox” data-options="

url:‘goods_list’,valueField:‘uuid’,textField:‘name’

" >

类型:<input name=“t1.type” class=“easyui-combobox” data-options="

data:[{uuid:‘’,name:‘全部’},{uuid:‘1’,name:‘入库’},{uuid:‘2’,name:‘出库’}],valueField:‘uuid’,textField:‘name’

" >

查询

9)创建storeoper.js

$(function(){

$(‘#grid’).datagrid({

url:‘storeoper_listByPage’,

最后

[外链图片转存中…(img-UE3ulns3-1716454433152)]

[外链图片转存中…(img-3SyrFNyk-1716454433153)]

  • 29
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值