package com.example.erp.service.mm; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.example.erp.common.Constants; import com.example.erp.dto.mm.FinishedOperateLogDTO; import com.example.erp.entity.mm.*; import com.example.erp.entity.pp.*; import com.example.erp.entity.sd.Delivery; import com.example.erp.entity.sd.DeliveryDetail; import com.example.erp.entity.sd.OrderDetail; import com.example.erp.entity.sd.OrderProcessDetail; import com.example.erp.entity.userInfo.Log; import com.example.erp.entity.userInfo.SysError; import com.example.erp.exception.ServiceException; import com.example.erp.mapper.mm.BasicWarehouseTypeMapper; import com.example.erp.mapper.mm.MaterialInventoryMapper; import com.example.erp.mapper.mm.MaterialLogMapper; import com.example.erp.mapper.mm.MaterialStoreMapper; 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.time.LocalDateTime; import java.util.List; import java.util.ArrayList; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @Service @DS("mm") @Transactional(rollbackFor = Exception.class) public class MaterialInventoryService { @Autowired MaterialInventoryMapper materialInventoryMapper; @Autowired MaterialStoreMapper materialStoreMapper; @Autowired BasicWarehouseTypeMapper basicWarehouseTypeMapper; @Autowired SysErrorService sysErrorService; @Autowired LogService logService; @Autowired MaterialLogMapper materialLogMapper; public String saveMaterialOutbound(Map object) { String saveState = "true"; //设置回滚点 Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); String materialOutboundId = ""; String oddNumber; if (object.get("materialOutboundId") != null) { materialOutboundId = object.get("materialOutboundId").toString(); } Log log = new Log(); log.setOperatorId(object.get("userId").toString()); log.setOperator(object.get("userName").toString()); log.setContent(object.toString()); try { MaterialOutbound materialOutbound = JSONObject.parseObject(JSONObject.toJSONString(object.get("title")), MaterialOutbound.class); List materialOutboundDetailList = JSONArray.parseArray(JSONObject.toJSONString(object.get("materialOutboundDetail")), MaterialOutboundDetail.class); //查询出库单是否存在 Integer MaterialOutboundConut = materialInventoryMapper.getMaterialOutboundCount(materialOutboundId); if (MaterialOutboundConut != 0) { List materialOutboundDetailLists = materialInventoryMapper.getIsNotMaterialOutboundDetail(materialOutboundId); if (!materialOutboundDetailLists.isEmpty()) { for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailLists) { //还原物料库存数 materialInventoryMapper.updateMaterialInventoryAvailableInt(materialOutboundDetail.getInventoryId(), materialOutboundDetail.getOutboundQuantity()); if(materialOutboundDetail.getUseId()!=null){ //还原优化工程库存数 materialInventoryMapper.updateMaterialInventoryAvailableOptInt(materialOutboundDetail.getUseId(), materialOutboundDetail.getOutboundQuantity()); }/*else{ //还原物料库存数 materialInventoryMapper.updateMaterialInventoryAvailableInt(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity()); }*/ } } //删除材料出库明细的数据 materialInventoryMapper.deleteMaterialOutboundDetail(materialOutboundId); materialInventoryMapper.updateMaterialOutbound(materialOutbound, materialOutboundId); oddNumber = materialOutboundId; log.setFunction("saveMaterialOutbound修改:"+oddNumber); } else { //获取单号 oddNumber = orderNumberSetting("出库"); //新增材料出库表数据 materialInventoryMapper.insertMaterialOutbound(materialOutbound, oddNumber); log.setFunction("saveMaterialOutbound新增:"+oddNumber); } //获取对象集合循环进行新增修改 if (!materialOutboundDetailList.isEmpty()) { for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailList) { MaterialInventory materialInventory = materialInventoryMapper.getMaterialInventoryById(materialOutboundDetail.getId()); if(materialInventory.getAvailableQuantity()>=materialOutboundDetail.getOutboundQuantity()){ Integer materialOutboundDetailMaximum = materialInventoryMapper.getMaterialOutboundDetailMaximum(oddNumber); //新增材料出库明细数据 materialInventoryMapper.insertMaterialOutboundDetail(materialOutboundDetail, oddNumber, materialOutboundDetailMaximum + 1); //修改物料库存表出库数量 materialInventoryMapper.updateMaterialInventoryAvailableOut(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity()); if(materialOutboundDetail.getUseId()!=null){ //修改优化工程表出库数量 materialInventoryMapper.updateMaterialInventoryAvailableOptOut(materialOutboundDetail.getUseId(), materialOutboundDetail.getOutboundQuantity()); }/*else{ //修改物料库存表出库数量 materialInventoryMapper.updateMaterialInventoryAvailableOut(materialOutboundDetail.getId(), materialOutboundDetail.getOutboundQuantity()); }*/ String json=""; MaterialStore materialStore=materialStoreMapper.getSelectMaterialStoreById(Long.valueOf(materialOutboundDetail.getMaterialCode())); json=materialStore.getJson().substring(1, materialStore.getJson().length() - 1); MaterialLog materialLog=new MaterialLog(); materialLog.setOperationOrderNumber(oddNumber); materialLog.setOperationNumber(materialOutboundDetailMaximum + 1); materialLog.setOperateType("物料出库"); materialLog.setMaterialCode(Long.valueOf(materialOutboundDetail.getMaterialCode())); materialLog.setMaterialName(convertString(json,"\"name\"")); materialLog.setProducer(materialInventory.getProducer()); materialLog.setUnit(convertString(json,"\"unit\"")); materialLog.setWidth(convertDouble(json,"\"width\"")); materialLog.setHeight(convertDouble(json,"\"height\"")); materialLog.setThickness(convertDouble(json,"\"thickness\"")); materialLog.setQuantity(materialOutboundDetail.getOutboundQuantity()); materialLog.setSinglePieceArea(materialOutboundDetail.getSinglePieceArea()); materialLog.setInventoryId(materialOutboundDetail.getId()); materialLog.setInventoryArea(materialInventory.getInventoryArea()); materialLog.setRemarks(materialOutboundDetail.getRemarks()); materialLog.setOperator(object.get("userName").toString()); materialLog.setOperateTime(LocalDate.now()); materialLogMapper.insert(materialLog); }else{ TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); return "false1"; } } } logService.saveLog(log); } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e+Arrays.toString(e.getStackTrace())); sysError.setFunc("saveMaterialOutbound"); sysErrorService.insert(sysError); saveState = "false1"; } return saveState; } public String saveMaterialInventory(Map object) { String saveState = "true"; //设置回滚点 Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { Double singlePieceArea = 0.0; Double totalArea = 0.0; Long materialCode = 0L; if (object.get("singlePieceArea") != null) { singlePieceArea = Double.valueOf(object.get("singlePieceArea").toString()); } if (object.get("totalArea") != null) { totalArea = Double.valueOf(object.get("totalArea").toString()); } if (object.get("materialCode") != null) { materialCode = Long.valueOf(object.get("materialCode").toString()); } Log log = new Log(); log.setOperatorId(object.get("userId").toString()); log.setOperator(object.get("userName").toString()); log.setContent(object.toString()); MaterialInventory materialInventory = JSONObject.parseObject(JSONObject.toJSONString(object.get("title")), MaterialInventory.class); //查询物料是否存在 Integer MaterialInventoryCount=0; if (materialInventory.getDateOfManufacture()!=null){ MaterialInventoryCount = materialInventoryMapper.getMaterialInventoryCount(materialCode,materialInventory.getDateOfManufacture()); }else{ MaterialInventoryCount = materialInventoryMapper.getMaterialInventoryCountNull(materialCode); } if(MaterialInventoryCount==1){ if (materialInventory.getDateOfManufacture()!=null){ materialInventoryMapper.updateMaterialInventory(materialCode,singlePieceArea,totalArea,materialInventory); }else{ materialInventoryMapper.updateMaterialInventoryNull(materialCode,singlePieceArea,totalArea,materialInventory); } log.setFunction("saveMaterialInventory修改"); }else if(MaterialInventoryCount==0) { materialInventoryMapper.insertMaterialInventory(materialCode,singlePieceArea,totalArea,materialInventory); log.setFunction("saveMaterialInventory新增"); }else { return "false1"; } String json=""; MaterialStore materialStore=materialStoreMapper.getSelectMaterialStoreById(materialCode); json=materialStore.getJson().substring(1, materialStore.getJson().length() - 1); MaterialLog materialLog=new MaterialLog(); materialLog.setOperateType("物料新增"); materialLog.setMaterialCode(materialCode); materialLog.setMaterialName(convertString(json,"\"name\"")); materialLog.setProducer(materialInventory.getProducer()); materialLog.setUnit(convertString(json,"\"unit\"")); materialLog.setWidth(convertDouble(json,"\"width\"")); materialLog.setHeight(convertDouble(json,"\"height\"")); materialLog.setThickness(convertDouble(json,"\"thickness\"")); materialLog.setQuantity(materialInventory.getInventoryQuantity()); materialLog.setSinglePieceArea(singlePieceArea); materialLog.setInventoryId(materialInventory.getId()); materialLog.setInventoryArea(materialInventory.getInventoryArea()); materialLog.setRemarks(materialInventory.getRemarks()); materialLog.setOperator(object.get("userName").toString()); materialLog.setOperateTime(LocalDate.now()); materialLogMapper.insert(materialLog); logService.saveLog(log); } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e+Arrays.toString(e.getStackTrace())); sysError.setFunc("saveMaterialInventory"); sysErrorService.insert(sysError); saveState = "false"; } return saveState; } public Map getSelectMaterialInventoryDate(Integer pageNum, Integer pageSize, List selectDate, MaterialInventory materialInventory) { 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", materialInventoryMapper.getSelectMaterialInventoryDate(offset, pageSize,startDate, endDate, materialInventory)); map.put("total", materialInventoryMapper.getSelectMaterialInventoryDatePageTotal(offset, pageSize,startDate, endDate, materialInventory)); List list = new ArrayList<>(); list.add(startDate); list.add(endDate); map.put("selectDate",list); return map; } public Map getSelectMaterialInventoryEngineeringDate(Integer pageNum, Integer pageSize, List selectDate, MaterialInventory materialInventory) { 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", materialInventoryMapper.getSelectMaterialInventoryEngineeringDate(offset, pageSize,startDate, endDate, materialInventory)); map.put("total", materialInventoryMapper.getSelectMaterialInventoryEngineeringDatePageTotal(offset, pageSize,startDate, endDate, materialInventory)); List list = new ArrayList<>(); list.add(startDate); list.add(endDate); map.put("selectDate",list); return map; } public Map getSelectMaterialInventory(Integer pageNum, Integer pageSize, MaterialInventory materialInventory) { Integer offset = (pageNum - 1) * pageSize; Map map = new HashMap<>(); List ids=new ArrayList<>();; if(materialInventory.getStockId()!=null && !materialInventory.getStockId().isEmpty()){ List result = StrUtil.split(materialInventory.getStockId(), '|'); ids=result.stream().map(Long::valueOf).collect(Collectors.toList()); } map.put("data", materialInventoryMapper.getSelectMaterialInventory(offset, pageSize, materialInventory,ids)); map.put("total", materialInventoryMapper.getSelectMaterialInventoryPageTotal(offset, pageSize, materialInventory,ids)); return map; } public Map getSelectMaterialInventoryEngineering(Integer pageNum, Integer pageSize, OptimizeUse optimizeUse) { Integer offset = (pageNum - 1) * pageSize; Map map = new HashMap<>(); List ids=new ArrayList<>();; if(optimizeUse.getRawStockCode()!=null && !optimizeUse.getRawStockCode().isEmpty()){ List result = StrUtil.split(optimizeUse.getRawStockCode(), '|'); ids=result.stream().map(Long::valueOf).collect(Collectors.toList()); } map.put("data", materialInventoryMapper.getSelectMaterialInventoryEngineering(offset, pageSize, optimizeUse,ids)); map.put("total", materialInventoryMapper.getSelectMaterialInventoryEngineeringPageTotal(offset, pageSize, optimizeUse,ids)); return map; } public Boolean deleteMaterialOutbound(Map object) { boolean saveState = true; //设置回滚点 Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { String materialOutboundId = ""; if (object.get("materialOutboundId") != null) { materialOutboundId = object.get("materialOutboundId").toString(); } if(materialOutboundId!=null){ List materialOutboundDetailLists = materialInventoryMapper.getIsNotMaterialOutboundDetail(materialOutboundId); if (!materialOutboundDetailLists.isEmpty()) { for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailLists) { //还原物料库存数 materialInventoryMapper.updateMaterialInventoryAvailableInt(materialOutboundDetail.getInventoryId(), materialOutboundDetail.getOutboundQuantity()); } } materialInventoryMapper.deleteMaterialOutboundDetail(materialOutboundId); materialInventoryMapper.deleteMaterialOutbound(materialOutboundId); materialInventoryMapper.deleteMaterialLog(materialOutboundId); } Log log = new Log(); log.setContent(object.toString()); log.setOperatorId(object.get("userId").toString()); log.setOperator(object.get("userName").toString()); log.setFunction("deleteMaterialOutbound删除:"+materialOutboundId); logService.saveLog(log); } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e+Arrays.toString(e.getStackTrace())); sysError.setFunc("deleteMaterialOutbound"); sysErrorService.insert(sysError); saveState = false; } return saveState; } public Boolean deleteReturnToStorage(Map object) { boolean saveState = true; //设置回滚点 Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { String returningId = ""; if (object.get("returningId") != null) { returningId = object.get("returningId").toString(); } if(returningId!=null){ List returningWarehouseDetailLists = materialInventoryMapper.getIsNotReturningWarehouseDetail(returningId); if (!returningWarehouseDetailLists.isEmpty()) { for (ReturningWarehouseDetail returningWarehouseDetail : returningWarehouseDetailLists) { //还原物料库存数 materialInventoryMapper.updateMaterialInventoryAvailableOut(returningWarehouseDetail.getInventoryId(), returningWarehouseDetail.getReturnQuantity()); } } materialInventoryMapper.deleteReturningWarehouseDetail(returningId); materialInventoryMapper.deleteReturningWarehouse(returningId); materialInventoryMapper.deleteMaterialLog(returningId); } Log log = new Log(); log.setContent(object.toString()); log.setOperatorId(object.get("userId").toString()); log.setOperator(object.get("userName").toString()); log.setFunction("deleteReturnToStorage:"+returningId); logService.saveLog(log); } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e+Arrays.toString(e.getStackTrace())); sysError.setFunc("deleteMaterialOutbound"); sysErrorService.insert(sysError); saveState = false; } return saveState; } public Map getSelectMaterialOutboundDate(Integer pageNum, Integer pageSize, List selectDate, MaterialOutbound materialOutbound) { 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", materialInventoryMapper.getSelectMaterialOutboundDate(offset, pageSize,startDate, endDate, materialOutbound)); map.put("total", materialInventoryMapper.getSelectMaterialOutboundDatePageTotal(offset, pageSize,startDate, endDate, materialOutbound)); List list = new ArrayList<>(); list.add(startDate); list.add(endDate); map.put("selectDate",list); return map; } public Map getSelectMaterialOutbound(Integer pageNum, Integer pageSize, MaterialOutboundDetail materialOutboundDetail) { Integer offset = (pageNum - 1) * pageSize; Map map = new HashMap<>(); List materialOutboundDetailList= materialInventoryMapper.SelectMaterialOutboundDetail(offset, pageSize, materialOutboundDetail); if(materialOutboundDetailList.get(0).getUseId()==null){ map.put("materialOutbound", materialInventoryMapper.getSelectMaterialOutbound(offset, pageSize, materialOutboundDetail)); map.put("data", materialInventoryMapper.getSelectMaterialOutboundDetail(offset, pageSize, materialOutboundDetail)); map.put("total", materialInventoryMapper.getSelectMaterialOutboundDetailPageTotal(offset, pageSize, materialOutboundDetail)); }else{ map.put("materialOutbound", materialInventoryMapper.getSelectMaterialOutbound(offset, pageSize, materialOutboundDetail)); map.put("data", materialInventoryMapper.getSelectMaterialOutboundEngineering(offset, pageSize, materialOutboundDetail)); map.put("total", materialInventoryMapper.getSelectMaterialOutboundDetailPageTotal(offset, pageSize, materialOutboundDetail)); } return map; } public Boolean updateMaterialOutboundToExamine(Map object) { boolean saveState = true; //设置回滚点 Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { String materialOutboundId = ""; String reviewed = ""; int type =0; if (object.get("materialOutboundId") != null) { materialOutboundId = object.get("materialOutboundId").toString(); } if (object.get("type") != null) { type = Integer.parseInt(object.get("type").toString()); } if (object.get("reviewed") != null) { reviewed = object.get("reviewed").toString(); } Log log = new Log(); log.setOperator(reviewed); log.setContent(object.toString()); log.setFunction("updateMaterialOutboundToExamine:"+type); logService.saveLog(log); if (type==1){ List materialOutboundDetailList = materialInventoryMapper.getIsNotMaterialOutboundDetail(materialOutboundId); if (!materialOutboundDetailList.isEmpty()) { for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailList) { //修改物料库存数量 materialInventoryMapper.updateMaterialInventoryInventoryOut(materialOutboundDetail.getInventoryId(), materialOutboundDetail.getOutboundQuantity()); } } materialInventoryMapper.updateMaterialOutboundToExamine(materialOutboundId,type,reviewed); }else{ List materialOutboundDetailList = materialInventoryMapper.getIsNotMaterialOutboundDetail(materialOutboundId); if (!materialOutboundDetailList.isEmpty()) { for (MaterialOutboundDetail materialOutboundDetail : materialOutboundDetailList) { //修改物料库存数量 materialInventoryMapper.updateMaterialInventoryInventoryInt(materialOutboundDetail.getInventoryId(), materialOutboundDetail.getOutboundQuantity()); } } materialInventoryMapper.updateMaterialOutboundCounterExamination(materialOutboundId,type,reviewed); } } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e+Arrays.toString(e.getStackTrace())); sysError.setFunc("updateMaterialOutboundToExamine"); sysErrorService.insert(sysError); saveState = false; } return saveState; } public Boolean saveReturningWarehouse(Map object) { boolean saveState = true; //设置回滚点 Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { String returningId = ""; String oddNumber; if (object.get("returningId") != null) { returningId = object.get("returningId").toString(); } Log log = new Log(); log.setOperatorId(object.get("userId").toString()); log.setOperator(object.get("userName").toString()); log.setContent(object.toString()); ReturningWarehouse returningWarehouse = JSONObject.parseObject(JSONObject.toJSONString(object.get("title")), ReturningWarehouse.class); List returningWarehouseDetailList = JSONArray.parseArray(JSONObject.toJSONString(object.get("returningWarehouseDetail")), ReturningWarehouseDetail.class); //查询出库单是否存在 Integer ReturningWarehouseConut = materialInventoryMapper.getReturningWarehouseCount(returningId); if (ReturningWarehouseConut != 0) { List returningWarehouseDetailLists = materialInventoryMapper.getIsNotReturningWarehouseDetail(returningId); if (!returningWarehouseDetailLists.isEmpty()) { for (ReturningWarehouseDetail returningWarehouseDetail : returningWarehouseDetailLists) { //还原物料库存数 materialInventoryMapper.updateMaterialInventoryAvailableOut(returningWarehouseDetail.getInventoryId(), returningWarehouseDetail.getReturnQuantity()); } } //删除材料出库明细的数据 materialInventoryMapper.deleteReturningWarehouseDetail(returningId); oddNumber = returningId; log.setFunction("saveReturningWarehouse修改:"+oddNumber); } else { //获取单号 oddNumber = orderNumberSetting("返库"); //新增材料出库表数据 materialInventoryMapper.insertReturningWarehouse(returningWarehouse, oddNumber); log.setFunction("saveReturningWarehouse新增:"+oddNumber); } //获取对象集合循环进行新增修改 if (!returningWarehouseDetailList.isEmpty()) { for (ReturningWarehouseDetail returningWarehouseDetail : returningWarehouseDetailList) { Integer returningWarehouseDetailMaximum = materialInventoryMapper.getReturningWarehouseDetailMaximum(oddNumber); //新增材料出库明细数据 materialInventoryMapper.insertReturningWarehouseDetail(returningWarehouseDetail, oddNumber, returningWarehouseDetailMaximum + 1); double singlePieceArea=0.0; double totalArea=0.0; String json=""; MaterialStore materialStore=materialStoreMapper.getSelectMaterialStoreById(returningWarehouseDetail.getId()); json=materialStore.getJson().substring(1, materialStore.getJson().length() - 1); double width= convertDouble(json,"\"width\""); double height= convertDouble(json,"\"height\""); DecimalFormat decimalFormat = new DecimalFormat("#0.00"); singlePieceArea= Double.parseDouble(decimalFormat.format(width * height / 100000)); totalArea= Double.parseDouble(decimalFormat.format(singlePieceArea * returningWarehouseDetail.getReturnQuantity())); //查询物料是否存在 Integer MaterialInventoryCount=0; if (returningWarehouseDetail.getDateOfManufacture()!=null){ MaterialInventoryCount = materialInventoryMapper.getMaterialInventoryCount(returningWarehouseDetail.getId(),returningWarehouseDetail.getDateOfManufacture()); }else{ MaterialInventoryCount = materialInventoryMapper.getMaterialInventoryCountNull(returningWarehouseDetail.getId()); } if(MaterialInventoryCount>0){ if (returningWarehouseDetail.getDateOfManufacture()!=null){ materialInventoryMapper.updateMaterialInventoryReturning(returningWarehouseDetail.getId(),singlePieceArea,totalArea,returningWarehouseDetail); }else{ materialInventoryMapper.updateMaterialInventoryReturningNull(returningWarehouseDetail.getId(),singlePieceArea,totalArea,returningWarehouseDetail); } }else { materialInventoryMapper.insertMaterialInventoryReturning(returningWarehouseDetail.getId(),singlePieceArea,totalArea,returningWarehouseDetail); } //获取库存编号添加到返库明细表 List MaterialInventoryId; if (returningWarehouseDetail.getDateOfManufacture()!=null){ MaterialInventoryId = materialInventoryMapper.getMaterialInventoryCountId(returningWarehouseDetail.getId(),returningWarehouseDetail.getDateOfManufacture()); }else{ MaterialInventoryId = materialInventoryMapper.getMaterialInventoryCountNullId(returningWarehouseDetail.getId()); } materialInventoryMapper.updateReturningWarehouseDetail(oddNumber, returningWarehouseDetailMaximum + 1,MaterialInventoryId.get(0).getId()); MaterialLog materialLog=new MaterialLog(); materialLog.setOperationOrderNumber(oddNumber); materialLog.setOperationNumber(returningWarehouseDetailMaximum + 1); materialLog.setOperateType("物料返库"); materialLog.setMaterialCode(returningWarehouseDetail.getId()); materialLog.setMaterialName(convertString(json,"\"name\"")); materialLog.setProducer(returningWarehouseDetail.getProducer()); materialLog.setUnit(convertString(json,"\"unit\"")); materialLog.setWidth(convertDouble(json,"\"width\"")); materialLog.setHeight(convertDouble(json,"\"height\"")); materialLog.setThickness(convertDouble(json,"\"thickness\"")); materialLog.setQuantity(returningWarehouseDetail.getReturnQuantity()); materialLog.setSinglePieceArea(singlePieceArea); materialLog.setInventoryArea(returningWarehouseDetail.getInventoryArea()); materialLog.setRemarks(returningWarehouseDetail.getRemarks()); materialLog.setOperator(object.get("userName").toString()); materialLog.setOperateTime(LocalDate.now()); materialLogMapper.insert(materialLog); } } logService.saveLog(log); } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e+Arrays.toString(e.getStackTrace())); sysError.setFunc("saveReturningWarehouse"); sysErrorService.insert(sysError); saveState = false; } return saveState; } public Map getSelectReturningWarehouse(Integer pageNum, Integer pageSize, ReturningWarehouseDetail returningWarehouseDetail) { Integer offset = (pageNum - 1) * pageSize; Map map = new HashMap<>(); map.put("returningWarehouse", materialInventoryMapper.getSelectReturningWarehouse(offset, pageSize, returningWarehouseDetail)); map.put("data", materialInventoryMapper.getSelectReturningWarehouseDetail(offset, pageSize, returningWarehouseDetail)); map.put("total", materialInventoryMapper.getSelectReturningWarehouseDetailPageTotal(offset, pageSize, returningWarehouseDetail)); return map; } public Boolean updateReturningWarehouseToExamine(Map object) { boolean saveState = true; //设置回滚点 Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { String returningId = ""; String reviewed = ""; int type =0; if (object.get("returningId") != null) { returningId = object.get("returningId").toString(); } if (object.get("type") != null) { type = Integer.parseInt(object.get("type").toString()); } if (object.get("reviewed") != null) { reviewed = object.get("reviewed").toString(); } Log log = new Log(); log.setOperator(reviewed); log.setContent(object.toString()); log.setFunction("updateReturningWarehouseToExamine:"+type); logService.saveLog(log); if (type==1){ List returningWarehouseDetailList = materialInventoryMapper.getIsNotReturningWarehouseDetail(returningId); if (!returningWarehouseDetailList.isEmpty()) { for (ReturningWarehouseDetail returningWarehouseDetail : returningWarehouseDetailList) { //修改物料库存数量 materialInventoryMapper.updateMaterialInventoryInventoryInt(returningWarehouseDetail.getInventoryId(), returningWarehouseDetail.getReturnQuantity()); } } materialInventoryMapper.updateReturningWarehouseToExamine(returningId,type,reviewed); }else{ List returningWarehouseDetailList = materialInventoryMapper.getIsNotReturningWarehouseDetail(returningId); if (!returningWarehouseDetailList.isEmpty()) { for (ReturningWarehouseDetail returningWarehouseDetail : returningWarehouseDetailList) { //修改物料库存数量 materialInventoryMapper.updateMaterialInventoryInventoryOut(returningWarehouseDetail.getInventoryId(), returningWarehouseDetail.getReturnQuantity()); } } materialInventoryMapper.updateReturningWarehouseCounterExamination(returningId,type,reviewed); } } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e+Arrays.toString(e.getStackTrace())); sysError.setFunc("updateReturningWarehouseToExamine"); sysErrorService.insert(sysError); saveState = false; } return saveState; } public Map getSelectReturningWarehouseDate(Integer pageNum, Integer pageSize, List selectDate, ReturningWarehouse returningWarehouse) { 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", materialInventoryMapper.getSelectReturningWarehouseDate(offset, pageSize,startDate, endDate, returningWarehouse)); map.put("total", materialInventoryMapper.getSelectReturningWarehouseDatePageTotal(offset, pageSize,startDate, endDate, returningWarehouse)); List list = new ArrayList<>(); list.add(startDate); list.add(endDate); map.put("selectDate",list); return map; } public Map getSelectSurplusMaterialsDate(Integer pageNum, Integer pageSize, List selectDate, SurplusMaterials surplusMaterials) { 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", materialInventoryMapper.getSelectSurplusMaterialsDate(offset, pageSize,startDate, endDate, surplusMaterials)); map.put("total", materialInventoryMapper.getSelectSurplusMaterialsDatePageTotal(offset, pageSize,startDate, endDate, surplusMaterials)); List list = new ArrayList<>(); list.add(startDate); list.add(endDate); map.put("selectDate",list); return map; } public Boolean addSelectSurplusMaterialsDate(Map object) { boolean saveState = true; //设置回滚点 Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); String creator = ""; if (object.get("creator") != null) { creator = object.get("creator").toString(); } String type = ""; if (object.get("type") != null) { type = object.get("type").toString(); } int state = 0; if (object.get("state") != null) { state = Integer.parseInt(object.get("state").toString()); } Log log = new Log(); log.setOperator(creator); log.setContent(object.toString()); log.setFunction("addSelectSurplusMaterialsDate:"+state); logService.saveLog(log); if(state==1){ SurplusMaterials surplusMaterials = JSONObject.parseObject(JSONObject.toJSONString(object.get("surplusMaterials")), SurplusMaterials.class); if(surplusMaterials!=null){ SurplusMaterials surplusMaterials1=materialInventoryMapper.selectSurplusMaterialsCount(surplusMaterials); if(surplusMaterials1!=null){ materialInventoryMapper.updateSurplusMaterialsIntQuantity(surplusMaterials1); materialInventoryMapper.insertSurplusMaterialsLog(surplusMaterials1,creator,type); }else{ materialInventoryMapper.insertSurplusMaterials(surplusMaterials); materialInventoryMapper.insertSurplusMaterialsLog(surplusMaterials,creator,type); } } } else if (state==2) { List surplusMaterialsList = JSONArray.parseArray(JSONObject.toJSONString(object.get("surplusMaterials")), SurplusMaterials.class); if(!surplusMaterialsList.isEmpty()){ for(SurplusMaterials surplusMaterials:surplusMaterialsList){ materialInventoryMapper.updateSurplusMaterialsOutQuantity(surplusMaterials); materialInventoryMapper.insertSurplusMaterialsLog(surplusMaterials,creator,type); } } } return saveState; } public Map printCreateOutbound(String materialOutboundId) { Map map = new HashMap<>(); map.put("createOutbound", materialInventoryMapper.getPrintCreateOutbound(materialOutboundId)); map.put("createOutboundDetail", materialInventoryMapper.getPrintCreateOutboundDetail(materialOutboundId)); return map; } public Map getMaterialLogReport(String type,Integer pageNum, Integer pageSize, List selectDate, MaterialLog materialLog) { 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", materialInventoryMapper.getMaterialLogReport(offset, pageSize,startDate, endDate, materialLog,type)); map.put("total", materialInventoryMapper.getMaterialLogReportTotal(offset, pageSize,startDate, endDate, materialLog,type)); List list = new ArrayList<>(); list.add(startDate); list.add(endDate); map.put("selectDate",list); return map; } public List exportMaterialLogReport(List dates, String type) { return materialInventoryMapper.exportMaterialLogReport(dates,type); } public Boolean deleteMaterialInventory(Map object) { String creator = ""; if (object.get("creator") != null) { creator = object.get("creator").toString(); } String ids = ""; if (object.get("ids") != null) { ids = object.get("ids").toString(); } List id=new ArrayList<>(); if(!ids.isEmpty()){ List result = StrUtil.split(ids, '|'); id=result.stream().map(Long::valueOf).collect(Collectors.toList()); } materialInventoryMapper.deleteMaterialInventory(id); Log log = new Log(); log.setOperator(creator); log.setContent(object.toString()); log.setFunction("deleteMaterialInventory:"+ids); logService.saveLog(log); return true; } public String orderNumberSetting(String type) { //根据类型自动生成不同的操作单号 String alias=""; Integer maximum=0; if(Objects.equals(type, "出库")){ alias="CK"; maximum=materialInventoryMapper.getMaximum(type); } if(Objects.equals(type, "返库")){ alias="FK"; maximum=materialInventoryMapper.getMaximums(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 String convertString(String json,String string) { Map map = new HashMap<>(); String[] keyValues = json.split(","); for (String keyValue : keyValues) { String[] pair = keyValue.split(":"); if (pair.length == 2) { map.put(pair[0], pair[1]); } } return map.get(string).toString().replace("\"",""); } public Double convertDouble(String json,String string) { Map map = new HashMap<>(); String[] keyValues = json.split(","); for (String keyValue : keyValues) { String[] pair = keyValue.split(":"); if (pair.length == 2) { map.put(pair[0], pair[1]); } } Double number=0.0; if(map.get(string)!=null){ String[] widthStrings = map.get(string).toString().split("\\D+"); for (String numberString : widthStrings) { if (!numberString.isEmpty()) { number= Double.parseDouble(numberString); } } } return number; } @Transactional(rollbackFor = Exception.class) public boolean mesMaterialOutbound(Map reportingWorkMap) { boolean saveState=true; Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint(); try { //接收解析主附表信息 JSONObject reportingWorkJson = new JSONObject(reportingWorkMap); String projectNo=reportingWorkJson.get("projectNo").toString(); Double width= Double.valueOf(reportingWorkJson.get("width").toString()); Double height= Double.valueOf(reportingWorkJson.get("height").toString()); Integer quantity= Integer.valueOf(reportingWorkJson.get("quantity").toString()); List materialOutboundList=materialInventoryMapper.getSelectMaterialOutboundProjectNo(projectNo); OptimizeUse optimizeUses=materialInventoryMapper.getSelectOptimizeUses(projectNo,width,height); MaterialInventory materialInventory=materialInventoryMapper.getMaterialInventoryById(Long.valueOf(optimizeUses.getRawStockCode())); if(materialOutboundList.size()==1){ List materialOutboundDetailList=materialInventoryMapper.getSelectMaterialOutboundOptimizeUses(materialOutboundList.get(0).getMaterialOutboundId(),optimizeUses.getId()); List materialOutboundDetailList1=materialInventoryMapper.getSelectMaterialOutboundOptimizeUses(materialOutboundList.get(0).getMaterialOutboundId(),null); if(materialOutboundDetailList.size()==1){ materialInventoryMapper.updateMaterialOutboundOptimizeUses(optimizeUses.getId(),quantity); }else{ materialInventoryMapper.insertMaterialOutboundDetailOptimizeUses(materialOutboundList.get(0).getMaterialOutboundId(), materialOutboundDetailList1.size()+1,Long.valueOf(optimizeUses.getRawStockCode()),materialInventory.getMaterialCode(),materialInventory.getInventoryArea(), optimizeUses.getId(),quantity,materialInventory.getSinglePieceArea(),materialInventory.getDateOfManufacture()); } }else if(materialOutboundList.isEmpty()){ String oddNumber = orderNumberSetting("出库"); materialInventoryMapper.insertMaterialOutboundOptimizeUses(oddNumber,projectNo,reportingWorkJson.get("userName").toString()); materialInventoryMapper.insertMaterialOutboundDetailOptimizeUses(oddNumber, 1,Long.valueOf(optimizeUses.getRawStockCode()),materialInventory.getMaterialCode(),materialInventory.getInventoryArea(), optimizeUses.getId(),quantity,materialInventory.getSinglePieceArea(),materialInventory.getDateOfManufacture()); }else{ return false; } materialInventoryMapper.updateMaterialInventoryAvailableInventoryOutMes(Long.valueOf(optimizeUses.getRawStockCode()),quantity); materialInventoryMapper.updateOptimizeUsesMes(optimizeUses.getId(),quantity); //保存日志 Log log = new Log(); log.setContent(reportingWorkMap.toString()); log.setFunction("mesMaterialOutbound报工新增"); log.setOperatorId((String) reportingWorkJson.get("userId")); log.setOperator((String) reportingWorkJson.get("userName")); logService.saveLog(log); } catch (Exception e) { TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint); //将异常传入数据库 SysError sysError = new SysError(); sysError.setError(e+Arrays.toString(e.getStackTrace())); sysError.setFunc("mesMaterialOutbound报工新增"); sysErrorService.insert(sysError); saveState = false; } return saveState; } }