package com.example.erp.service.mm; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.dynamic.datasource.annotation.DS; import com.example.erp.entity.mm.FinishedGoodsInventory; import com.example.erp.entity.mm.FinishedOperateLog; import com.example.erp.entity.pp.FlowCard; import com.example.erp.entity.sd.Order; import com.example.erp.entity.sd.OrderDetail; import com.example.erp.entity.userInfo.SysError; import com.example.erp.mapper.mm.BasicWarehouseTypeMapper; import com.example.erp.mapper.mm.FinishedGoodsInventoryMapper; import com.example.erp.mapper.mm.FinishedOperateLogMapper; import com.example.erp.service.userInfo.SysErrorService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.sql.SQLException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.*; @Service @DS("mm") @Transactional(rollbackFor = Exception.class) public class FinishedGoodsInventoryService { @Autowired FinishedGoodsInventoryMapper finishedGoodsInventoryMapper; @Autowired FinishedOperateLogMapper finishedOperateLogMapper; @Autowired BasicWarehouseTypeMapper basicWarehouseTypeMapper; @Autowired SysErrorService sysErrorService; public Map defaultDateFinishedGoodsInventory(Integer pageNum, Integer pageSize, FinishedGoodsInventory finishedGoodsInventory) { Integer offset = (pageNum - 1) * pageSize; Map map = new HashMap<>(); map.put("data", finishedGoodsInventoryMapper.defaultfinishedGoods(offset, pageSize, finishedGoodsInventory)); map.put("total", finishedGoodsInventoryMapper.getPageTotal(offset, pageSize, finishedGoodsInventory)); return map; } public Map getseletwarehousing(Integer pageNum, Integer pageSize, FlowCard flowCard) { Integer offset = (pageNum - 1) * pageSize; Map map = new HashMap<>(); map.put("data", finishedGoodsInventoryMapper.getseletwarehousing(offset, pageSize, flowCard)); map.put("total", finishedGoodsInventoryMapper.getseletwarehousingPageTotal(offset, pageSize, flowCard)); return map; } public Boolean addseletwarehousing(Map object) { Boolean isinsert=false; //定义前端传输的数据 String storageRegion = ""; String remark = ""; if (object.get("remark") != null) { remark = object.get("remark").toString(); } if (object.get("storageRegion") != null) { storageRegion = object.get("storageRegion").toString(); } String userName = ""; String userId = ""; if (object.get("userName") != null) { userName = object.get("userName").toString(); } if (object.get("userId") != null) { userId = object.get("userId").toString(); } //获取对象集合循环进行新增修改 List flowCardlist = JSONArray.parseArray(JSONObject.toJSONString(object.get("flowcard")), FlowCard.class); if (!flowCardlist.isEmpty()){ for (FlowCard flowCard : flowCardlist) { //获取单号 String oddNumber= orderNumberSetting("入库"); //添加出入库记录 finishedOperateLogMapper.insertIntFinishedOperateLog(flowCard,userName,oddNumber); Integer finishedGoodsInventorycount = finishedGoodsInventoryMapper.findOrderNumberdcount(flowCard.getOrder().getOrderId(),flowCard.getOrderNumber()); Integer ordersum = finishedGoodsInventoryMapper.findOrderQuantity(flowCard.getOrder().getOrderId()); Integer ordernumbersum = finishedGoodsInventoryMapper.findOrderNumberdsum(flowCard.getOrder().getOrderId()); System.out.println("订单总数:" + ordersum + "已入库数量:" + ordernumbersum + "准备入库数量" + flowCard.getInventoryQuantity()); if (finishedGoodsInventorycount > 0) { //修改库存表入库数量 finishedGoodsInventoryMapper.updateInventory(flowCard,storageRegion, remark); //修改流程卡表入库数量 finishedGoodsInventoryMapper.updateflowcard(flowCard); //修改订单明细表入库数量 finishedGoodsInventoryMapper.updateIntOrderNumberConut(flowCard.getOrder().getOrderId(),flowCard.getOrderNumber(),flowCard.getInventoryQuantity()); //判断订单是否全部入库 if (ordersum == (ordernumbersum + flowCard.getInventoryQuantity())) { //修改订单表入库状态 finishedGoodsInventoryMapper.updateOrderWarehousingState(flowCard.getOrder().getOrderId(),2); } isinsert=true; } else { if (finishedGoodsInventoryMapper.insertFinishedGoodsInventory(flowCard, storageRegion, remark)) { //修改流程卡表入库数量 finishedGoodsInventoryMapper.updateflowcard(flowCard); //修改订单明细表入库数量 finishedGoodsInventoryMapper.updateIntOrderNumberConut(flowCard.getOrder().getOrderId(),flowCard.getOrderNumber(),flowCard.getInventoryQuantity()); //修改订单表入库状态 finishedGoodsInventoryMapper.updateOrderWarehousingState(flowCard.getOrder().getOrderId(),1); isinsert=true; } else { isinsert= false; } } } return isinsert; }else{ return false; } } public Map getseletdeliveryDetail(Integer pageNum, Integer pageSize, OrderDetail orderDetail) { Integer offset = (pageNum - 1) * pageSize; Map map = new HashMap<>(); map.put("data", finishedGoodsInventoryMapper.getseletdeliveryDetail(offset, pageSize, orderDetail)); map.put("total", finishedGoodsInventoryMapper.getseletdeliveryDetailPageTotal(offset, pageSize, orderDetail)); return map; } public Boolean adddeliveryDetail(Map object) { boolean saveState = true; //设置回滚点 Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { String userName = ""; String userId = ""; if (object.get("userName") != null) { userName = object.get("userName").toString(); } if (object.get("userId") != null) { userId = object.get("userId").toString(); } //获取对象集合循环进行新增修改 List orderDetaillist = JSONArray.parseArray(JSONObject.toJSONString(object.get("orderDetail")), OrderDetail.class); if (!orderDetaillist.isEmpty()){ for (OrderDetail orderDetail : orderDetaillist) { //获取单号 String oddNumber= orderNumberSetting("出库"); //添加出入库记录 finishedOperateLogMapper.insertOutFinishedOperateLog(orderDetail,userName,oddNumber); Integer finishedGoodsInventorycount = finishedGoodsInventoryMapper.findOrderNumberdcount(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber()); Integer finishedGoodsInventorybycount=finishedGoodsInventoryMapper.finishedGoodsInventorybycount(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber()); Integer ordersum = finishedGoodsInventoryMapper.findOrderQuantity(orderDetail.getDeliveryDetail().getOrderId()); Integer ordernumbersum = finishedGoodsInventoryMapper.findOrderNumberdsum(orderDetail.getDeliveryDetail().getOrderId()); Integer deliverysum = finishedGoodsInventoryMapper.findDeliveryQuantity(orderDetail.getDeliveryDetail().getDeliveryId()); Integer deliverydetailsum = finishedGoodsInventoryMapper.findDeliverydetailsum(orderDetail.getDeliveryDetail().getDeliveryId(),0); if(deliverydetailsum==null){ deliverydetailsum=0; } System.out.println("订单总数:" + ordersum + "订单剩余数量:" + ordernumbersum + "准备出库数量" + orderDetail.getWarehouseNum()+ "发货数量" + orderDetail.getDeliveryNum()+ "发货总数" + deliverysum+ "已发数量" + deliverydetailsum); if (finishedGoodsInventorycount > 0) { if(orderDetail.getWarehouseNum()>=orderDetail.getDeliveryNum()){ //修改库存表出库数量 //finishedGoodsInventoryMapper.updateInventoryquantityavailable(orderDetail); //修改发货明细表状态 finishedGoodsInventoryMapper.updateDeliveryDetailState(orderDetail,0); //修改发货表状态 finishedGoodsInventoryMapper.updateDeliveryDeliveryState(orderDetail.getDeliveryDetail().getDeliveryId(),1); //修改订单明细表发货数量 finishedGoodsInventoryMapper.updateOutOrderNumberConut(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryNum()); //修改订单表发货状态 finishedGoodsInventoryMapper.updateOrderDeliveryState(orderDetail.getDeliveryDetail().getOrderId(),1); //判断订单是否全部发货 if (0 == (ordernumbersum - orderDetail.getWarehouseNum())) { //修改订单表发货状态 finishedGoodsInventoryMapper.updateOrderDeliveryState(orderDetail.getDeliveryDetail().getOrderId(),2); } if (deliverysum==deliverydetailsum+orderDetail.getDeliveryNum()) { //修改发货表状态 finishedGoodsInventoryMapper.updateDeliveryDeliveryState(orderDetail.getDeliveryDetail().getDeliveryId(),2); } } } } } } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e.toString()); sysError.setFunc("saveOrder"); sysErrorService.insert(sysError); saveState = false; } return saveState; } public Map getSelectAllocate(Integer pageNum, Integer pageSize, OrderDetail orderDetail) { Integer offset = (pageNum - 1) * pageSize; Map map = new HashMap<>(); map.put("data", finishedGoodsInventoryMapper.getSelectAllocate(offset, pageSize, orderDetail)); map.put("total", finishedGoodsInventoryMapper.getSelectAllocatePageTotal(offset, pageSize, orderDetail)); map.put("type", basicWarehouseTypeMapper.getBasicWarehouseTypeTakeOut()); map.put("types", basicWarehouseTypeMapper.getBasicWarehouseTypeRework()); return map; } public Boolean updateFinishedGoodsInventoryAllocate(Map object) { boolean saveState = true; //设置回滚点 Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { String userName = ""; String userId = ""; if (object.get("userName") != null) { userName = object.get("userName").toString(); } if (object.get("userId") != null) { userId = object.get("userId").toString(); } //获取对象集合循环进行新增修改 List orderDetaillist = JSONArray.parseArray(JSONObject.toJSONString(object.get("orderDetail")), OrderDetail.class); if (!orderDetaillist.isEmpty()){ for (OrderDetail orderDetail : orderDetaillist) { Integer oldordersum = finishedGoodsInventoryMapper.findOrderQuantity(orderDetail.getFinishedGoodsInventory().getOrderId()); Integer oldordernumbersum = finishedGoodsInventoryMapper.findOrderNumberdsum(orderDetail.getFinishedGoodsInventory().getOrderId()); Integer newordersum = finishedGoodsInventoryMapper.findOrderQuantity(orderDetail.getOrderId()); Integer newordernumbersum = finishedGoodsInventoryMapper.findOrderNumberdsum(orderDetail.getOrderId()); //获取单号 String oddNumber= orderNumberSetting("调拨"); //添加调拨记录 finishedOperateLogMapper.insertFinishedOperateLogAllocate(orderDetail,userName,oddNumber); //修改原订单的库存数量 finishedGoodsInventoryMapper.updateInventoryquantityAllocateOut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity())); //修改调拨后订单的库存数量 finishedGoodsInventoryMapper.updateInventoryquantityAllocateInt(orderDetail.getOrderId(),orderDetail.getOrderNumber(), Math.toIntExact(orderDetail.getQuantity())); //修改原订单明细表发货数量 finishedGoodsInventoryMapper.updateOutOrderNumberConut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity())); //修改调拨新订单明细表发货数量 finishedGoodsInventoryMapper.updateIntOrderNumberConut(orderDetail.getOrderId(),orderDetail.getOrderNumber(), Math.toIntExact(orderDetail.getQuantity())); if (newordersum==newordernumbersum+orderDetail.getQuantity()){ //修改订单表入库状态 finishedGoodsInventoryMapper.updateOrderWarehousingState(orderDetail.getOrderId(),2); } if (Objects.equals(oldordersum, oldordernumbersum)){ //修改订单表入库状态 finishedGoodsInventoryMapper.updateOrderWarehousingState(orderDetail.getFinishedGoodsInventory().getOrderId(),1); } } } } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e.toString()); sysError.setFunc("saveOrder"); sysErrorService.insert(sysError); saveState = false; } return saveState; } public Map getselectAllocateFinishedOperateLog(Integer pageNum, Integer pageSize,List selectDate, FinishedOperateLog finishedOperateLog) { Integer offset = (pageNum - 1) * pageSize; String endDate = LocalDate.now().toString(); String startDate = LocalDate.now().minusDays(15).toString(); if(selectDate !=null && selectDate.size()==2){ if(!selectDate.get(0).isEmpty()){ startDate = selectDate.get(0); } if(!selectDate.get(1).isEmpty()){ endDate = selectDate.get(1); } } Map map = new HashMap<>(); map.put("data", finishedOperateLogMapper.getselectAllocateFinishedOperateLog(offset, pageSize,startDate,endDate, finishedOperateLog)); map.put("total", finishedOperateLogMapper.getselectAllocateFinishedOperateLogPageTotal(offset, pageSize,startDate,endDate, finishedOperateLog)); List list = new ArrayList<>(); list.add(startDate); list.add(endDate); map.put("selectDate",list); return map; } public Boolean updateFinishedGoodsInventoryTakeOut(Map object) { boolean saveState = true; //设置回滚点 Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { String userName = ""; String userId = ""; if (object.get("userName") != null) { userName = object.get("userName").toString(); } if (object.get("userId") != null) { userId = object.get("userId").toString(); } String operateType = ""; String remarks = ""; if (object.get("remarks") != null) { remarks = object.get("remarks").toString(); } if (object.get("operateType") != null) { operateType = object.get("operateType").toString(); } //获取对象集合循环进行新增修改 List orderDetaillist = JSONArray.parseArray(JSONObject.toJSONString(object.get("orderDetail")), OrderDetail.class); if (!orderDetaillist.isEmpty()){ for (OrderDetail orderDetail : orderDetaillist) { Integer oldordersum = finishedGoodsInventoryMapper.findOrderQuantity(orderDetail.getFinishedGoodsInventory().getOrderId()); Integer oldordernumbersum = finishedGoodsInventoryMapper.findOrderNumberdsum(orderDetail.getFinishedGoodsInventory().getOrderId()); //获取单号 String oddNumber= orderNumberSetting("领出"); //添加领出记录 finishedOperateLogMapper.insertFinishedOperateLogTakeOut(orderDetail,userName,oddNumber,operateType,remarks); //修改库存数量 finishedGoodsInventoryMapper.updateInventoryquantityOut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity())); //修改订单明细表数量 finishedGoodsInventoryMapper.updateOutOrderNumberConut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity())); if (Objects.equals(oldordersum, oldordernumbersum)){ //修改订单表入库状态 finishedGoodsInventoryMapper.updateOrderWarehousingState(orderDetail.getFinishedGoodsInventory().getOrderId(),1); } } } } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e.toString()); sysError.setFunc("saveOrder"); sysErrorService.insert(sysError); saveState = false; } return saveState; } public Map getSelectOperateRecord(Integer pageNum, Integer pageSize, List selectDate, FinishedOperateLog finishedOperateLog) { Integer offset = (pageNum-1)*pageSize; String endDate = LocalDate.now().toString(); String startDate = LocalDate.now().minusDays(15).toString(); if(selectDate !=null && selectDate.size()==2){ if(!selectDate.get(0).isEmpty()){ startDate = selectDate.get(0); } if(!selectDate.get(1).isEmpty()){ endDate = selectDate.get(1); } } Map map = new HashMap<>(); map.put("data", finishedOperateLogMapper.getSelectOperateRecord(offset, pageSize,startDate, endDate, finishedOperateLog)); map.put("total", finishedOperateLogMapper.getSelectOperateRecordLogPageTotal(offset, pageSize,startDate, endDate, finishedOperateLog)); List list = new ArrayList<>(); list.add(startDate); list.add(endDate); map.put("selectDate",list); return map; } public Boolean updateFinishedGoodsInventoryRework(Map object) { boolean saveState = true; //设置回滚点 Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { String userName = ""; String userId = ""; if (object.get("userName") != null) { userName = object.get("userName").toString(); } if (object.get("userId") != null) { userId = object.get("userId").toString(); } String operateType = ""; String remarks = ""; if (object.get("remarks") != null) { remarks = object.get("remarks").toString(); } if (object.get("operateType") != null) { operateType = object.get("operateType").toString(); } //获取对象集合循环进行新增修改 List orderDetaillist = JSONArray.parseArray(JSONObject.toJSONString(object.get("orderDetail")), OrderDetail.class); if (!orderDetaillist.isEmpty()){ for (OrderDetail orderDetail : orderDetaillist) { Integer oldordersum = finishedGoodsInventoryMapper.findOrderQuantity(orderDetail.getFinishedGoodsInventory().getOrderId()); Integer oldordernumbersum = finishedGoodsInventoryMapper.findOrderNumberdsum(orderDetail.getFinishedGoodsInventory().getOrderId()); //获取单号 String oddNumber= orderNumberSetting("返工"); //添加领出记录 finishedOperateLogMapper.insertFinishedOperateLogRework(orderDetail,userName,oddNumber,operateType,remarks); //修改库存数量 finishedGoodsInventoryMapper.updateInventoryquantityOut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity())); //修改订单明细表数量 finishedGoodsInventoryMapper.updateOutOrderNumberConut(orderDetail.getFinishedGoodsInventory().getOrderId(),orderDetail.getFinishedGoodsInventory().getOrderNumber(), Math.toIntExact(orderDetail.getQuantity())); if (Objects.equals(oldordersum, oldordernumbersum)){ //修改订单表入库状态 finishedGoodsInventoryMapper.updateOrderWarehousingState(orderDetail.getFinishedGoodsInventory().getOrderId(),1); } } } } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e.toString()); sysError.setFunc("saveOrder"); sysErrorService.insert(sysError); saveState = false; } return saveState; } public Boolean updateFinishedGoodsInventoryToExamine(Map object,String type) { boolean saveState = true; //设置回滚点 Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { String userName = ""; String userId = ""; if (object.get("userName") != null) { userName = object.get("userName").toString(); } if (object.get("userId") != null) { userId = object.get("userId").toString(); } //获取对象集合循环进行新增修改 List finishedOperateLogslist = JSONArray.parseArray(JSONObject.toJSONString(object.get("orderDetail")), FinishedOperateLog.class); if (!finishedOperateLogslist.isEmpty()){ for (FinishedOperateLog finishedOperateLog : finishedOperateLogslist) { if(Objects.equals(type, "审核")){ //审核修改领出记录 finishedOperateLogMapper.updateToExamine(finishedOperateLog,userName,"已审核"); //审核修改库存数量 finishedGoodsInventoryMapper.updateInventoryInventoryOut(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),Math.toIntExact(finishedOperateLog.getQuantity())); } else if (Objects.equals(type, "反审")) { //审核修改领出记录 finishedOperateLogMapper.updateToExamine(finishedOperateLog,userName,"未审核"); //审核修改库存数量 finishedGoodsInventoryMapper.updateInventoryInventoryInt(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),Math.toIntExact(finishedOperateLog.getQuantity())); } } } } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e.toString()); sysError.setFunc("saveOrder"); sysErrorService.insert(sysError); saveState = false; } return saveState; } public String orderNumberSetting(String type) { //根据类型自动生成不同的操作单号 String alias=""; if(Objects.equals(type, "入库")){ alias="RK"; }else if(Objects.equals(type, "出库")){ alias="CK"; }else if(Objects.equals(type, "调拨")){ alias="DB"; }else if(Objects.equals(type, "领出")){ alias="LC"; }else if(Objects.equals(type, "返工")){ alias="FG"; } //查询当天的最大数量 Integer maximum=finishedOperateLogMapper.getmaximum(type); //设置两位不够补0 String formattedNumber = String.format("%02d", maximum+1); //格式化当前日期 Date currentDate = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd"); String formattedDate = dateFormat.format(currentDate); String oddNumbers = alias+formattedDate+formattedNumber; return oddNumbers; } }