李宇
2021-01-21 9c9503de4fb1e1b0127f83c8b2b0f645c6ab9e9c
src/main/java/com/nanometer/smartlab/service/OpeApplyServiceImpl.java
@@ -3,6 +3,7 @@
import com.nanometer.smartlab.dao.OpeApplyDao;
import com.nanometer.smartlab.entity.OpeApply;
import com.nanometer.smartlab.entity.OpeApplyReserve;
import com.nanometer.smartlab.entity.OpeOrder;
import com.nanometer.smartlab.entity.SysUser;
import com.nanometer.smartlab.entity.enumtype.ApplyStatus;
import com.nanometer.smartlab.entity.enumtype.SeeFlag;
@@ -40,6 +41,12 @@
    @Resource(name = "opeApplyDao")
    OpeApplyDao opeApplyDao;
    @Resource
    OpeOrderService opeOrderService;
    @Resource
    OpeReagentStatusService opeReagentStatusService;
    @Resource
    OpeWarehouseReserveService opeWarehouseReserveService;
   @Resource
   private SysUserService sysUserService;
@@ -63,6 +70,10 @@
             if (sysUser.getSeeFlag().getKey() != SeeFlag.MANAGE.getKey()) {
                 params.put("applyUserId", applyUserId);
             }
                if("连悦".equals(sysUser.getName())){
                    params.remove("applyUserId");
                }
          }
            params.put("approveUserId", approveUserId);
@@ -177,6 +188,10 @@
             if (sysUser.getSeeFlag().getKey() != SeeFlag.MANAGE.getKey()) {
                 params.put("applyUserId", applyUserId);
             }
             if("连悦".equals(sysUser.getName())){
                    params.remove("applyUserId");
                }
          }
            params.put("approveUserId", approveUserId);
@@ -511,12 +526,15 @@
   }
    @Override
    public int getOpeApplyReserveTotalCountByNameFor(String id,String reagentName, String personName) {
    public int getOpeApplyReserveTotalCountByNameFor(String id,String reagentName, String personName,String productSn,String applyCode,Integer status) {
        try {
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("reagentName", reagentName);
            params.put("personName", personName);
            params.put("userId",id);
            params.put("productSn",productSn);
            params.put("applyCode",applyCode);
            params.put("status",status);
            return this.opeApplyDao.getOpeApplyReserveTotalCountFor(params);
        } catch (DataAccessException e) {
            logger.error(e.getMessage(), e);
@@ -526,7 +544,7 @@
    }
    @Override
    public List<OpeApplyReserve> getOpeApplyReserveListByNameFor(String id,String reagentName, String personName, Integer first,
                                                              Integer pageSize) {
                                                              Integer pageSize,String productSn,String applyCode,Integer status) {
        try {
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("reagentName", reagentName);
@@ -534,6 +552,9 @@
            params.put("userId",id);
            params.put("first", first);
            params.put("pageSize", pageSize);
            params.put("productSn",productSn);
            params.put("applyCode",applyCode);
            params.put("status",status);
            return this.opeApplyDao.getOpeApplyReserveListFor(params);
        } catch (DataAccessException e) {
            logger.error(e.getMessage(), e);
@@ -625,4 +646,66 @@
        params.put("oldReId",oldReId);
        this.opeApplyDao.updateByReId(params);
    }
    @Override
    public OpeApplyReserve getOpeApplyDetail(String id) {
        return opeApplyDao.getOpeApplyDetail(id);
    }
    @Override
    public void updateOpeApplyInfo(ApplyStatus storage, String consigneeId, Timestamp arrivalTime, String applyId) {
        Map<String,Object> params = new HashMap();
        params.put("status", storage);
        params.put("consigneeId", consigneeId);
        params.put("arrivalTime", arrivalTime);
        params.put("applyId", applyId);
        opeApplyDao.updateOpeApplyInfo(params);
    }
    @Override
    @Transactional
    public void orderInputWarehouse(List<OpeApplyReserve> opeApplyList,String consigneeId,Timestamp arrivalTime) {
        for (OpeApplyReserve opeApplyReserve:opeApplyList) {
            //0.1获取该申购单的订单
            OpeOrder oo = opeOrderService.getOrder(opeApplyReserve.getId());
            if (oo == null) {
                throw new BusinessException(ExceptionEnumCode.ORDER_ERROR,"订单不存在");
            }
            //0.2检查条码->得到试剂条码列表
            List<String> codeList = opeReagentStatusService
                    .checkReagentCode(opeApplyReserve.getStartReagentCode2(), opeApplyReserve.getEndReagentCode2(), opeApplyReserve.getArrivalNum());
            //1.入库
            if (codeList == null){
                //无条码入库 不需要增加状态和流向
                //1.1库存表增加
                opeWarehouseReserveService.insertOpeWarehouseReserve2(opeApplyReserve, oo);
            }else{
                //条码入库
                assert codeList.size() > 0;
                //1.1入库(库存表增加)
                opeWarehouseReserveService.insertOpeWarehouseReserve2(opeApplyReserve, oo);
                //1.2试剂状态表增加,流向增加
                opeReagentStatusService.orderInputWarehouseReagentStatusAndUseFlow(opeApplyReserve,consigneeId,codeList,oo);
            }
            //2.更改申购单所属订单状态(判断子订单是否全部完成)
            //2.1更改该申购单的状态,收货人和到货时间
            this.updateOpeApplyInfo(ApplyStatus.STORAGE,consigneeId,arrivalTime, opeApplyReserve.getId());
            //2.2更改订单状态
            List<OpeApply> oas = opeOrderService.getOpeApplyListByOrder(oo.getId());
            assert oas.size() > 0;
            //子订单是否全部入库,是则父单为已入库,否则未完成
            boolean flag = oas.stream().allMatch(oa -> oa.getStatus() == ApplyStatus.STORAGE);
            oo.setConsigneeUserId(consigneeId);
            oo.setArrivalTime(arrivalTime);
            if (flag){
                oo.setStatus(ApplyStatus.STORAGE);
                opeOrderService.updateOpeOrderStatus(oo);
            }else{
                oo.setStatus(ApplyStatus.UNCOMPLETED);
                opeOrderService.updateOpeOrder(oo);
            }
        }
    }
}