kongzy
2023-11-01 dd8795a2675e32b25abe98f644f80d5f72fadb90
src/main/java/com/nanometer/smartlab/service/OpeUseFlowServiceImpl.java
@@ -8,13 +8,15 @@
import javax.annotation.Resource;
import com.nanometer.smartlab.dao.BaseMetaDao;
import com.nanometer.smartlab.dao.SysLaboratoryContainerDao;
import com.nanometer.smartlab.dao.SysWarehouseContainerDao;
import com.hazelcast.core.IFunction;
import com.nanometer.smartlab.dao.*;
import com.nanometer.smartlab.entity.*;
import com.nanometer.smartlab.entity.dto.OpeUseFlowQueryDto;
import com.nanometer.smartlab.entity.dto.PersonUseDetail;
import com.nanometer.smartlab.entity.enumtype.OperateStatus;
import com.nanometer.smartlab.model.CommonPage;
import com.nanometer.smartlab.util.Constants;
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 +27,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;
@@ -59,6 +60,8 @@
    private SysReagentService sysReagentService;
    @Resource
    private BaseMetaDao baseMetaDao;
    @Resource
    private OpeReagentStatusDao opeReagentStatusDao;
    @Transactional(propagation = Propagation.REQUIRED)
@@ -135,7 +138,7 @@
    @Transactional(propagation = Propagation.REQUIRED)
    public List<OpeUseFlow> getOpeUseFlowListByName(String houseName,String reagentId, String reagentCode,String containerCode, Integer status, String userId,
                                                    Date startDate,Date endDate,Integer first, Integer pageSize) {
                                                    Date startDate,Date endDate,Integer first, Integer pageSize,String operatestate) {
        try {
            Map<String, Object> params = new HashMap<String, Object>();
@@ -174,6 +177,7 @@
            params.put("status", status);
            params.put("houseName", houseName);
            params.put("operatestate", operatestate);
            params.put("containerCode", containerCode);
            addParamByUserId(userId, params);
@@ -187,8 +191,52 @@
        }
    }
    public CommonPage<OpeUseFlow> getOpeUseFlowSimpleInfoList(Integer pageNum, Integer pageSize, OpeUseFlowQueryDto opeUseFlowQueryDto) {
        CommonPage commonPage=new CommonPage();
        Map<String, Object> params = new HashMap<String, Object>();
        if(pageNum==null||pageNum<1){
            pageNum=1;
        }
        if(pageSize==null||pageSize<1){
            pageSize=10;
        }
        if(pageSize>50){
            pageSize=50;//每页最多查询50条记录
        }
        commonPage.setPageNum(pageNum);
        commonPage.setPageSize(pageSize);
        params.put("reagentName", opeUseFlowQueryDto.getReagentName());
        if (StringUtils.isNotBlank(opeUseFlowQueryDto.getReagentCode())) {
            params.put("reagentCode", "%" + opeUseFlowQueryDto.getReagentCode() + "%");
        }
        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();
        params.put("startDate",opeUseFlowQueryDto.getStartDate()!=null?opeUseFlowQueryDto.getStartDate():sdfstart.format(startTime));
        params.put("endDate",opeUseFlowQueryDto.getEndDate()!=null?opeUseFlowQueryDto.getEndDate():sdfend.format(now));
        params.put("houseName", opeUseFlowQueryDto.getHouseName());
        params.put("operatestate", opeUseFlowQueryDto.getOperatestate());
        params.put("containerCode", opeUseFlowQueryDto.getContainerCode());
        params.put("first", (pageNum-1)*pageSize);
        params.put("pageSize", pageSize);
        Long total= new Long(this.opeUseFlowDao.getOpeUseFlowTotalCount(params));
        commonPage.setTotalPage(CommonPage.getTotalPage(total,pageSize));
        commonPage.setTotal(total);
        List<OpeUseFlow> opeUseFlows= this.opeUseFlowDao.getOpeUseFlowSimpleInfoList(params);
        commonPage.setList(opeUseFlows);
        return commonPage;
    }
    @Transactional(propagation = Propagation.REQUIRED)
    public int getOpeUseFlowTotalCountByName(String houseName,String reagentId, String reagentCode,String containerCode, 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);
@@ -225,6 +273,7 @@
                params.put("endDate",sdfend.format(now));
            }
            params.put("operatestate", operatestate);
            params.put("houseName", houseName);
            params.put("containerCode", containerCode);
            addParamByUserId(userId, params);
@@ -372,29 +421,27 @@
    }
    @Override
    public void updateReceiptNumber(String code, String receiptNumber) {
        opeUseFlowDao.updateReceiptNumber(code, receiptNumber);
    public void updateReceiptNumber(String code, String receiptNumber,String note) {
        opeUseFlowDao.updateReceiptNumber(code, receiptNumber,note);
    }
    @Transactional
    public void updateReceiptNumberByCode(List<OpeApplyReserve> selectedTmpOrderList,String receiptNumber) {
    public void updateReceiptNumberByCode(List<OpeApplyReserve> selectedTmpOrderList,String receiptNumber,String note) {
        for (OpeApplyReserve oar : selectedTmpOrderList) {
            //根据id或者试剂的条码直接查找 状态表单 查询订单所有的流向
            List<String> codeTmp = opeReagentStatusService
                    .generateReagentCode(oar.getStartReagentCode2(), oar.getEndReagentCode2());
            assert codeTmp.size() > 0;
            if (oar.getFlag() == 1) {
                //库中领取 code存的是 试剂状态的id
                for (String statusId : codeTmp) {
                for (String statusId : oar.getReagentCode()) {
                    String code = opeReagentStatusService.getOpeReagentStatus(statusId).getReagentCode();
                    //此时状态为领用待入库
                    this.updateReceiptNumber(code, receiptNumber);
                    this.updateReceiptNumber(code, receiptNumber,note);
                }
            }else{
                //根据id或者试剂的条码直接查找 状态表单 查询订单所有的流向
                List<String> codeTmp = opeReagentStatusService
                        .generateReagentCode(oar.getStartReagentCode2(), oar.getEndReagentCode2());
                for (String code : codeTmp) {
                    this.updateReceiptNumber(code, receiptNumber);
                    this.updateReceiptNumber(code, receiptNumber,note);
                }
            }
@@ -432,23 +479,21 @@
    }
    @Override
    public void updateReceiptNumberByCode2(List<OpeWarehouseReserve> selectTmpList, String receiptNumber) {
    public void updateReceiptNumberByCode2(List<OpeWarehouseReserve> selectTmpList, String receiptNumber,String note) {
        for (OpeWarehouseReserve owr : selectTmpList) {
            //根据id或者试剂的条码直接查找 状态表单 查询订单所有的流向
            List<String> codeTmp = opeReagentStatusService
                    .generateReagentCode(owr.getStartReagentCode2(), owr.getEndReagentCode2());
            assert codeTmp.size() > 0;
            if (owr.getFlag() == 1) {
                //库中领取 code存的是 试剂状态的id
                for (String statusId : codeTmp) {
                for (String statusId : owr.getReagentCodes()) {
                    String code = opeReagentStatusService.getOpeReagentStatus(statusId).getReagentCode();
                    //此时状态为领用待入库
                    this.updateReceiptNumber(code, receiptNumber);
                    this.updateReceiptNumber(code, receiptNumber,note);
                }
            }else{
                //根据id或者试剂的条码直接查找 状态表单 查询订单所有的流向
                List<String> codeTmp = opeReagentStatusService
                        .generateReagentCode(owr.getStartReagentCode2(), owr.getEndReagentCode2());
                for (String code : codeTmp) {
                    this.updateReceiptNumber(code, receiptNumber);
                    this.updateReceiptNumber(code, receiptNumber,note);
                }
            }
@@ -457,12 +502,38 @@
    }
    @Override
    public int getPersonalUseInfoCount(String reagentCode,String userId, Date startTime, Date endTime, String receiptNumber,
    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<>();
        params.put("userId", userId);
        params.put("startTime", startTime);
        params.put("endTime", endTime);
        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("receiptNumber", receiptNumber);
        params.put("department", department);
        params.put("project", project);
@@ -480,17 +551,43 @@
        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 startTime, Date endTime, String receiptNumber,
    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<>();
        params.put("userId", userId);
        params.put("startTime", startTime);
        params.put("endTime", endTime);
        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("receiptNumber", receiptNumber);
        params.put("department", department);
        params.put("project", project);
@@ -503,6 +600,11 @@
        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);
@@ -518,6 +620,11 @@
        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);
@@ -533,6 +640,11 @@
        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);
@@ -544,4 +656,186 @@
        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;
    }
    /**
     * @Description: 查询导出
     */
    @Override
    public List<Map> selectExportDetail(String reagentCode, String userId, Date startTime, Date endTime, String receiptNumber, String department, String project, String applyPerson, String reagentName) {
        Map<String, Object> params = new HashMap<>();
        Map<String, String> metaMap2 = new HashMap<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        if (startTime != null) {
            params.put("startTime", sdf.format(startTime) +" 00:00:00");
        }
        if (endTime != null) {
            params.put("endTime", sdf.format(endTime) + " 23:59:59");
        }
        params.put("reagentCode", reagentCode);
        params.put("endTime", endTime);
        params.put("receiptNumber", receiptNumber);
        params.put("department", department);
        params.put("project", project);
        params.put("applyPerson", applyPerson);
        params.put("reagentName", reagentName);
        params.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.selectDetail(params);
    }
    @Override
    public boolean export22Excel(List<Map> list) throws Exception {
        Map<String,String> map = new LinkedHashMap<>();
        map.put("productSn", "产品编号");
        map.put("reagentName", "试剂名称");
        map.put("reagentCode", "试剂条形码");
        map.put("controlProducts", "管制品");
        map.put("reagentFormat", "规格型号");
        map.put("perInfo", "包装");
        map.put("productHome", "厂家");
        map.put("articleNumber", "批号");
        map.put("username", "申领人");
        map.put("project", "课题组");
        map.put("department", "部门");
        map.put("location", "地点");
        map.put("createTime", "领用时间");
        ExcelUtils.export2Excel(list,"试剂领用记录表",map);
        return true;
    }
}