From c3510da29a7974c6af7ff3de1ade3db429d6f848 Mon Sep 17 00:00:00 2001
From: 李宇 <986321569@qq.com>
Date: 星期三, 18 八月 2021 14:27:59 +0800
Subject: [PATCH] 申购管理申请履历显示所有历史单据,提交时如有无效试剂耗材报错

---
 src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java |  399 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 389 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
index 12d1e8b..5092e03 100644
--- a/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
+++ b/src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
@@ -1,20 +1,19 @@
 package com.nanometer.smartlab.service;
 
 import java.math.BigDecimal;
-import java.sql.Time;
 import java.sql.Timestamp;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
 
 import javax.annotation.Resource;
-import javax.ejb.EJB;
 
-import com.nanometer.smartlab.dao.SysLaboratoryContainerDao;
-import com.nanometer.smartlab.dao.SysWarehouseContainerDao;
+import com.nanometer.smartlab.dao.*;
 import com.nanometer.smartlab.entity.*;
+import com.nanometer.smartlab.entity.dto.PersonUseDetail;
+import com.nanometer.smartlab.entity.enumtype.OperateStatus;
 import com.nanometer.smartlab.util.Constants;
-import com.nanometer.smartlab.util.Utils;
+import com.nanometer.smartlab.util.ExcelUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang3.time.DateUtils;
 import org.apache.log4j.Logger;
@@ -25,7 +24,6 @@
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.nanometer.smartlab.dao.OpeUseFlowDao;
 import com.nanometer.smartlab.entity.enumtype.ArrivalStatus;
 import com.nanometer.smartlab.entity.enumtype.SeeFlag;
 import com.nanometer.smartlab.exception.AlarmCode;
@@ -53,6 +51,14 @@
 
     @Resource
     private SysUserService sysUserService;
+    @Resource
+    private OpeReagentStatusService opeReagentStatusService;
+    @Resource
+    private SysReagentService sysReagentService;
+    @Resource
+    private BaseMetaDao baseMetaDao;
+    @Resource
+    private OpeReagentStatusDao opeReagentStatusDao;
 
 
     @Transactional(propagation = Propagation.REQUIRED)
@@ -63,7 +69,7 @@
             }
 
             if(opeUseFlow.getCreateTime()==null){
-            	opeUseFlow.setCreateTime(new Timestamp(System.currentTimeMillis()));
+            	opeUseFlow.setCreateTime(new Timestamp(System.currentTimeMillis()+1000));
             }
 
             this.opeUseFlowDao.insertOpeUseFlow(opeUseFlow);
@@ -128,8 +134,8 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public List<OpeUseFlow> getOpeUseFlowListByName(String houseName,String reagentId, String reagentCode, Integer status, String userId,
-                                                    Date startDate,Date endDate,Integer first, Integer pageSize) {
+    public List<OpeUseFlow> getOpeUseFlowListByName(String houseName,String reagentId, String reagentCode,String containerCode, Integer status, String userId,
+                                                    Date startDate,Date endDate,Integer first, Integer pageSize,String operatestate) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
 
@@ -168,6 +174,8 @@
 
             params.put("status", status);
             params.put("houseName", houseName);
+            params.put("operatestate", operatestate);
+            params.put("containerCode", containerCode);
             addParamByUserId(userId, params);
 
             params.put("first", first);
@@ -181,7 +189,7 @@
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    public int getOpeUseFlowTotalCountByName(String houseName,String reagentId, String reagentCode, Integer status, String userId,Date startDate,Date endDate) {
+    public int getOpeUseFlowTotalCountByName(String houseName,String reagentId, String reagentCode,String containerCode, Integer status, String userId,Date startDate,Date endDate,String operatestate) {
         try {
             Map<String, Object> params = new HashMap<String, Object>();
             params.put("reagentName", reagentId);
@@ -218,7 +226,9 @@
                 params.put("endDate",sdfend.format(now));
             }
 
+            params.put("operatestate", operatestate);
             params.put("houseName", houseName);
+            params.put("containerCode", containerCode);
             addParamByUserId(userId, params);
 
             params.put("status", status);
@@ -357,4 +367,373 @@
         params.put("status",-1);
         opeUseFlowDao.updateTimeByCode(params);
     }
+
+    @Override
+    public OpeUseFlow getOpeUseFlowByCode(String reagentCode) {
+        return opeUseFlowDao.getOpeUseFlowByCode(reagentCode);
+    }
+
+    @Override
+    public void updateReceiptNumber(String code, String receiptNumber) {
+        opeUseFlowDao.updateReceiptNumber(code, receiptNumber);
+    }
+
+    @Transactional
+    public void updateReceiptNumberByCode(List<OpeApplyReserve> selectedTmpOrderList,String receiptNumber) {
+
+        for (OpeApplyReserve oar : selectedTmpOrderList) {
+            if (oar.getFlag() == 1) {
+                //库中领取 code存的是 试剂状态的id
+                for (String statusId : oar.getReagentCode()) {
+                    String code = opeReagentStatusService.getOpeReagentStatus(statusId).getReagentCode();
+                    //此时状态为领用待入库
+                    this.updateReceiptNumber(code, receiptNumber);
+                }
+            }else{
+                //根据id或者试剂的条码直接查找 状态表单 查询订单所有的流向
+                List<String> codeTmp = opeReagentStatusService
+                        .generateReagentCode(oar.getStartReagentCode2(), oar.getEndReagentCode2());
+                for (String code : codeTmp) {
+                    this.updateReceiptNumber(code, receiptNumber);
+                }
+            }
+
+        }
+
+
+    }
+
+    @Override
+    public Map<String, Integer> getRegentInfoFromReceiptNumber(String receiptNumber) {
+        List<Map> maps = opeUseFlowDao.getRegentInfoFromReceiptNumber(receiptNumber);
+        if (maps.size() > 0) {
+            Map<String, Integer> printInfo = new HashMap<>();
+            for (Map map : maps) {
+                Integer count =Integer.parseInt(String.valueOf(map.get("count")));;
+                String reagentId = (String) map.get("reagentId");
+                SysReagent reagent = sysReagentService.getSysReagent(reagentId);
+                printInfo.put(reagent.getId(), count);
+            }
+            return printInfo;
+        }
+
+        return null;
+    }
+
+    @Override
+    public Map getApplyUserByReagentCode(String reagentCode) {
+
+        Map<String, String> metaMap2 = new HashMap<>();
+        metaMap2.put("groupId", "operate_status");
+        metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
+        List<BaseMeta> baseMetaList2 = baseMetaDao.getBaseMetaList(metaMap2);
+        String id = baseMetaList2.get(0).getId();
+        return opeUseFlowDao.getUserIdByReagentCode(reagentCode, id);
+    }
+
+    @Override
+    public void updateReceiptNumberByCode2(List<OpeWarehouseReserve> selectTmpList, String receiptNumber) {
+        for (OpeWarehouseReserve owr : selectTmpList) {
+            if (owr.getFlag() == 1) {
+                //库中领取 code存的是 试剂状态的id
+                for (String statusId : owr.getReagentCodes()) {
+                    String code = opeReagentStatusService.getOpeReagentStatus(statusId).getReagentCode();
+                    //此时状态为领用待入库
+                    this.updateReceiptNumber(code, receiptNumber);
+                }
+            }else{
+                //根据id或者试剂的条码直接查找 状态表单 查询订单所有的流向
+                List<String> codeTmp = opeReagentStatusService
+                        .generateReagentCode(owr.getStartReagentCode2(), owr.getEndReagentCode2());
+                for (String code : codeTmp) {
+                    this.updateReceiptNumber(code, receiptNumber);
+                }
+            }
+
+        }
+
+    }
+
+    @Override
+    public int getPersonalUseInfoCount(String reagentCode,String userId, Date startDate, Date endDate, String receiptNumber,
+                                       String department, String project,String applyPerson,String reagentName) {
+        Map<String,Object> params = new HashMap<>();
+
+        SimpleDateFormat sdfstart = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
+        SimpleDateFormat sdfend = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
+        Date now = new Date();
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(now);
+        cal.add(Calendar.DATE, -7);
+        Date startTime = cal.getTime();
+
+        if (null != startDate){
+            try {
+                params.put("startTime",sdfstart.format(startDate));
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }else {
+            params.put("startTime",sdfstart.format(startTime));
+        }
+
+        if (null != endDate){
+            try {
+                params.put("endTime",sdfend.format(endDate));
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }else {
+            params.put("endTime",sdfend.format(now));
+        }
+
+        params.put("userId", userId);
+        params.put("receiptNumber", receiptNumber);
+        params.put("department", department);
+        params.put("project", project);
+        params.put("reagentCode", reagentCode);
+        params.put("applyPerson", applyPerson);
+        if (StringUtils.isNotBlank(reagentName)) {
+            //根据试剂名获取单号
+
+        }
+        params.put("reagentName", reagentName);
+        //操作状态位仓库领取
+        Map<String, String> metaMap2 = new HashMap<>();
+        metaMap2.put("groupId", "operate_status");
+        metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
+        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(metaMap2);
+        params.put("operatestate", baseMetas.get(0).getId());
+
+        metaMap2.put("metaKey", String.valueOf(OperateStatus.TRANSFER.getKey()));
+        List<BaseMeta> baseMetas1 = baseMetaDao.getBaseMetaList(metaMap2);
+        params.put("operatestate1", baseMetas1.get(0).getId());
+
+        addParamByUserId(userId, params);
+        return opeUseFlowDao.countPersonalUseInfo(params);
+    }
+
+    @Override
+    public List<OpeUseFlow> getPersonalUseInfoList(String reagentCode,String userId, Date startDate, Date endDate, String receiptNumber,
+                                                   String department, String project,String applyPerson,String reagentName, int first, int pageSize) {
+        Map<String, Object> params = new HashMap<>();
+        SimpleDateFormat sdfstart = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
+        SimpleDateFormat sdfend = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
+        Date now = new Date();
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(now);
+        cal.add(Calendar.DATE, -7);
+        Date startTime = cal.getTime();
+        if (null != startDate){
+            try {
+                params.put("startTime",sdfstart.format(startDate));
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }else {
+            params.put("startTime",sdfstart.format(startTime));
+        }
+        if (null != endDate){
+            try {
+                params.put("endTime",sdfend.format(endDate));
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }else {
+            params.put("endTime",sdfend.format(now));
+        }
+        params.put("userId", userId);
+        params.put("receiptNumber", receiptNumber);
+        params.put("department", department);
+        params.put("project", project);
+        params.put("reagentCode", reagentCode);
+        params.put("applyPerson", applyPerson);
+        params.put("reagentName", reagentName);
+        //操作状态位仓库领取
+        Map<String, String> metaMap2 = new HashMap<>();
+        metaMap2.put("groupId", "operate_status");
+        metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
+        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(metaMap2);
+        params.put("operatestate", baseMetas.get(0).getId());
+
+        metaMap2.put("metaKey", String.valueOf(OperateStatus.TRANSFER.getKey()));
+        List<BaseMeta> baseMetas1 = baseMetaDao.getBaseMetaList(metaMap2);
+        params.put("operatestate1", baseMetas1.get(0).getId());
+
+        params.put("first", first);
+        params.put("pageSize", pageSize);
+
+        addParamByUserId(userId, params);
+        return opeUseFlowDao.selectPersonalUseInfo(params);
+    }
+
+    @Override
+    public List<PersonUseDetail> getApplyInfo(String receiptNumber) {
+        Map<String,Object> params = new HashMap<>();
+        Map<String, String> metaMap2 = new HashMap<>();
+        metaMap2.put("groupId", "operate_status");
+        metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
+        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(metaMap2);
+        params.put("operatestate", baseMetas.get(0).getId());
+
+        metaMap2.put("metaKey", String.valueOf(OperateStatus.TRANSFER.getKey()));
+        List<BaseMeta> baseMetas1 = baseMetaDao.getBaseMetaList(metaMap2);
+        params.put("operatestate1", baseMetas1.get(0).getId());
+
+        params.put("receiptNumber", receiptNumber);
+
+        return  opeUseFlowDao.getApplyInfo(params);
+
+    }
+
+
+    @Override
+    public int getApplyInfoSize(String receiptNumber) {
+        Map<String,Object> params = new HashMap<>();
+        Map<String, String> metaMap2 = new HashMap<>();
+        metaMap2.put("groupId", "operate_status");
+        metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
+        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(metaMap2);
+        params.put("operatestate", baseMetas.get(0).getId());
+
+        metaMap2.put("metaKey", String.valueOf(OperateStatus.TRANSFER.getKey()));
+        List<BaseMeta> baseMetas1 = baseMetaDao.getBaseMetaList(metaMap2);
+        params.put("operatestate1", baseMetas1.get(0).getId());
+
+        params.put("receiptNumber", receiptNumber);
+
+        return  opeUseFlowDao.getApplyInfoSize(params);
+
+    }
+
+    @Override
+    public int getOpeUseFlow(OpeUseFlow opeUseFlow) {
+        return opeUseFlowDao.countOpeUseFlow(opeUseFlow);
+    }
+
+    @Override
+    @Transactional
+    public void scrapReagent(String reagentId,String reagentCode, String userId) {
+        //1.试剂状态表更新试剂状态为报废
+        OpeReagentStatus status = opeReagentStatusService.getStatus(reagentId, reagentCode);
+        if (status.getStatus() == ArrivalStatus.SCRAP) {
+            throw new BusinessException(ExceptionEnumCode.PARAM_ERR,"该试剂已是报废状态,无法进行操作");
+        }
+        //报废
+        status.setStatus(ArrivalStatus.SCRAP);
+        status.setUserId(userId);
+        opeReagentStatusDao.updateOpeReagentStatusDao(status);
+
+        //2.插入一条报废的流向记录
+        OpeUseFlow useFlow = new OpeUseFlow();
+        //获取报废状态id
+        Map<String, Object> params = new HashMap<>();
+        params.put("groupId", "operate_status");
+        params.put("metaKey", String.valueOf(OperateStatus.SCRAP.getKey()));
+        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(params);
+        useFlow.setOperateState(baseMetas.get(0).getId());
+        useFlow.setReagentCode(reagentCode);
+        useFlow.setContainerId(status.getContainerId());
+        useFlow.setHouseId(status.getHouseId());
+        useFlow.setUserId(userId);
+        useFlow.setPlace(status.getPlace());
+        useFlow.setRemainder(status.getRemainder());
+        useFlow.setStoreType(status.getStoreType());
+        useFlow.setProject(status.getProjectNum());
+        useFlow.setArticleNumber(status.getArticleNumber());
+
+        useFlow.setCreateTime(new Timestamp(new Date().getTime()));
+        useFlow.setId(IDUtils.uuid());
+        opeUseFlowDao.insertOpeUseFlow(useFlow);
+
+    }
+
+    @Override
+    public OpeUseFlow selectById(String id) {
+        return opeUseFlowDao.selectById(id);
+    }
+
+    @Override
+    public OpeUseFlow selectByReceiptNumber(String receiptNumber,String userId) {
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("userId", userId);
+        params.put("receiptNumber", receiptNumber);
+        //操作状态位仓库领取
+        Map<String, String> metaMap2 = new HashMap<>();
+        metaMap2.put("groupId", "operate_status");
+        metaMap2.put("metaKey", String.valueOf(OperateStatus.WAREHOUSEOUT.getKey()));
+        List<BaseMeta> baseMetas = baseMetaDao.getBaseMetaList(metaMap2);
+        params.put("operatestate", baseMetas.get(0).getId());
+
+        metaMap2.put("metaKey", String.valueOf(OperateStatus.TRANSFER.getKey()));
+        List<BaseMeta> baseMetas1 = baseMetaDao.getBaseMetaList(metaMap2);
+        params.put("operatestate1", baseMetas1.get(0).getId());
+
+        addParamByUserId(userId, params);
+
+        return opeUseFlowDao.selectByReceiptNumber(params);
+    }
+
+    @Override
+    public List<Map> selectAll(String houseName, String reagentId, String reagentCode, String containerCode, String userId, Date startDate, Date endDate) {
+        try {
+            Map<String, Object> params = new HashMap<String, Object>();
+
+            params.put("reagentName", reagentId);
+            if (StringUtils.isNotBlank(reagentCode)) {
+                params.put("reagentCode", "%" + reagentCode + "%");
+            }
+            SimpleDateFormat sdfstart = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
+            SimpleDateFormat sdfend = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
+            Date now = new Date();
+            Calendar cal = Calendar.getInstance();
+            cal.setTime(now);
+            cal.add(Calendar.DATE, -7);
+            Date startTime = cal.getTime();
+
+            if (null != startDate){
+                try {
+                    params.put("startDate",sdfstart.format(startDate));
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+            }else {
+                params.put("startDate",sdfstart.format(startTime));
+            }
+            if (null != endDate){
+                try {
+                    params.put("endDate",sdfend.format(endDate));
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+            }else {
+                params.put("endDate",sdfend.format(now));
+            }
+            params.put("houseName", houseName);
+            params.put("containerCode", containerCode);
+            addParamByUserId(userId, params);
+            return opeUseFlowDao.selectAll(params);
+        } catch (DataAccessException e) {
+            logger.error(e.getMessage(), e);
+            throw new BusinessException(ExceptionEnumCode.DB_ERR,
+                    MessageUtil.getMessageByCode(ExceptionEnumCode.DB_ERR.getCode()), e);
+        }
+    }
+
+    @Override
+    public boolean export2Excel(List<Map> list) throws Exception {
+        Map<String,String> map = new LinkedHashMap<>();
+        map.put("reagentCode", "试剂条形码");
+        map.put("reagentName", "试剂名称");
+        map.put("laboratoryContainerCode", "柜号");
+        map.put("operatestateName", "操作状态");
+        map.put("remainder", "残存量");
+        map.put("userName", "持有者");
+        map.put("createTime", "更新时间");
+        map.put("warehouseContainerName", "场所名");
+        ExcelUtils.export2Excel(list,"试剂流向追踪列表",map);
+        return true;
+    }
+
 }

--
Gitblit v1.9.2