李宇
2021-06-25 b48666e1f30b3334726d218d6b05d1228a307fd7
src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
@@ -1,21 +1,18 @@
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.sun.org.apache.regexp.internal.RE;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.log4j.Logger;
@@ -26,7 +23,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;
@@ -54,6 +50,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)
@@ -64,7 +68,7 @@
            }
            if(opeUseFlow.getCreateTime()==null){
               opeUseFlow.setCreateTime(new Timestamp(System.currentTimeMillis()));
               opeUseFlow.setCreateTime(new Timestamp(System.currentTimeMillis()+1000));
            }
            this.opeUseFlowDao.insertOpeUseFlow(opeUseFlow);
@@ -129,7 +133,7 @@
    }
    @Transactional(propagation = Propagation.REQUIRED)
    public List<OpeUseFlow> getOpeUseFlowListByName(String houseName,String reagentId, String reagentCode, Integer status, String userId,
    public List<OpeUseFlow> getOpeUseFlowListByName(String houseName,String reagentId, String reagentCode,String containerCode, Integer status, String userId,
                                                    Date startDate,Date endDate,Integer first, Integer pageSize) {
        try {
            Map<String, Object> params = new HashMap<String, Object>();
@@ -169,6 +173,7 @@
            params.put("status", status);
            params.put("houseName", houseName);
            params.put("containerCode", containerCode);
            addParamByUserId(userId, params);
            params.put("first", first);
@@ -182,7 +187,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) {
        try {
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("reagentName", reagentId);
@@ -220,6 +225,7 @@
            }
            params.put("houseName", houseName);
            params.put("containerCode", containerCode);
            addParamByUserId(userId, params);
            params.put("status", status);
@@ -363,4 +369,234 @@
    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 startTime, Date endTime, String receiptNumber,
                                       String department, String project,String applyPerson,String reagentName) {
        Map<String,Object> params = new HashMap<>();
        params.put("userId", userId);
        params.put("startTime", startTime);
        params.put("endTime", endTime);
        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());
        addParamByUserId(userId, params);
        return opeUseFlowDao.countPersonalUseInfo(params);
    }
    @Override
    public List<OpeUseFlow> getPersonalUseInfoList(String reagentCode,String userId, Date startTime, Date endTime, String receiptNumber,
                                                   String department, String project,String applyPerson,String reagentName, int first, int pageSize) {
        Map<String, Object> params = new HashMap<>();
        params.put("userId", userId);
        params.put("startTime", startTime);
        params.put("endTime", endTime);
        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());
        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());
        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());
        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());
        addParamByUserId(userId, params);
        return opeUseFlowDao.selectByReceiptNumber(params);
    }
}