From 47a751cb301d05276ae5d75145d57b2d090fe4e1 Mon Sep 17 00:00:00 2001 From: kongzy <kongzy> Date: 星期一, 01 七月 2024 10:58:35 +0800 Subject: [PATCH] change --- src/main/java/com/nanometer/smartlab/service/OpeOrderServiceImpl.java | 369 ++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 252 insertions(+), 117 deletions(-) diff --git a/src/main/java/com/nanometer/smartlab/service/OpeOrderServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeOrderServiceImpl.java index 9f6172b..f39cf6e 100644 --- a/src/main/java/com/nanometer/smartlab/service/OpeOrderServiceImpl.java +++ b/src/main/java/com/nanometer/smartlab/service/OpeOrderServiceImpl.java @@ -1,8 +1,6 @@ package com.nanometer.smartlab.service; -import com.nanometer.smartlab.dao.BaseMetaDao; -import com.nanometer.smartlab.dao.EmailStatusDao; -import com.nanometer.smartlab.dao.OpeOrderDao; +import com.nanometer.smartlab.dao.*; import com.nanometer.smartlab.entity.*; import com.nanometer.smartlab.entity.enumtype.ApplyStatus; import com.nanometer.smartlab.entity.enumtype.ArrivalStatus; @@ -13,10 +11,11 @@ import com.nanometer.smartlab.exception.AlarmException; import com.nanometer.smartlab.exception.BusinessException; import com.nanometer.smartlab.exception.ExceptionEnumCode; -import com.nanometer.smartlab.util.IDUtils; import com.nanometer.smartlab.util.MessageUtil; +import com.nanometer.smartlab.util.StringToolUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; +import org.springframework.beans.BeanUtils; import org.springframework.context.annotation.Lazy; import org.springframework.dao.DataAccessException; import org.springframework.dao.DataIntegrityViolationException; @@ -33,6 +32,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * Created by johnny on 17/12/14. @@ -64,6 +64,14 @@ @Resource(name="baseMetaDao") BaseMetaDao baseMetaDao; + + @Resource + DangerousEncodeMapper dangerousEncodeMapper; + + @Resource + OpeReagentCodeDao opeReagentCodeDao; + @Resource + OpeApplyDao opeApplyDao; @Transactional(propagation = Propagation.REQUIRED) public List<OpeOrder> getOpeOrderList(String orderCode, String orderName, Timestamp startTime, Timestamp endTime, Integer status, String orderUserName, @@ -115,7 +123,7 @@ } @Transactional(propagation = Propagation.REQUIRED) - public OpeOrder getOpeOrder(String id) { + public OpeOrder getOpeOrder(Long id) { try { return this.opeOrderDao.getOpeOrder(id); } catch (DataAccessException e) { @@ -127,7 +135,6 @@ @Transactional(propagation = Propagation.REQUIRED) public OpeOrder insertOpeOrder(OpeOrder opeOrder) { try { - opeOrder.setId(IDUtils.uuid()); this.opeOrderDao.insertOpeOrder(opeOrder); return opeOrder; } catch (DuplicateKeyException ex) { @@ -167,7 +174,7 @@ return false; } - List<String> ids = new ArrayList<String>(); + List<Long> ids = new ArrayList<Long>(); for (OpeOrder opeOrder : opeOrderList) { ids.add(opeOrder.getId()); @@ -187,31 +194,136 @@ } @Transactional(propagation = Propagation.REQUIRED) - public void createOpeOrder(OpeOrder opeOrder, List<OpeApply> opeApplyList, SysUser orderUser) { + public void createOpeOrder(OpeOrder opeOrder, List<OpeApply> opeApplyList, SysUser orderUser) { if (opeOrder == null || opeApplyList == null || orderUser == null) { return; } - opeOrder.setOrderCode(this.sysSequenceService.getOrderCode()); opeOrder.setStatus(ApplyStatus.PENDING_PURCHASE); opeOrder.setConsigneeUserId(null); opeOrder.setOrderUserId(orderUser.getId()); opeOrder.setArrivalTime(null); - opeOrder.setSupplyId(opeApplyList.get(0).getReagent().getSupplierId()); - opeOrder.setSupplyName(opeApplyList.get(0).getReagent().getSupplierName()); + opeOrder.setSupplierId(opeApplyList.get(0).getReagent().getSupplierId()); + opeOrder.setSupplierName(opeApplyList.get(0).getReagent().getSupplierName()); this.insertOpeOrder(opeOrder); - - OpeApplyOrder opeApplyOrder = null; - for (OpeApply opeApply : opeApplyList) { - opeApply.setStatus(ApplyStatus.PENDING_PURCHASE); - this.opeApplyService.updateOpeApply(opeApply); - - opeApplyOrder = new OpeApplyOrder(); + List<OpeApplyOrder> opeApplyOrderList = opeApplyList.stream().map(item -> { + OpeApplyOrder opeApplyOrder = new OpeApplyOrder(); opeApplyOrder.setOpeOrderId(opeOrder.getId()); - opeApplyOrder.setOpeApplyId(opeApply.getId()); - this.opeApplyOrderService.insertOpeApplyOrder(opeApplyOrder); + opeApplyOrder.setOpeApplyId(item.getId()); + return opeApplyOrder; + }).collect(Collectors.toList()); + this.opeApplyOrderService.batchInsertOpeApplyOrder(opeApplyOrderList); + this.opeApplyService.updateOpeApplyStatus(ApplyStatus.PENDING_PURCHASE,null,opeApplyList.stream().map(OpeApply::getId).collect(Collectors.toList())); + synchronized(this) { + generateReagentCode(opeOrder.getId(), opeApplyList); + } + } + +// public void generateReagentCode(Long orderId,List<OpeApply> opeApplyList){ +// List<OpeReagentCode> opeReagentCodeList=new ArrayList<>(); +// for(OpeApply opeApply:opeApplyList) { +// String applyCode=opeApply.getApplyCode(); +// String name = opeApply.getReagent().getName(); +// if (StringUtils.isBlank(name)) { +// throw new BusinessException(ExceptionEnumCode.SYS_ERR, "试剂名称为空"); +// } +// DangerousEncode dangerousEncode = this.dangerousEncodeMapper.selectByName(name); +// if (dangerousEncode == null) { +// throw new BusinessException(ExceptionEnumCode.SYS_ERR, "未录入危化品编码"); +// } +// String containerNumber = dangerousEncode.getContainerNumber(); +// if(StringUtils.isBlank(containerNumber)||containerNumber.length()!=2){ +// throw new BusinessException(ExceptionEnumCode.SYS_ERR, String.format("试剂<%s>柜码不存在或者编码位数不是两位",name)); +// } +// String factoryfactory = "0"; +// String specifications = "0"; +// String reagentCode = dangerousEncode.getReagentCode(); +// if (StringUtils.isBlank(reagentCode)) { +// throw new BusinessException(ExceptionEnumCode.SYS_ERR, String.format("试剂<%s>试剂名称码不存在",name)); +// } +// if(reagentCode.length()<4){ +// reagentCode= StringToolUtils.addZeroForNum(reagentCode,4); +// }else{ +// reagentCode = reagentCode.substring(reagentCode.length() - 4, reagentCode.length()); +// } +// String feature = dangerousEncode.getFeature(); +// if (StringUtils.isBlank(feature)||feature.length()!=4) { +// throw new BusinessException(ExceptionEnumCode.SYS_ERR, String.format("试剂<%s>特性不存在或者编码位数不是四位",name)); +// } +// +// String avoid = dangerousEncode.getAvoid(); +// if (StringUtils.isBlank(avoid)||avoid.length()!=2) { +// throw new BusinessException(ExceptionEnumCode.SYS_ERR, String.format("试剂<%s>相忌不存在或者编码位数不是两位",name)); +// } +// String status = dangerousEncode.getStatus(); +// if (StringUtils.isBlank(status)||status.length()!=2) { +// throw new BusinessException(ExceptionEnumCode.SYS_ERR, String.format("试剂<%s>状态不存在或者编码位数不是两位",name)); +// } +// String fire = dangerousEncode.getFire(); +// if (StringUtils.isBlank(fire)||fire.length()!=2) { +// throw new BusinessException(ExceptionEnumCode.SYS_ERR, String.format("试剂<%s>灭火器不存在或者编码位数不是两位",name)); +// } +// String packing = "0"; +// StringBuilder prefixBuilder=new StringBuilder().append(containerNumber) +// .append(factoryfactory) +// .append(specifications) +// .append(reagentCode) +// .append(feature) +// .append(avoid) +// .append(status) +// .append(fire) +// .append(packing); +// String codePrex=prefixBuilder.toString(); +// OpeReagentCode opeReagentCode=this.opeReagentCodeDao.getMaxReagentCode(codePrex); +// Integer startCode=0; +// Integer endCode=startCode+opeApply.getNum()-1; +// if(opeReagentCode!=null){ +// startCode=opeReagentCode.getEndCode()+1; +// endCode=startCode+opeApply.getNum()-1; +// } +// opeReagentCode=new OpeReagentCode(); +// opeReagentCode.setOrderId(orderId); +// opeReagentCode.setApplyId(opeApply.getId()); +// opeReagentCode.setStartCode(startCode); +// opeReagentCode.setEndCode(endCode); +// opeReagentCode.setCodePrex(codePrex); +// opeReagentCodeList.add(opeReagentCode); +// } +// if(opeReagentCodeList.size()>0){ +// this.opeReagentCodeDao.batchInsertReagentCode(opeReagentCodeList); +// } +// } + + public void generateReagentCode(Long orderId,List<OpeApply> opeApplyList){ + List<OpeReagentCode> opeReagentCodeList=new ArrayList<>(); + for(OpeApply opeApply:opeApplyList) { + String applyCode=opeApply.getApplyCode(); + applyCode=applyCode.replace("SG",""); + if (opeApply.getNum()>9999 &opeApply.getNum()<=0) { + throw new BusinessException(ExceptionEnumCode.SYS_ERR, "试剂申请数量不能超过9999"); + } + StringBuilder prefixBuilder=new StringBuilder().append("SJ") + .append(applyCode); + String codePrex=prefixBuilder.toString(); + OpeReagentCode opeReagentCode=this.opeReagentCodeDao.getMaxReagentCode(codePrex); + Integer startCode=0; + Integer endCode=startCode+opeApply.getNum()-1; + if(opeReagentCode!=null){ + startCode=opeReagentCode.getEndCode()+1; + endCode=startCode+opeApply.getNum()-1; + } + opeReagentCode=new OpeReagentCode(); + opeReagentCode.setOrderId(orderId); + opeReagentCode.setApplyId(opeApply.getId()); + opeReagentCode.setStartCode(startCode); + opeReagentCode.setEndCode(endCode); + opeReagentCode.setCodePrex(codePrex); + opeReagentCodeList.add(opeReagentCode); + } + if(opeReagentCodeList.size()>0){ + this.opeReagentCodeDao.batchInsertReagentCode(opeReagentCodeList); } } @@ -222,107 +334,131 @@ return; } - Integer applyNum = null; - Integer arrivalNum = null; ApplyStatus flag = ApplyStatus.STORAGE; - // 更新订单所对应的申购状态为已入库 + // this.updateOpeOrder(opeOrder); for (OpeApply opeApply : opeApplyList) { - applyNum = opeApply.getNum(); - arrivalNum = opeApply.getArrivalNum(); - if(applyNum > arrivalNum) - { - flag = ApplyStatus.UNCOMPLETED; - opeApply.setStatus(ApplyStatus.UNCOMPLETED); - }else - { - opeApply.setStatus(ApplyStatus.STORAGE); - } + int existArrivalNum=this.opeApplyDao.getArrivalNumById(opeApply.getId()); + Integer applyNum = opeApply.getNum(); + Integer arrivalNum = opeApply.getArrivalNum(); + if(arrivalNum<=existArrivalNum||arrivalNum>applyNum){ + throw new BusinessException(ExceptionEnumCode.ORDER_ERROR,"到货数量不正确"); + } + if(applyNum > arrivalNum) + { + flag = ApplyStatus.UNCOMPLETED; + opeApply.setStatus(ApplyStatus.UNCOMPLETED); + }else + { + opeApply.setStatus(ApplyStatus.STORAGE); + } this.opeApplyService.updateOpeApply(opeApply); - } - // 更新订单状态为已入库 + OpeReagentCode opeReagentCode=this.opeReagentCodeDao.getReagentCode(opeOrder.getId(),opeApply.getId()); + if(opeReagentCode==null){ + throw new BusinessException(ExceptionEnumCode.SYS_ERR, "申购编号:" + opeApply.getApplyCode() + "的试剂条形码未自动生成"); + } +// if(opeReagentCode.getStatus()==1){ +// continue; +// } + List<OpeReagentStatus> opeReagentStatusList=generateReagentStatus(opeApply,opeReagentCode,opeOrder.getConsigneeUserId(),arrivalNum); + generateOpeUseFlow(opeReagentStatusList); + updateWareHouse(opeApply,arrivalNum-existArrivalNum); + this.opeReagentCodeDao.updateStatus(opeOrder.getId(),opeApply.getId(),1); + } + // 更新订单状态为已入库 opeOrder.setStatus(flag); - this.updateOpeOrder(opeOrder); + this.opeOrderDao.updateOpeOrderStatus(opeOrder); - // 将入库的物品更新库存 - OpeReagentStatus opeReagentStatus = null; - BigInteger startReagentCode = null; - BigInteger endReagentCode = null; - String reagentCode = null; - OpeWarehouseReserve opeWarehouseReserve = null; - OpeUseFlow opeUseFlow = null; - for (OpeApply opeApply : opeApplyList) { - if(StringUtils.isNotBlank(opeApply.getStartReagentCode()) && StringUtils.isNotBlank(opeApply.getEndReagentCode())){ - startReagentCode = new BigInteger(opeApply.getStartReagentCode()); - endReagentCode = new BigInteger(opeApply.getEndReagentCode()); - - for (BigInteger i = startReagentCode; i.compareTo(endReagentCode) < 1; i = i.add(BigInteger.ONE)) { - reagentCode = String.valueOf(i); - if (this.opeReagentStatusService.isOpeReagentStatusExist(reagentCode)) { - throw new BusinessException(ExceptionEnumCode.REAGENT_CODE_EXIST, "申购编号:" + opeApply.getApplyCode() + "的试剂条形码[" + reagentCode + "]已存在。"); - } - - opeReagentStatus = new OpeReagentStatus(); - opeReagentStatus.setReagentId(opeApply.getReagent().getId()); - opeReagentStatus.setArticleNumber(opeApply.getArticleNumber()); - opeReagentStatus.setReagentCode(reagentCode); - opeReagentStatus.setStatus(ArrivalStatus.WAREHOUSE); - opeReagentStatus.setHouseId(opeApply.getHouseId()); - opeReagentStatus.setContainerId(opeApply.getContainerId()); - opeReagentStatus.setUserId(opeOrder.getConsigneeUserId()); - opeReagentStatus.setPlace(opeApply.getPlaceId()); - opeReagentStatus.setRemainder(opeApply.getReagent().getMainMetering() != null ? (opeApply.getReagent().getMainMetering()) : new BigDecimal(0)); - opeReagentStatus.setStoreType(StoreType.APPLY); - this.opeReagentStatusService.insertOpeReagentStatus(opeReagentStatus); - - opeUseFlow = new OpeUseFlow(); - opeUseFlow.setReagentCode(opeReagentStatus.getReagentCode()); - opeUseFlow.setStatus(opeReagentStatus.getStatus()); - opeUseFlow.setHouseId(opeReagentStatus.getHouseId()); - opeUseFlow.setContainerId(opeReagentStatus.getContainerId()); - opeUseFlow.setUserId(opeReagentStatus.getUserId()); - opeUseFlow.setPlace(opeReagentStatus.getPlace()); - opeUseFlow.setRemainder(opeApply.getReagent().getMainMetering()!=null?(opeApply.getReagent().getMainMetering()):new BigDecimal(0)); - opeUseFlow.setStoreType(StoreType.APPLY); - - Map<String, String> metaMap = new HashMap<>(); - metaMap.put("groupId", "operate_status"); - metaMap.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEIN.getKey())); - List<BaseMeta> baseMetaList = baseMetaDao.getBaseMetaList(metaMap); - opeUseFlow.setOperateState(baseMetaList.get(0).getId()); - - this.opeUseFlowService.insertOpeUseFlow(opeUseFlow); - } - } - - opeWarehouseReserve = this.opeWarehouseReserveService.getOpeWarehouseReserve(opeApply.getReagent().getId(), opeApply.getArticleNumber()); - if (opeWarehouseReserve == null) { - opeWarehouseReserve = new OpeWarehouseReserve(); - opeWarehouseReserve.setReagentId(opeApply.getReagent().getId()); - opeWarehouseReserve.setArticleNumber(opeApply.getArticleNumber()); - opeWarehouseReserve.setReserve(0); - opeWarehouseReserve.setWarehouseId(opeApply.getHouseId()); - opeWarehouseReserve.setContainerId(opeApply.getContainerId()); - } - opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() + opeApply.getArrivalNum()); - if (StringUtils.isBlank(opeWarehouseReserve.getId())) { - this.opeWarehouseReserveService.insertOpeWarehouseReserve(opeWarehouseReserve); - } else { - this.opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve); - } - } } - public List<OpeApply> getOpeApplyListByOrder(String orderId) { - List<OpeApply> result = null; - List<OpeApplyOrder> opeApplyOrderList = this.opeApplyOrderService.getOpeApplyOrderList(orderId, null); - if (opeApplyOrderList != null && opeApplyOrderList.size() > 0) { - result = new ArrayList<OpeApply>(); - for (OpeApplyOrder opeApplyOrder : opeApplyOrderList) { - result.add(this.opeApplyService.getOpeApply(opeApplyOrder.getOpeApplyId())); + + + /** + * 生成试剂流向 + */ + @Override + public List<OpeReagentStatus> generateReagentStatus(OpeApply opeApply,OpeReagentCode opeReagentCode,Long consigneeUserId,Integer num){ + int startCode=opeReagentCode.getStartCode(); + int endCode=opeReagentCode.getEndCode(); + List<OpeReagentStatus> opeReagentStatusList=new ArrayList<>(); + int codeSum=0; + for(int i=startCode;i<=endCode;i++){ + String lastCode=StringToolUtils.addZeroForNum(String.valueOf(i),4); + String rcode=String.format("%s%s",opeReagentCode.getCodePrex(),lastCode); + codeSum=codeSum+1; + if(codeSum>num){ + break; } + if (this.opeReagentStatusService.isOpeReagentStatusExist(rcode)) { + continue; + } + OpeReagentStatus opeReagentStatus = new OpeReagentStatus(); + BeanUtils.copyProperties(opeApply,opeReagentStatus, "id"); + opeReagentStatus.setReagentId(opeApply.getReagent().getId()); + opeReagentStatus.setReagentCode(rcode); + opeReagentStatus.setStatus(ArrivalStatus.WAREHOUSE.getKey()); + opeReagentStatus.setUserId(consigneeUserId); + opeReagentStatus.setRemainder(opeApply.getReagent().getMainMetering() != null ? (opeApply.getReagent().getMainMetering()) : new BigDecimal(0)); + opeReagentStatus.setStoreType(StoreType.APPLY.getKey()); + opeReagentStatusList.add(opeReagentStatus); } + if(opeReagentStatusList.size()>0) { + this.opeReagentStatusService.batchInsertOpeReagentStatus(opeReagentStatusList); + } + return opeReagentStatusList; + } + /** + + /** + * 生成试剂流向 + */ + public void generateOpeUseFlow(List<OpeReagentStatus> opeReagentStatusList){ + List<OpeUseFlow> opeUseFlowList=new ArrayList<>(); + for(OpeReagentStatus opeReagentStatus :opeReagentStatusList){ + OpeUseFlow opeUseFlow = new OpeUseFlow(); + BeanUtils.copyProperties(opeReagentStatus,opeUseFlow,"id"); + opeUseFlow.setReagentCode(opeReagentStatus.getReagentCode()); + opeUseFlow.setOperateState(OperateStatus.WAREHOUSEIN.getKey()); + opeUseFlowList.add(opeUseFlow); + } + if(opeUseFlowList.size()>0) { + this.opeUseFlowService.batchInsertOpeUseFlow(opeUseFlowList); + } + } + /** + * 更新库存 + */ + public void updateWareHouse(OpeApply opeApply,Integer num){ + OpeWarehouseReserve opeWarehouseReserve = this.opeWarehouseReserveService.getOpeWarehouseReserve(opeApply.getReagent().getId(), opeApply.getArticleNumber()); + if (opeWarehouseReserve == null) { + opeWarehouseReserve = new OpeWarehouseReserve(); + opeWarehouseReserve.setReagentId(opeApply.getReagent().getId()); + opeWarehouseReserve.setArticleNumber(opeApply.getArticleNumber()); + opeWarehouseReserve.setReserve(0); + opeWarehouseReserve.setWarehouseId(opeApply.getHouseId()); + opeWarehouseReserve.setContainerId(opeApply.getContainerId()); + } + opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() + num); + if (opeWarehouseReserve.getId()==null) { + this.opeWarehouseReserveService.insertOpeWarehouseReserve(opeWarehouseReserve); + } else { + this.opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve); + } + } + + + public List<OpeApply> getOpeApplyListByOrder(Long orderId) { + List<OpeApply> result = this.opeApplyService.getOpeApplyByOrderId(orderId); +// List<OpeApplyOrder> opeApplyOrderList = this.opeApplyOrderService.getOpeApplyOrderList(orderId, null); +// if (opeApplyOrderList != null && opeApplyOrderList.size() > 0) { +// result = new ArrayList<OpeApply>(); +// for (OpeApplyOrder opeApplyOrder : opeApplyOrderList) { +// result.add(this.opeApplyService.getOpeApply(opeApplyOrder.getOpeApplyId())); +// } +// } +// +// this.opeApplyService.getOpeApplyByOrderId(orderId); return result; } @@ -334,7 +470,7 @@ } @Transactional(propagation = Propagation.REQUIRED) - public void cancelOrderApply(String orderId) { + public void cancelOrderApply(Long orderId) { List<OpeApply> opeApplyList = this.getOpeApplyListByOrder(orderId); if (opeApplyList != null && opeApplyList.size() > 0) { for (OpeApply opeApply : opeApplyList) { @@ -352,10 +488,9 @@ for (OpeApply opeApply : opeApplyList) { emailStatus = new EmailStatus(); - emailStatus.setId(IDUtils.uuid()); emailStatus.setOrderCode(opeOrder.getOrderCode()); emailStatus.setApplyCode(opeApply.getApplyCode()); - emailStatus.setReagentId(opeApply.getReagent().getId()); + emailStatus.setReagentId(opeApply.getReagentId()); emailStatus.setNum(opeApply.getArrivalNum()); emailStatus.setApplyUserId(opeApply.getApplyUserId()); emailStatus.setStatus(EmailSendStatus.UN_SEND); @@ -458,7 +593,7 @@ opeWarehouseReserve.setReserve(0); } opeWarehouseReserve.setReserve(opeWarehouseReserve.getReserve() - opeApply1.getArrivalNum()); - if (StringUtils.isBlank(opeWarehouseReserve.getId())) { + if (opeWarehouseReserve.getId()==null) { this.opeWarehouseReserveService.insertOpeWarehouseReserve(opeWarehouseReserve); } else { this.opeWarehouseReserveService.updateOpeWarehouseReserve(opeWarehouseReserve); @@ -472,12 +607,12 @@ } @Override - public List<EmailStatus> selectByReId(String id) { + public List<EmailStatus> selectByReId(Long id) { return this.emailStatusDao.selectByReId(id); } @Override - public void updateByReId(String newReId, String oldReId) { + public void updateByReId(Long newReId, Long oldReId) { Map<String, Object> params=new HashMap(); params.put("newReId",newReId); params.put("oldReId",oldReId); @@ -485,7 +620,7 @@ } @Override - public OpeOrder getOrder(String id) { + public OpeOrder getOrder(Long id) { return opeOrderDao.selectParentOrder(id); } -- Gitblit v1.9.2