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.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.example.erp.dto.mm.FinishedOperateLogDTO; import com.example.erp.entity.mm.FinishedGoodsInventory; import com.example.erp.entity.mm.FinishedOperateLog; import com.example.erp.entity.mm.MaterialInventory; import com.example.erp.entity.pp.FlowCard; import com.example.erp.entity.sd.Delivery; import com.example.erp.entity.sd.DeliveryDetail; import com.example.erp.entity.sd.Order; import com.example.erp.entity.sd.OrderDetail; import com.example.erp.entity.userInfo.Log; 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.mapper.pp.FlowCardMapper; import com.example.erp.mapper.sd.OrderDetailMapper; import com.example.erp.mapper.sd.OrderMapper; import com.example.erp.service.userInfo.LogService; 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.math.BigDecimal; import java.math.RoundingMode; import java.sql.SQLOutput; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; @Service @DS("mm") @Transactional(rollbackFor = Exception.class) public class FinishedGoodsInventoryService { @Autowired FinishedGoodsInventoryMapper finishedGoodsInventoryMapper; @Autowired FinishedOperateLogMapper finishedOperateLogMapper; @Autowired BasicWarehouseTypeMapper basicWarehouseTypeMapper; @Autowired OrderDetailMapper orderDetailMapper; @Autowired OrderMapper orderMapper; @Autowired FlowCardMapper flowCardMapper; @Autowired SysErrorService sysErrorService; @Autowired LogService logService; 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 getSelectWarehousing(Integer pageNum, Integer pageSize, FlowCard flowCard) { Integer offset = (pageNum - 1) * pageSize; Map map = new HashMap<>(); map.put("data", finishedGoodsInventoryMapper.getSelectWarehousing(offset, pageSize, flowCard)); map.put("total", finishedGoodsInventoryMapper.getSelectWarehousingPageTotal(offset, pageSize, flowCard)); return map; } public Map getSelectWarehousingApp(String processId) { Map map = new HashMap<>(); FlowCard flowCard=new FlowCard(); if(processId!=null){ flowCard.setProcessId(processId.substring(0,14)); map.put("data", finishedGoodsInventoryMapper.getSelectWarehousing(0, 999999999, flowCard)); map.put("total", finishedGoodsInventoryMapper.getSelectWarehousingPageTotal(0, 999999999, flowCard)); } return map; } public String addSelectWarehousing(Map object) { String saveState = "true"; Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { //定义前端传输的数据 String storageRegion = ""; String remark = ""; String container = ""; int decValue = 0; if (object.get("remark") != null) { remark = object.get("remark").toString(); } if (object.get("storageRegion") != null) { storageRegion = object.get("storageRegion").toString(); } if (object.get("container") != null) {//箱号 container = object.get("container").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(); } if (object.get("decValue") != null) { decValue = Integer.parseInt(object.get("decValue").toString()); } String createTime = null; if(object.get("createTime")!=null){ createTime = object.get("createTime").toString(); } Log log = new Log(); log.setOperator(userName); log.setOperatorId(userId); log.setContent(object.toString()); log.setFunction("addSelectWarehousing入库"); logService.saveLog(log); //获取对象集合循环进行新增修改 List flowCardlist = JSONArray.parseArray(JSONObject.toJSONString(object.get("flowCard")), FlowCard.class); if (!flowCardlist.isEmpty()){ //删除一年前且发货的订单库存信息 finishedGoodsInventoryMapper.deleteFinishedGoodsInventoryDate(); //获取单号 String oddNumber= orderNumberSetting("入库"); for (FlowCard flowCards : flowCardlist) { FlowCard flowCard = finishedGoodsInventoryMapper.getSelectWarehousingByProcessId(flowCards.getOrder().getOrderId(),flowCards.getOrderNumber(),flowCards.getProcessId()); Integer calculateType=flowCard.getOrder().getCalculateType(); double deliveryDetailMoney = 0.0; double deliveryDetailArea = 0.0; if(flowCards.getInventoryQuantity()<=flowCard.getInventoryQuantity()){ flowCard.setInventoryQuantity(flowCards.getInventoryQuantity()); } BigDecimal getComputeArea= BigDecimal.valueOf(flowCard.getOrderDetail().getComputeArea()); BigDecimal getQuantity= BigDecimal.valueOf(flowCard.getInventoryQuantity()); BigDecimal getPrice= BigDecimal.valueOf(flowCard.getOrderDetail().getPrice()); BigDecimal getWidth= BigDecimal.valueOf(flowCard.getOrderDetail().getWidth()); BigDecimal getHeight= BigDecimal.valueOf(flowCard.getOrderDetail().getHeight()); BigDecimal singlePieceArea =getComputeArea.multiply(getQuantity).setScale(decValue, RoundingMode.HALF_UP) .multiply(getPrice).setScale(2, RoundingMode.HALF_UP); //根据订单计算方式进行金额计算 if (calculateType==1){ deliveryDetailMoney=singlePieceArea.doubleValue(); deliveryDetailArea=getComputeArea.multiply(getQuantity).doubleValue(); }else if (calculateType==2){ //判断实际单片面积跟结算单片面积是否相等 结算总面积跟实际总面积是否相等 if(Objects.equals(flowCard.getOrderDetail().getArea(), flowCard.getOrderDetail().getComputeArea())&&Objects.equals(flowCard.getOrderDetail().getGrossArea(), flowCard.getOrderDetail().getComputeGrossArea())){ deliveryDetailMoney=getWidth.multiply(getHeight).multiply(getQuantity).divide(BigDecimal.valueOf(1000000), decValue, RoundingMode.HALF_UP) .multiply(getPrice).setScale(2, RoundingMode.HALF_UP).doubleValue(); deliveryDetailArea=getWidth.multiply(getHeight).multiply(getQuantity).divide(BigDecimal.valueOf(1000000), decValue, RoundingMode.HALF_UP).doubleValue(); }else{ deliveryDetailMoney=singlePieceArea.doubleValue(); deliveryDetailArea=getComputeArea.multiply(getQuantity).doubleValue(); } }else if (calculateType==3){ deliveryDetailMoney=getQuantity.multiply(getPrice).setScale(2, RoundingMode.HALF_UP).doubleValue(); deliveryDetailArea=getComputeArea.multiply(getQuantity).doubleValue(); }else if (calculateType==4){ //判断实际单片面积跟结算单片面积是否相等 结算总面积跟实际总面积是否相等 if(Objects.equals(flowCard.getOrderDetail().getArea(), flowCard.getOrderDetail().getComputeArea())&&Objects.equals(flowCard.getOrderDetail().getGrossArea(), flowCard.getOrderDetail().getComputeGrossArea())){ deliveryDetailMoney=getWidth.multiply(getHeight).multiply(getQuantity).multiply(getPrice). divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP).doubleValue(); deliveryDetailArea=getWidth.multiply(getHeight).multiply(getQuantity).divide(BigDecimal.valueOf(1000000), decValue, RoundingMode.HALF_UP).doubleValue(); }else{ deliveryDetailMoney=getComputeArea.multiply(getQuantity).multiply(getPrice).setScale(decValue, RoundingMode.HALF_UP).doubleValue(); deliveryDetailArea=getComputeArea.multiply(getQuantity).doubleValue(); } } //添加出入库记录 finishedOperateLogMapper.insertIntFinishedOperateLog(flowCard,userName,oddNumber,container,deliveryDetailMoney,deliveryDetailArea,createTime,getComputeArea.doubleValue()); Integer finishedGoodsInventorycount = 0; finishedGoodsInventorycount = finishedGoodsInventoryMapper.findOrderNumberdContainercount(flowCard.getOrder().getOrderId(),flowCard.getOrderNumber(),container); //finishedGoodsInventorycount = finishedGoodsInventoryMapper.findOrderNumberdcount(flowCard.getOrder().getOrderId(),flowCard.getOrderNumber()); Integer ordersum = finishedGoodsInventoryMapper.findOrderQuantity(flowCard.getOrder().getOrderId()); Integer ordernumbersum = finishedGoodsInventoryMapper.findOrderNumberdsum(flowCard.getOrder().getOrderId()); FlowCard flowCard1=finishedGoodsInventoryMapper.findFlowCard(flowCard); //判断库存数是否大于未入库数 if(flowCard1.getReceivedQuantity()+flowCard.getInventoryQuantity()<=flowCard1.getInventoryQuantity()){ /*System.out.println("订单总数:" + ordersum + "已入库数量:" + ordernumbersum + "准备入库数量" + flowCard.getInventoryQuantity());*/ if (finishedGoodsInventorycount > 0) { //修改库存表入库数量 finishedGoodsInventoryMapper.updateInventory(flowCard,storageRegion, remark,container); //修改流程卡表入库数量 finishedGoodsInventoryMapper.updateflowcard(flowCard); //修改订单表入库状态 finishedGoodsInventoryMapper.updateOrderWarehousingState(flowCard.getOrder().getOrderId(),1); //修改订单明细表入库数量 finishedGoodsInventoryMapper.updateIntOrderNumberConut(flowCard.getOrder().getOrderId(),flowCard.getOrderNumber(), Long.valueOf(flowCard.getInventoryQuantity())); //判断订单是否全部入库 if (ordersum == (ordernumbersum + flowCard.getInventoryQuantity())) { //修改订单表入库状态 finishedGoodsInventoryMapper.updateOrderWarehousingState(flowCard.getOrder().getOrderId(),2); } } else { if (finishedGoodsInventoryMapper.insertFinishedGoodsInventory(flowCard, storageRegion, remark,container,getComputeArea.doubleValue())) { //修改流程卡表入库数量 finishedGoodsInventoryMapper.updateflowcard(flowCard); //修改订单明细表入库数量 finishedGoodsInventoryMapper.updateIntOrderNumberConut(flowCard.getOrder().getOrderId(),flowCard.getOrderNumber(), Long.valueOf(flowCard.getInventoryQuantity())); if (ordersum == (ordernumbersum + flowCard.getInventoryQuantity())) { //修改订单表入库状态 finishedGoodsInventoryMapper.updateOrderWarehousingState(flowCard.getOrder().getOrderId(),2); }else{ //修改订单表入库状态 finishedGoodsInventoryMapper.updateOrderWarehousingState(flowCard.getOrder().getOrderId(),1); } } } }else{ TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); return "false1"; } } }else{ TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); return "false2"; } } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e+Arrays.toString(e.getStackTrace())); sysError.setFunc("addSelectWarehousing"); sysErrorService.insert(sysError); saveState = "false"; } return saveState; } public Map getSelectDeliveryDetail(Integer pageNum, Integer pageSize, OrderDetail orderDetail) { Integer offset = (pageNum - 1) * pageSize; Map map = new HashMap<>(); map.put("data", finishedGoodsInventoryMapper.getSelectDeliveryDetail(offset, pageSize, orderDetail)); map.put("total", finishedGoodsInventoryMapper.getSelectDeliveryDetailPageTotal(offset, pageSize, orderDetail)); return map; } public Map getSelectDeliveryDetailApp() { Map map = new HashMap<>(); OrderDetail orderDetail=new OrderDetail(); map.put("data", finishedGoodsInventoryMapper.getSelectDeliveryDetail(0, 999999999, orderDetail)); map.put("total", finishedGoodsInventoryMapper.getSelectDeliveryDetailPageTotal(0, 999999999, orderDetail)); return map; } public String addDeliveryDetail(Map object) { String 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(); } Log log = new Log(); log.setOperator(userName); log.setOperatorId(userId); log.setContent(object.toString()); log.setFunction("addDeliveryDetail出库"); logService.saveLog(log); //获取对象集合循环进行新增修改 List orderDetaillist = JSONArray.parseArray(JSONObject.toJSONString(object.get("orderDetail")), OrderDetail.class); if (!orderDetaillist.isEmpty()){ if(!Objects.equals(deliveryDetailLogic(orderDetaillist, savePoint, userName), "true")) { return deliveryDetailLogic(orderDetaillist, savePoint, userName); } } } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e+Arrays.toString(e.getStackTrace())); sysError.setFunc("addDeliveryDetail"); 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(); } Log log = new Log(); log.setOperator(userName); log.setOperatorId(userId); log.setContent(object.toString()); log.setFunction("updateFinishedGoodsInventoryAllocate调拨"); logService.saveLog(log); //获取对象集合循环进行新增修改 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(), 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+Arrays.toString(e.getStackTrace())); sysError.setFunc("updateFinishedGoodsInventoryAllocate"); 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(); } Log log = new Log(); log.setOperator(userName); log.setOperatorId(userId); log.setContent(object.toString()); log.setFunction("updateFinishedGoodsInventoryTakeOut领出"); logService.saveLog(log); //获取对象集合循环进行新增修改 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()), orderDetail.getDeliveryDetail().getBoxNo()); //修改订单明细表数量 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+Arrays.toString(e.getStackTrace())); sysError.setFunc("updateFinishedGoodsInventoryTakeOut"); 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()), orderDetail.getDeliveryDetail().getBoxNo()); //修改订单明细表数量 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+Arrays.toString(e.getStackTrace())); sysError.setFunc("updateFinishedGoodsInventoryRework"); 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(); } Log log = new Log(); log.setOperator(userName); log.setOperatorId(userId); log.setContent(object.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()),finishedOperateLog.getRemarks()); log.setFunction("updateFinishedGoodsInventoryToExamine审核"); } else if (Objects.equals(type, "反审")) { //审核修改领出记录 finishedOperateLogMapper.updateToExamine(finishedOperateLog,userName,"未审核"); //审核修改库存数量 finishedGoodsInventoryMapper.updateInventoryInventoryInt(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),Math.toIntExact(finishedOperateLog.getQuantity()), finishedOperateLog.getRemarks()); log.setFunction("updateFinishedGoodsInventoryToExamine反审"); } } } logService.saveLog(log); } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e+Arrays.toString(e.getStackTrace())); sysError.setFunc("updateFinishedGoodsInventoryToExamine"); sysErrorService.insert(sysError); saveState = false; } return saveState; } public Boolean cancelFinishedGoodsInventoryToExamine(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(); } Log log = new Log(); log.setOperator(userName); log.setOperatorId(userId); log.setContent(object.toString()); log.setFunction("cancelFinishedGoodsInventoryToExamine作废"); logService.saveLog(log); //获取对象集合循环进行新增修改 List finishedOperateLogslist = JSONArray.parseArray(JSONObject.toJSONString(object.get("orderDetail")), FinishedOperateLog.class); if (!finishedOperateLogslist.isEmpty()){ for (FinishedOperateLog finishedOperateLog : finishedOperateLogslist) { finishedGoodsInventoryMapper.updateInventoryquantityInt(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(), Math.toIntExact(finishedOperateLog.getQuantity())); finishedGoodsInventoryMapper.updateIntOrderNumberConut(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(), Long.valueOf(finishedOperateLog.getQuantity())); finishedOperateLogMapper.updateFinishedOperateLogState(finishedOperateLog,"已作废"); } } } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e+Arrays.toString(e.getStackTrace())); sysError.setFunc("cancelFinishedGoodsInventoryToExamine"); sysErrorService.insert(sysError); saveState = false; } return saveState; } public Map getSelectStorageRecord(Integer pageNum, Integer pageSize, List selectDate,String type, 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.getSelectStorageRecord(offset, pageSize,startDate, endDate,type, finishedOperateLog)); map.put("total", finishedOperateLogMapper.getSelectStorageRecordLogPageTotal(offset, pageSize,startDate, endDate,type, finishedOperateLog)); List list = new ArrayList<>(); list.add(startDate); list.add(endDate); map.put("selectDate",list); return map; } public Map getSelectFinishedOperateLogReport(String type,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.getSelectFinishedOperateLogReport(offset, pageSize,startDate, endDate, finishedOperateLog,type)); map.put("total", finishedOperateLogMapper.getSelectFinishedOperateLogReportPageTotal(offset, pageSize,startDate, endDate, finishedOperateLog,type)); List list = new ArrayList<>(); list.add(startDate); list.add(endDate); map.put("selectDate",list); return map; } public String cancelFinishedGoodsInventoryStorage(Map object) { String saveState = "true"; //设置回滚点 Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { Log log = new Log(); log.setOperatorId(object.get("userId").toString()); log.setOperator(object.get("userName").toString()); log.setContent(object.toString()); //获取对象集合循环进行新增修改 List finishedOperateLogslist = JSONArray.parseArray(JSONObject.toJSONString(object.get("orderDetail")), FinishedOperateLog.class); if (!finishedOperateLogslist.isEmpty()){ if(!Objects.equals(cancelDeliveryDetailLogic(finishedOperateLogslist, savePoint, object.get("userName").toString(), log), "true")){ return cancelDeliveryDetailLogic(finishedOperateLogslist,savePoint,object.get("userName").toString(),log); } } logService.saveLog(log); } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e+Arrays.toString(e.getStackTrace())); sysError.setFunc("cancelFinishedGoodsInventoryStorage"); sysErrorService.insert(sysError); saveState = "false"; } return saveState; } public List exportFinishedOperateLogReport(List dates,String type) { return finishedOperateLogMapper.exportFinishedOperateLogReport(dates,type); } public Boolean oneClickStorage(String orderId,String userName) { boolean saveState = true; Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); Log log = new Log(); log.setContent(orderId); log.setOperator(userName); log.setFunction("oneClickStorage入库:"+orderId); logService.saveLog(log); try { String oddNumber= orderNumberSetting("入库"); Order order = orderMapper.selectOne(new QueryWrapper().eq("order_id",orderId)); if(order.getWarehousing()!=2){ List orderDetailList=finishedGoodsInventoryMapper.getSelectOrderDetail(orderId); for (OrderDetail orderDetail:orderDetailList){ FlowCard flowCard =flowCardMapper.selectOne( new LambdaQueryWrapper() .eq(FlowCard::getOrderId, orderDetail.getOrderId()) .eq(FlowCard::getOrderNumber, orderDetail.getOrderNumber()) .groupBy(FlowCard::getOrderId,FlowCard::getOrderNumber)); FinishedGoodsInventory finishedGoodsInventory = finishedGoodsInventoryMapper.findOrderNumberd(orderDetail.getOrderId(),orderDetail.getOrderNumber()); // 计算剩余数量 long quantity; if (flowCard != null) { quantity = flowCard.getQuantity() - flowCard.getReceivedQuantity(); } else { quantity = orderDetail.getQuantity() - orderDetail.getWarehouseNum(); } if (quantity <= 0) continue ; int calculateType=order.getCalculateType(); double deliveryDetailMoney = 0.0; double deliveryDetailArea = 0.0; BigDecimal getComputeArea= BigDecimal.valueOf(orderDetail.getComputeArea()); BigDecimal getQuantity= BigDecimal.valueOf(quantity); BigDecimal getPrice= BigDecimal.valueOf(orderDetail.getPrice()); BigDecimal getWidth= BigDecimal.valueOf(orderDetail.getWidth()); BigDecimal getHeight= BigDecimal.valueOf(orderDetail.getHeight()); BigDecimal singlePieceArea =getComputeArea.multiply(getQuantity).setScale(2, RoundingMode.HALF_UP) .multiply(getPrice).setScale(2, RoundingMode.HALF_UP); //根据订单计算方式进行金额计算 if (calculateType==1){ deliveryDetailMoney=singlePieceArea.doubleValue(); deliveryDetailArea=getComputeArea.multiply(getQuantity).doubleValue(); }else if (calculateType==2){ //判断实际单片面积跟结算单片面积是否相等 结算总面积跟实际总面积是否相等 if(Objects.equals(orderDetail.getArea(), orderDetail.getComputeArea())&&Objects.equals(orderDetail.getGrossArea(), orderDetail.getComputeGrossArea())){ deliveryDetailMoney=getWidth.multiply(getHeight).multiply(getQuantity).divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP) .multiply(getPrice).setScale(2, RoundingMode.HALF_UP).doubleValue(); deliveryDetailArea=getWidth.multiply(getHeight).multiply(getQuantity).divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP).doubleValue(); }else{ deliveryDetailMoney=singlePieceArea.doubleValue(); deliveryDetailArea=getComputeArea.multiply(getQuantity).doubleValue(); } }else if (calculateType==3){ deliveryDetailMoney=getQuantity.multiply(getPrice).setScale(2, RoundingMode.HALF_UP).doubleValue(); deliveryDetailArea=getComputeArea.multiply(getQuantity).doubleValue(); }else if (calculateType==4){ //判断实际单片面积跟结算单片面积是否相等 结算总面积跟实际总面积是否相等 if(Objects.equals(orderDetail.getArea(), orderDetail.getComputeArea())&&Objects.equals(orderDetail.getGrossArea(), orderDetail.getComputeGrossArea())){ deliveryDetailMoney=getWidth.multiply(getHeight).multiply(getQuantity).multiply(getPrice). divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP).doubleValue(); deliveryDetailArea=getWidth.multiply(getHeight).multiply(getQuantity).divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP).doubleValue(); }else{ deliveryDetailMoney=getComputeArea.multiply(getQuantity).multiply(getPrice).setScale(2, RoundingMode.HALF_UP).doubleValue(); deliveryDetailArea=getComputeArea.multiply(getQuantity).doubleValue(); } } // 更新订单明细 orderDetail.setQuantity(quantity); orderDetail.setGrossAmount(deliveryDetailMoney); orderDetail.setComputeGrossArea(deliveryDetailArea); // 更新库存 if (finishedGoodsInventory != null) { finishedGoodsInventoryMapper.updateOrderInventory(orderDetail); } else { finishedGoodsInventoryMapper.insertOrderFinishedGoodsInventory(orderDetail); } // 记录操作日志 String processId = flowCard != null ? flowCard.getProcessId() : ""; finishedOperateLogMapper.insertOrderFinishedOperateLog(orderDetail, userName, oddNumber, processId); finishedGoodsInventoryMapper.updateOrderNumberConut(orderDetail.getOrderId(), orderDetail.getOrderNumber(), orderDetail.getQuantity()); // 更新流程卡 if (flowCard != null) { flowCard.setInventoryQuantity((int) quantity); Order order1 = new Order(); order1.setOrderId(flowCard.getOrderId()); flowCard.setOrder(order1); finishedGoodsInventoryMapper.updateflowcard(flowCard); } } finishedGoodsInventoryMapper.updateOrderWarehousingState(orderId,2); } } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e+Arrays.toString(e.getStackTrace())); sysError.setFunc("oneClickStorage"); sysErrorService.insert(sysError); saveState = false; } return saveState; } public Map getSelectStorageRecordPint(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.getSelectStorageRecordPint(offset, pageSize,startDate, endDate, finishedOperateLog)); map.put("total", finishedOperateLogMapper.getSelectStorageRecordPintPageTotal(offset, pageSize,startDate, endDate, finishedOperateLog)); List list = new ArrayList<>(); list.add(startDate); list.add(endDate); map.put("selectDate",list); return map; } 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"; }else if(Objects.equals(type, "调架")){ alias="TJ"; } //查询当天的最大数量 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; } public Map getSelectPrintSv(Map object) { Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 List finishedOperateLogList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FinishedOperateLog.class); if (!finishedOperateLogList.isEmpty()) { Set processedProcessIds = new HashSet<>(); for (FinishedOperateLog finishedOperateLog : finishedOperateLogList) { String OrderId = finishedOperateLog.getOrderId(); String Remarks = finishedOperateLog.getRemarks(); // 检查是否已经处理过该 OrderId,如果处理过则跳过 if (processedProcessIds.contains(OrderId) && processedProcessIds.contains(Remarks)) { continue; } Map itemmap = new HashMap<>(); itemmap.put("detail", finishedOperateLogMapper.getPrimaryListLimt(finishedOperateLog.getOrderId(),finishedOperateLog.getProcessId(),finishedOperateLog.getRemarks())); List> detailList = finishedOperateLogMapper.getDetailList(finishedOperateLog.getOrderId(),finishedOperateLog.getProcessId(),finishedOperateLog.getRemarks()); itemmap.put("detailList", detailList); list.add(itemmap); processedProcessIds.add(OrderId); processedProcessIds.add(Remarks); } } map.put("data", list); return map; } public Map getSelectPrintSvs(Map object) { Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 List finishedOperateLogList = JSONArray.parseArray(JSONObject.toJSONString(object.get("printList")), FinishedOperateLog.class); if (!finishedOperateLogList.isEmpty()) { Set processedProcessIds = new HashSet<>(); for (FinishedOperateLog finishedOperateLog : finishedOperateLogList) { String OrderId = finishedOperateLog.getOrderId(); String Remarks = finishedOperateLog.getRemarks(); // 检查是否已经处理过该 OrderId,如果处理过则跳过 if (processedProcessIds.contains(OrderId) && processedProcessIds.contains(Remarks)) { continue; } Map itemmap = new HashMap<>(); itemmap.put("detail", finishedOperateLogMapper.getPrimaryListLimts( finishedOperateLog.getOrder().getCustomerId(), finishedOperateLog.getOrder().getProject(), finishedOperateLog.getRemarks())); List> detailList = finishedOperateLogMapper.getDetailList2(finishedOperateLog.getOrderId(),finishedOperateLog.getProcessId(),finishedOperateLog.getRemarks()); List> detailsmaplist = new ArrayList>(); for(Map details:detailList){ Map detailsmap = new HashMap<>(); detailsmap.put("product_name",details.get("product_name").toString()); List> orderDetailList = finishedOperateLogMapper .getDetailLists( finishedOperateLog.getOrderId(), finishedOperateLog.getRemarks(), Integer.valueOf(details.get("product_id").toString()), details.get("thickness").toString() ); /*for (MaporderDetail:orderDetailList){ }*/ detailsmap.put("detailList",orderDetailList); detailsmaplist.add(detailsmap); } itemmap.put("detailList", detailsmaplist); list.add(itemmap); processedProcessIds.add(OrderId); processedProcessIds.add(Remarks); } } map.put("data", list); return map; } public String deliveryDetailLogic(List list,Object savePoint,String userName) { for (OrderDetail orderDetail : list) { //获取单号 String oddNumber= orderNumberSetting("出库"); OrderDetail orderDetailNew= finishedGoodsInventoryMapper. findOrderDetailNumberd( orderDetail.getDeliveryDetail().getOrderId(), orderDetail.getDeliveryDetail().getOrderNumber()); //添加出入库记录 finishedOperateLogMapper.insertOutFinishedOperateLog(orderDetail,userName,oddNumber,orderDetail.getDeliveryDetail().getBoxNo()); orderDetailMapper.update(null, new UpdateWrapper() .setSql("out_stock_num = ifnull(out_stock_num,0)+"+orderDetail.getDeliveryDetail().getQuantity()) .eq("order_id",orderDetail.getDeliveryDetail().getOrderId()) .eq("order_number",orderDetail.getDeliveryDetail().getOrderNumber()) ); //判断发货单的库存是否存在 Integer finishedGoodsInventorycount = finishedGoodsInventoryMapper.findOrderNumberdcount(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryDetail().getBoxNo()); //获取订单总数量 Integer ordersum = finishedGoodsInventoryMapper.findOrderQuantity(orderDetail.getDeliveryDetail().getOrderId()); //获取库存总数量 Integer orderNumberdsum = finishedGoodsInventoryMapper.findOrderNumberdsum(orderDetail.getDeliveryDetail().getOrderId()); //获取发货总数量 Integer orderNumberdDeliverysum = finishedGoodsInventoryMapper.findOrderDeliveryQuantitySum(orderDetail.getDeliveryDetail().getOrderId()); //获取此发货单 发货总数量 Integer deliverysum = finishedGoodsInventoryMapper.findDeliveryQuantity(orderDetail.getDeliveryDetail().getDeliveryId()); //获取已经出库的数量 Integer deliverydetailsum = finishedGoodsInventoryMapper.findDeliverydetailsum(orderDetail.getDeliveryDetail().getDeliveryId(),0); //获取订单已经出库的数量 OrderDetail orderDetail1 = orderDetailMapper. selectOne(new QueryWrapper() .select("ifnull(sum(out_stock_num),0) as out_stock_num") .eq("order_id",orderDetail.getDeliveryDetail().getOrderId()) ); if(deliverydetailsum==null){ deliverydetailsum=0; } DeliveryDetail deliveryDetail=finishedGoodsInventoryMapper. findDeliverydetail(orderDetail.getDeliveryDetail().getOrderId(), orderDetail.getDeliveryDetail().getOrderNumber(), orderDetail.getDeliveryDetail().getDeliveryId(), orderDetail.getDeliveryDetail().getBoxNo() ); /*System.out.println("订单总数:" + ordersum + "订单库存数:" + orderNumberdsum + "准备出库数量" + orderDetail.getWarehouseNum()+ "发货数量" + orderDetail.getDeliveryDetail().getQuantity()+ "发货总数" + deliverysum+ "已发数量" + deliverydetailsum);*/ //判断发货单的库存是否存在 if (finishedGoodsInventorycount > 0) { //判断发货单是否已出库 if(deliveryDetail==null){ if(orderDetailNew.getWarehouseNum()>=orderDetail.getDeliveryDetail().getQuantity()){ //修改库存表库存数量 finishedGoodsInventoryMapper.updateInventoryInventoryOut(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryDetail().getQuantity(),orderDetail.getDeliveryDetail().getBoxNo()); //修改发货明细表状态 finishedGoodsInventoryMapper.updateDeliveryDetailState(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryDetail().getDeliveryId(),0, orderDetail.getDeliveryDetail().getBoxNo()); //修改发货表状态 finishedGoodsInventoryMapper.updateDeliveryDeliveryState(orderDetail.getDeliveryDetail().getDeliveryId(),1); //修改订单明细表发货数量 finishedGoodsInventoryMapper.updateOutOrderNumberConut(orderDetail.getDeliveryDetail().getOrderId(),orderDetail.getDeliveryDetail().getOrderNumber(),orderDetail.getDeliveryDetail().getQuantity()); //修改订单表发货状态 finishedGoodsInventoryMapper.updateOrderDeliveryState(orderDetail.getDeliveryDetail().getOrderId(),1); //判断订单是否全部发货 if (Objects.equals(ordersum, orderDetail1.getOutStockNum())) { //if (ordersum == (orderDeliveryQuantitySum + orderDetail.getWarehouseNum())) { //修改订单表发货状态 finishedGoodsInventoryMapper. updateOrderDeliveryState(orderDetail.getDeliveryDetail().getOrderId(),2); } if (deliverysum==deliverydetailsum+orderDetail.getDeliveryDetail().getQuantity()) { //修改发货表状态 finishedGoodsInventoryMapper.updateDeliveryDeliveryState(orderDetail.getDeliveryDetail().getDeliveryId(),2); } }else{ TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); return "false3"; } }else{ TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); return "false1"; } }else{ TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); return "false2"; } } return "true"; } public String cancelDeliveryDetailLogic(List finishedOperateLogslist,Object savePoint,String userName,Log log) { for (FinishedOperateLog finishedOperateLog : finishedOperateLogslist) { Integer ordersum = finishedGoodsInventoryMapper.findOrderQuantity(finishedOperateLog.getOrderId()); Integer ordernumbersum = finishedGoodsInventoryMapper.findOrderNumberdsum(finishedOperateLog.getOrderId()); Integer deliverysum = finishedGoodsInventoryMapper.findDeliveryQuantity(finishedOperateLog.getOperationOrderNumber()); Integer deliverydetailsum = finishedGoodsInventoryMapper.findDeliverydetailsum(finishedOperateLog.getOperationOrderNumber(),1); if(Objects.equals(finishedOperateLog.getOperateType(), "入库")){ Delivery delivery = finishedGoodsInventoryMapper.findOrderDelivery(finishedOperateLog.getOrderId()); FinishedGoodsInventory existFinishedGoodsInventory = finishedGoodsInventoryMapper. selectOne(new LambdaQueryWrapper() .eq(FinishedGoodsInventory::getOrderId, finishedOperateLog.getOrderId()) .eq(FinishedGoodsInventory::getOrderNumber, finishedOperateLog.getOperationNumber()) .eq(FinishedGoodsInventory::getBoxNo, finishedOperateLog.getRemarks()) ); /*if(delivery!=null){ return "false1"; }*/ if(existFinishedGoodsInventory.getQuantityAvailable()finishedOperateLog.getCancelAvailable() && finishedOperateLog.getQuantity()>finishedOperateLog.getCancelAvailable()){ Order order=orderMapper.selectOne(new LambdaQueryWrapper().eq(Order::getOrderId,finishedOperateLog.getOrderId())); OrderDetail orderDetail=orderDetailMapper.selectOne(new LambdaQueryWrapper() .eq(OrderDetail::getOrderId,finishedOperateLog.getOrderId()) .eq(OrderDetail::getOrderNumber,finishedOperateLog.getOperationNumber()) ); if(order != null && orderDetail != null){ Integer calculateType=order.getCalculateType(); double deliveryDetailMoney = 0.0; double deliveryDetailArea = 0.0; BigDecimal getComputeArea= BigDecimal.valueOf(orderDetail.getComputeArea()); BigDecimal getQuantity= BigDecimal.valueOf(finishedOperateLog.getCancelAvailable()); BigDecimal getPrice= BigDecimal.valueOf(orderDetail.getPrice()); BigDecimal getWidth= BigDecimal.valueOf(orderDetail.getWidth()); BigDecimal getHeight= BigDecimal.valueOf(orderDetail.getHeight()); BigDecimal singlePieceArea =getComputeArea.multiply(getQuantity).setScale(2, RoundingMode.HALF_UP) .multiply(getPrice).setScale(2, RoundingMode.HALF_UP); //根据订单计算方式进行金额计算 if (calculateType==1){ deliveryDetailMoney=singlePieceArea.doubleValue(); deliveryDetailArea=getComputeArea.multiply(getQuantity).doubleValue(); }else if (calculateType==2){ //判断实际单片面积跟结算单片面积是否相等 结算总面积跟实际总面积是否相等 if(Objects.equals(orderDetail.getArea(), orderDetail.getComputeArea())&&Objects.equals(orderDetail.getGrossArea(), orderDetail.getComputeGrossArea())){ deliveryDetailMoney=getWidth.multiply(getHeight).multiply(getQuantity).divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP) .multiply(getPrice).setScale(2, RoundingMode.HALF_UP).doubleValue(); deliveryDetailArea=getWidth.multiply(getHeight).multiply(getQuantity).divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP).doubleValue(); }else{ deliveryDetailMoney=singlePieceArea.doubleValue(); deliveryDetailArea=getComputeArea.multiply(getQuantity).doubleValue(); } }else if (calculateType==3){ deliveryDetailMoney=getQuantity.multiply(getPrice).setScale(2, RoundingMode.HALF_UP).doubleValue(); deliveryDetailArea=getComputeArea.multiply(getQuantity).doubleValue(); }else if (calculateType==4){ //判断实际单片面积跟结算单片面积是否相等 结算总面积跟实际总面积是否相等 if(Objects.equals(orderDetail.getArea(), orderDetail.getComputeArea())&&Objects.equals(orderDetail.getGrossArea(), orderDetail.getComputeGrossArea())){ deliveryDetailMoney=getWidth.multiply(getHeight).multiply(getQuantity).multiply(getPrice). divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP).doubleValue(); deliveryDetailArea=getWidth.multiply(getHeight).multiply(getQuantity).divide(BigDecimal.valueOf(1000000), 2, RoundingMode.HALF_UP).doubleValue(); }else{ deliveryDetailMoney=getComputeArea.multiply(getQuantity).multiply(getPrice).setScale(2, RoundingMode.HALF_UP).doubleValue(); deliveryDetailArea=getComputeArea.multiply(getQuantity).doubleValue(); } } finishedOperateLogMapper.updateFinishedOperateLogQuantity(finishedOperateLog,deliveryDetailMoney,deliveryDetailArea); }else{ return "false3"; } }else{ finishedOperateLogMapper.updateFinishedOperateLogState(finishedOperateLog,"已作废"); } //修改库存表入库数量 finishedGoodsInventoryMapper.updateInventoryOut(finishedOperateLog); if(finishedOperateLog.getProcessId()!=null){ //修改流程卡表入库数量 finishedGoodsInventoryMapper.updateflowcardOut(finishedOperateLog); } //修改订单明细表入库数量 finishedGoodsInventoryMapper.updateOutOrderNumberConut(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(),finishedOperateLog.getCancelAvailable()); //修改订单表入库状态 finishedGoodsInventoryMapper.updateOrderWarehousingState(finishedOperateLog.getOrderId(),1); if (ordernumbersum-finishedOperateLog.getQuantity()==0) { //修改订单表入库状态 finishedGoodsInventoryMapper.updateOrderWarehousingState(finishedOperateLog.getOrderId(),0); } log.setFunction("cancelFinishedGoodsInventoryStorage入库"); }else if(Objects.equals(finishedOperateLog.getOperateType(), "出库")){ //修改记录表 finishedOperateLogMapper.updateFinishedOperateLogState(finishedOperateLog,"已作废"); //修改库存表库存数量 finishedGoodsInventoryMapper.updateInventoryInventoryInt( finishedOperateLog.getOrderId(), finishedOperateLog.getOperationNumber(), finishedOperateLog.getQuantity(), finishedOperateLog.getRemarks() ); //修改订单明细 出库数量 orderDetailMapper.update(null, new LambdaUpdateWrapper(). setSql("out_stock_num = ifnull(out_stock_num,0)-"+finishedOperateLog.getQuantity()) .eq(OrderDetail::getOrderId, finishedOperateLog.getOrderId()) .eq(OrderDetail::getOrderNumber, finishedOperateLog.getOperationNumber()) ); OrderDetail orderDetail1 = orderDetailMapper. selectOne(new QueryWrapper() .select("ifnull(sum(out_stock_num),0) as out_stock_num") .eq("order_id",finishedOperateLog.getOrderId()) ); //修改发货明细表状态 finishedGoodsInventoryMapper.updateDeliveryDetailState( finishedOperateLog.getOrderId(), finishedOperateLog.getOperationNumber(), finishedOperateLog.getOperationOrderNumber(), 1, finishedOperateLog.getRemarks()); //修改发货表状态 finishedGoodsInventoryMapper.updateDeliveryDeliveryState(finishedOperateLog.getOperationOrderNumber(),1); //修改订单明细表库内数量 finishedGoodsInventoryMapper.updateIntOrderNumberConut(finishedOperateLog.getOrderId(),finishedOperateLog.getOperationNumber(), Long.valueOf(finishedOperateLog.getQuantity())); //修改订单表发货状态 finishedGoodsInventoryMapper.updateOrderDeliveryState(finishedOperateLog.getOrderId(),1); //判断订单是否全部发货 if (orderDetail1.getOutStockNum()==0){ //修改订单表发货状态 finishedGoodsInventoryMapper.updateOrderDeliveryState(finishedOperateLog.getOrderId(),0); } if (deliverysum==finishedOperateLog.getQuantity()+deliverydetailsum) { //修改发货表状态 finishedGoodsInventoryMapper.updateDeliveryDeliveryState(finishedOperateLog.getOperationOrderNumber(),0); } log.setFunction("cancelFinishedGoodsInventoryStorage出库"); } } return "true"; } public Map changeRack(FinishedGoodsInventory finishedGoodsInventory, String user) { Long id = finishedGoodsInventory.getId(); Map map = new HashMap<>(); FinishedGoodsInventory oldFinishedGoodsInventory = finishedGoodsInventoryMapper.selectById(finishedGoodsInventory.getId()); //查询此此序号箱号的库存是否存在 FinishedGoodsInventory existFinishedGoodsInventory = finishedGoodsInventoryMapper .selectOne(new LambdaQueryWrapper() .eq(FinishedGoodsInventory::getOrderId, finishedGoodsInventory.getOrderId()) .eq(FinishedGoodsInventory::getOrderNumber, finishedGoodsInventory.getOrderNumber()) .eq(FinishedGoodsInventory::getBoxNo, finishedGoodsInventory.getBoxNo()) .last("limit 1") ); String operationOrderNumber = orderNumberSetting("调架"); FinishedOperateLog finishedOperateLog = new FinishedOperateLog(); finishedOperateLog.setOperationOrderNumber(operationOrderNumber); finishedOperateLog.setOrderId(oldFinishedGoodsInventory.getOrderId()); finishedOperateLog.setOperationNumber(oldFinishedGoodsInventory.getOrderNumber()); finishedOperateLog.setProcessId(oldFinishedGoodsInventory.getProcessId()); finishedOperateLog.setOperateType("调架"); finishedOperateLog.setOperator(user); //当成品箱号不存在,则新增 if(existFinishedGoodsInventory==null){ //当转移数量大于实际库存箱号时,则不能转移 if(oldFinishedGoodsInventory.getQuantityAvailable()() .eq(FinishedGoodsInventory::getId,id) ) ; finishedGoodsInventoryMapper.insert(finishedGoodsInventory); //往操作日志表添加数据 finishedOperateLog.setQuantity(finishedGoodsInventory.getQuantityAvailable()); finishedOperateLog.setArea(finishedGoodsInventory.getQuantityAvailable()*finishedGoodsInventory.getComputeArea()); finishedOperateLog.setComputeArea(finishedGoodsInventory.getComputeArea()); finishedOperateLog.setRemarks(oldFinishedGoodsInventory.getBoxNo()+"->"+finishedGoodsInventory.getBoxNo()); finishedOperateLogMapper.insert(finishedOperateLog); map.put("code",1); return map;//库存转移成功,新增箱号 }else{ //当id不变时,修改备注 if(Objects.equals(id, existFinishedGoodsInventory.getId())){ finishedGoodsInventoryMapper. update(null,new LambdaUpdateWrapper() .eq(FinishedGoodsInventory::getId,id) .set(FinishedGoodsInventory::getRemark,finishedGoodsInventory.getRemark())); map.put("code",2); return map;//库存备注修改成功 }else{ //原库存 数量面积减少 oldFinishedGoodsInventory.setInventory(oldFinishedGoodsInventory.getInventory()-finishedGoodsInventory.getQuantityAvailable()); oldFinishedGoodsInventory.setQuantityAvailable(oldFinishedGoodsInventory.getQuantityAvailable()-finishedGoodsInventory.getQuantityAvailable()); oldFinishedGoodsInventory.setArea(oldFinishedGoodsInventory.getInventory()*oldFinishedGoodsInventory.getActualSignalArea()); oldFinishedGoodsInventory.setComputeGrossArea(oldFinishedGoodsInventory.getInventory()*oldFinishedGoodsInventory.getComputeArea()); existFinishedGoodsInventory.setInventory(existFinishedGoodsInventory.getInventory()+finishedGoodsInventory.getQuantityAvailable()); existFinishedGoodsInventory.setQuantityAvailable(existFinishedGoodsInventory.getQuantityAvailable()+finishedGoodsInventory.getQuantityAvailable()); existFinishedGoodsInventory.setArea(existFinishedGoodsInventory.getInventory()*existFinishedGoodsInventory.getActualSignalArea()); existFinishedGoodsInventory.setComputeGrossArea(existFinishedGoodsInventory.getInventory()*existFinishedGoodsInventory.getComputeArea()); finishedGoodsInventoryMapper. update(oldFinishedGoodsInventory, new LambdaUpdateWrapper() .eq(FinishedGoodsInventory::getId,id) ) ; finishedGoodsInventoryMapper. update(existFinishedGoodsInventory, new LambdaUpdateWrapper() .eq(FinishedGoodsInventory::getId,existFinishedGoodsInventory.getId()) ) ; //往操作日志表添加数据 finishedOperateLog.setQuantity(finishedGoodsInventory.getQuantityAvailable()); finishedOperateLog.setComputeArea(existFinishedGoodsInventory.getComputeArea()); finishedOperateLog.setRemarks(oldFinishedGoodsInventory.getBoxNo()+"->"+existFinishedGoodsInventory.getBoxNo()); finishedOperateLogMapper.insert(finishedOperateLog); map.put("code",3); List list = new ArrayList<>(); list.add(oldFinishedGoodsInventory.getBoxNo()); list.add(existFinishedGoodsInventory.getBoxNo()); map.put("msg",list); return map;//库存转移成功,修改箱号 } } } public Map getInventoryPrints(List finishedGoodsInventories) { Map map = new HashMap<>(); List> list = new ArrayList>();//最终结果 if (!finishedGoodsInventories.isEmpty()) { Set processedProcessIds = new HashSet<>(); for (FinishedGoodsInventory finishedGoodsInventory : finishedGoodsInventories) { String orderId = finishedGoodsInventory.getOrderId(); String boxNo = finishedGoodsInventory.getBoxNo(); // 检查是否已经处理过该 OrderId,如果处理过则跳过 if (processedProcessIds.contains(orderId) && processedProcessIds.contains(boxNo)) { continue; } Map itemmap = new HashMap<>(); List> detail = finishedGoodsInventoryMapper.getPrintTitleByBox( finishedGoodsInventory.getOrder().getCustomerId(), finishedGoodsInventory.getOrder().getProject(), boxNo, orderId ); itemmap.put("detail",detail); //获取库存里面此订单此箱号的所有产品信息 List> detailList = finishedGoodsInventoryMapper .getorderProductByBoxNo(orderId,boxNo); List> detailsmaplist = new ArrayList>(); for(Map details:detailList){ Map detailsmap = new HashMap<>(); detailsmap.put("product_name",details.get("product_name").toString()); //获取明细数据 List> orderDetailList = finishedGoodsInventoryMapper .getPrintDetail( orderId, boxNo, Integer.valueOf(details.get("product_id").toString()), details.get("thickness").toString() ); detailsmap.put("detailList",orderDetailList); detailsmaplist.add(detailsmap); } itemmap.put("detailList", detailsmaplist); list.add(itemmap); processedProcessIds.add(orderId); processedProcessIds.add(boxNo); } } map.put("data", list); return map; } public Map appFinishedGoodsInventoryList() { Map map = new HashMap<>(); Map totalSum = new HashMap<>(); Integer inventory = 0; Integer quantityAvailable = 0; Double area = 0.00; Double computeGrossArea = 0.00; List finishedGoodsInventoryList=finishedGoodsInventoryMapper.getFinishedGoodsInventoryList(); if(!finishedGoodsInventoryList.isEmpty()){ for(FinishedGoodsInventory finishedGoodsInventory:finishedGoodsInventoryList){ inventory += finishedGoodsInventory.getInventory(); quantityAvailable += finishedGoodsInventory.getQuantityAvailable(); area += finishedGoodsInventory.getArea(); computeGrossArea+=finishedGoodsInventory.getComputeGrossArea(); } DecimalFormat df = new DecimalFormat("#.00"); totalSum.put("inventory",inventory); totalSum.put("quantityAvailable",quantityAvailable); totalSum.put("area", df.format(area)); totalSum.put("computeGrossArea", df.format(computeGrossArea)); map.put("data", finishedGoodsInventoryList); map.put("total", totalSum); } return map; } }