package com.fzzy.igds.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.fzzy.igds.constant.AuditStatus; import com.fzzy.igds.constant.Constant; import com.fzzy.igds.data.ExportWordParam; import com.fzzy.igds.data.NoticeDto; import com.fzzy.igds.data.NoticeParam; import com.fzzy.igds.domain.*; import com.fzzy.igds.mapper.InoutNoticeInMapper; import com.fzzy.igds.mapper.InoutNoticeOutMapper; import com.fzzy.igds.utils.ContextUtil; import com.ruoyi.common.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import javax.annotation.Resource; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @Description 出入库通知单service层,包含入库通知单和出库通知单 * @Author CZT * @Date 2025/11/29 16:33 */ @Slf4j @Service public class InoutNoticeService { @Resource private InoutNoticeInMapper noticeInMapper; @Resource private InoutNoticeOutMapper noticeOutMapper; @Resource private DepotService depotService; @Resource private CoreDeptService coreDeptService; @Resource private PledgeContractService pledgeContractService; /*----------------------入库通知单信息-------------------------*/ /** * 分页查询数据 * @param page * @param param */ public void pageQueryIn(Page page, NoticeParam param) { QueryWrapper queryWrapper = new QueryWrapper<>(); if(null == param) { param = new NoticeParam(); } param.setCompanyId(ContextUtil.getCompanyId()); queryWrapper.eq("company_id", param.getCompanyId()); if(StringUtils.isNotBlank(param.getCustomerName())){ queryWrapper.like("customer_name", param.getCustomerName()); } if(StringUtils.isNotBlank(param.getFoodVariety())){ queryWrapper.like("food_variety", param.getFoodVariety()); } if(StringUtils.isNotBlank(param.getCompleteStatus())){ queryWrapper.like("complete_status", param.getCompleteStatus()); } noticeInMapper.selectPage(page, queryWrapper); } /** * 根据条件查询 * @return */ public List getNoticeIn(NoticeParam param) { QueryWrapper queryWrapper = new QueryWrapper<>(); if(StringUtils.isNotBlank(param.getCompanyId())){ queryWrapper.eq("company_id", param.getCompanyId()); } if(StringUtils.isNotBlank(param.getDeptId())){ queryWrapper.eq("dept_id", param.getDeptId()); } if(StringUtils.isNotBlank(param.getCompleteStatus())){ queryWrapper.eq("complete_status", param.getCompleteStatus()); } if(StringUtils.isNotBlank(param.getKey())){ queryWrapper.like("name", param.getKey()); } queryWrapper.orderByDesc("create_time"); return noticeInMapper.selectList(queryWrapper); } /** * 根据条件查询 * @param id * @return */ public InoutNoticeIn getNoticeInOne(String id) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("id", id); return noticeInMapper.selectOne(queryWrapper); } /** * 查询数据 * @param companyId * @return */ public List getUnComNoticeIn(String companyId) { if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } NoticeParam param = new NoticeParam(); param.setCompanyId(companyId); param.setCompleteStatus(Constant.COMPLETE_STATUS_NONE); return this.getNoticeIn(param); } /** * - 保存更新数据 * * @param data * @return */ public String saveOrUpdateIn(InoutNoticeIn data) { //如果入库通知单类型为库区通知单,验证仓库是否是未解压得仓库,是则不允许保存 //获取所有质押合同数据 List pledgeContracts = pledgeContractService.listAll(null); if("10".equals(data.getType())){ //在质押合同找到未解压,且质押仓库包含当前仓库的数据 for (PledgeContract pledgeContract : pledgeContracts) { if(pledgeContract.getDepotIds().contains(data.getDepotId())){ if(pledgeContract.getStatus().equals(Constant.YN_N)){ return "入库仓库未解压,无法保存!"; } } } } //如果入库通知单类型为监管通知单 if("20".equals(data.getType())){ //1.验证银行是否填写,未填写,则不允许保存 if(StringUtils.isEmpty(data.getBankId())){ return "监督银行不能为空!"; } //2.验证银行和仓库的对应关系是否正确,不正确则不允许保存 //在质押合同找到未解压,且质押仓库包含当前仓库的 银行-仓库(质押合同关系) Map bankDepotMap = new HashMap<>(); for (PledgeContract pledgeContract : pledgeContracts) { if(pledgeContract.getDepotIds().contains(data.getDepotId())){ if(pledgeContract.getStatus().equals(Constant.YN_N)){ bankDepotMap.put(pledgeContract.getPledgeBank(), pledgeContract); } } } //在map中寻找匹配银行的数据,如果没有匹配的数据,则不允许保存 if(!bankDepotMap.containsKey(data.getBankId())){ return "未找到对应的质押合同,请检查监督银行或者入库仓库填写是否正确!"; } } if (null == data.getUpdateBy()) { data.setUpdateBy(ContextUtil.getLoginUserName()); data.setUpdateTime(new Date()); data.setCreateBy(ContextUtil.getLoginUserName()); data.setCreateTime(new Date()); data.setAuditStatus(AuditStatus.STATUS_10.getCode()); data.setCompleteStatus(Constant.COMPLETE_STATUS_NONE); noticeInMapper.insert(data); } else { data.setUpdateBy(ContextUtil.getLoginUserName()); data.setUpdateTime(new Date()); noticeInMapper.updateById(data); } return null; } /** * - 删除数据 * * @param data * @return */ public String delDataIn(InoutNoticeIn data) { noticeInMapper.deleteById(data); return null; } /*----------------------出库通知单信息-------------------------*/ /** * 分页查询数据 * @param page * @param param */ public void pageQueryOut(Page page, NoticeParam param) { QueryWrapper queryWrapper = new QueryWrapper<>(); if(null == param) { param = new NoticeParam(); } param.setCompanyId(ContextUtil.getCompanyId()); queryWrapper.eq("company_id", param.getCompanyId()); if(StringUtils.isNotBlank(param.getCustomerName())){ queryWrapper.like("customer_name", param.getCustomerName()); } if(StringUtils.isNotBlank(param.getFoodVariety())){ queryWrapper.like("food_variety", param.getFoodVariety()); } if(StringUtils.isNotBlank(param.getCompleteStatus())){ queryWrapper.like("complete_status", param.getCompleteStatus()); } noticeOutMapper.selectPage(page, queryWrapper); } /** * 根据条件查询 * @return */ public List getNoticeOut(NoticeParam param) { QueryWrapper queryWrapper = new QueryWrapper<>(); if(StringUtils.isNotBlank(param.getCompanyId())){ queryWrapper.eq("company_id", param.getCompanyId()); } if(StringUtils.isNotBlank(param.getDeptId())){ queryWrapper.eq("dept_id", param.getDeptId()); } if(StringUtils.isNotBlank(param.getCompleteStatus())){ queryWrapper.eq("complete_status", param.getCompleteStatus()); } if(StringUtils.isNotBlank(param.getKey())){ queryWrapper.like("name", param.getKey()); } queryWrapper.orderByDesc("create_time"); return noticeOutMapper.selectList(queryWrapper); } /** * 根据条件查询 * @param id * @return */ public InoutNoticeOut getNoticeOutOne(String id) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("id", id); return noticeOutMapper.selectOne(queryWrapper); } /** * Mybatis-plus 获取信息 * @param companyId * @return */ public List getUnComNoticeOut(String companyId) { if (StringUtils.isEmpty(companyId)) { companyId = ContextUtil.getCompanyId(); } NoticeParam param = new NoticeParam(); param.setCompanyId(companyId); param.setCompleteStatus(Constant.COMPLETE_STATUS_NONE); return this.getNoticeOut(param); } /** * - 保存更新数据 * * @param data * @return */ public String saveOrUpdateOut(InoutNoticeOut data) { //如果出库通知单类型为库区通知单,验证仓库是否是未解压得仓库,是则不允许保存 //获取所有质押合同数据 List pledgeContracts = pledgeContractService.listAll(null); if("10".equals(data.getType())){ //在质押合同找到未解压,且质押仓库包含当前仓库的数据 for (PledgeContract pledgeContract : pledgeContracts) { if(pledgeContract.getDepotIds().contains(data.getDepotId())){ if(pledgeContract.getStatus().equals(Constant.YN_N)){ return "出库仓库未解压,无法保存!"; } } } } //如果出库通知单类型为监管通知单 if("20".equals(data.getType())){ //1.验证银行是否填写,未填写,则不允许保存 if(StringUtils.isEmpty(data.getBankId())){ return "监督银行不能为空!"; } //2.验证银行和仓库的对应关系是否正确,不正确则不允许保存 //在质押合同找到未解压,且质押仓库包含当前仓库的 银行-仓库(质押合同关系) Map bankDepotMap = new HashMap<>(); for (PledgeContract pledgeContract : pledgeContracts) { if(pledgeContract.getDepotIds().contains(data.getDepotId())){ if(pledgeContract.getStatus().equals(Constant.YN_N)){ bankDepotMap.put(pledgeContract.getPledgeBank(), pledgeContract); } } } //在map中寻找匹配银行的数据,如果没有匹配的数据,则不允许保存 if(!bankDepotMap.containsKey(data.getBankId())){ return "未找到对应的质押合同,请检查监督银行或者出库仓库填写是否正确!"; } } if (null == data.getUpdateBy()) { data.setUpdateBy(ContextUtil.getLoginUserName()); data.setUpdateTime(new Date()); data.setCreateBy(ContextUtil.getLoginUserName()); data.setCreateTime(new Date()); data.setAuditStatus(AuditStatus.STATUS_10.getCode()); data.setCompleteStatus(Constant.COMPLETE_STATUS_NONE); noticeOutMapper.insert(data); } else { data.setUpdateBy(ContextUtil.getLoginUserName()); data.setUpdateTime(new Date()); noticeOutMapper.updateById(data); } return null; } /** * 删除数据 * * @param data * @return */ public String delDataOut(InoutNoticeOut data) { noticeOutMapper.deleteById(data); return null; } /** * 根据ID获取通知单信息 * @param id * @param type * @return */ public NoticeDto queryNoticeById(String id, String type) { if (StringUtils.isEmpty(id) || StringUtils.isEmpty(type)) { return null; } NoticeDto noticeDto = new NoticeDto(); if (Constant.TYPE_IN.equals(type)) { InoutNoticeIn noticeIn = this.getNoticeInOne(id); BeanUtils.copyProperties(noticeIn, noticeDto); } else { InoutNoticeOut noticeOut = this.getNoticeOutOne(id); BeanUtils.copyProperties(noticeOut, noticeDto); } return noticeDto; } /** * Mybatis-plus 更新信息 * @param noticeInList * @return */ public void updateSumNoticeIn(List noticeInList) { if (null == noticeInList || noticeInList.isEmpty()) { return; } //遍历通知单 NoticeParam param; for (InoutNoticeIn noticeIn : noticeInList) { param = new NoticeParam(noticeIn.getCompanyId(), noticeIn.getDeptId(), noticeIn.getCustomerName(), noticeIn.getFoodVariety(), noticeIn.getId()); log.info("开始更新出库通知单={}", param.toString()); String msg = this.reSumNoticeInComplete(param); if (msg != null) { log.info("入库通知单完成量统计失败={},失败原因={}", param.toString(), msg); } } } /** * Mybatis-plus 获取信息 * @param param * @return */ public String reSumNoticeInComplete(NoticeParam param) { //TODO 待实现,后续根据需求进行实现 if (StringUtils.isEmpty(param.getCustomerName())) { return "客户编码为空!"; } if (StringUtils.isEmpty(param.getFoodVariety())) { return "粮食品种为空!"; } if (StringUtils.isEmpty(param.getCompanyId())) { param.setCompanyId(ContextUtil.getCompanyId()); } if (StringUtils.isEmpty(param.getDeptId())) { param.setDeptId(ContextUtil.subDeptId(null)); } return null; } /** * Mybatis-plus 更新信息 * @param noticeOutList * @return */ public void updateSumNoticeOut(List noticeOutList) { if (null == noticeOutList || noticeOutList.isEmpty()) { return; } //遍历通知单 NoticeParam param; for (InoutNoticeOut noticeOut : noticeOutList) { param = new NoticeParam(noticeOut.getCompanyId(), noticeOut.getDeptId(), noticeOut.getDepotId(), noticeOut.getCustomerName(), noticeOut.getFoodVariety(), noticeOut.getId()); log.info("开始更新出库通知单={}", param.toString()); String msg = this.reSumNoticeOutComplete(param); if (msg != null) { log.info("出库通知单完成量统计失败={},失败原因={}", param.toString(), msg); } } } /** * Mybatis-plus 更新信息 * @param param * @return */ public String reSumNoticeOutComplete(NoticeParam param) { //TODO 待实现,后续根据需求进行实现 if (StringUtils.isEmpty(param.getCustomerName())) { return "客户编码为空!"; } if (StringUtils.isEmpty(param.getFoodVariety())) { return "粮食品种为空!"; } if (StringUtils.isEmpty(param.getDepotId())) { return "仓库编码为空!"; } if (StringUtils.isEmpty(param.getCompanyId())) { param.setCompanyId(ContextUtil.getCompanyId()); } if (StringUtils.isEmpty(param.getDeptId())) { param.setDeptId(ContextUtil.subDeptId(null)); } return null; } /** * * @param param * @return */ public ExportWordParam handleInData(ExportWordParam param) { InoutNoticeIn notice = this.getNoticeInOne(param.getBizId()); //转换为模板需要的map数据源 Map map = new HashMap(); map.put("serId", notice.getId()); map.put("name", notice.getName()); String type = ""; if("10".equals(notice.getType())){ type = "库区通知单"; } if("20".equals(notice.getType())){ type = "监管通知单"; } map.put("type", type); map.put("customerName", notice.getCustomerName()); String unitName = ""; Dept dept = coreDeptService.getDeptById(notice.getUnitName()); if(dept != null){ unitName = dept.getKqmc(); } map.put("unitName", unitName); Depot depot = depotService.getCacheDepot(notice.getCompanyId(), notice.getDepotId()); String depotId = ""; if(dept != null){ depotId = depot.getName(); } map.put("depotId", depotId); map.put("year", notice.getYear()); map.put("targetNumber", notice.getTargetNumber()); map.put("completeNumber", notice.getCompleteNumber()); map.put("completeStatus", notice.getCompleteStatus()); map.put("contract", notice.getContract()); map.put("remark", notice.getRemark()); map.put("createUser", notice.getCreateBy()); map.put("createTime", DateFormatUtils.format(notice.getCreateTime(), "yyyy-MM-dd HH:mm:ss")); param.setDataMap(map); return param; } /** * * @param param * @return */ public ExportWordParam handleOutData(ExportWordParam param) { InoutNoticeOut notice = this.getNoticeOutOne(param.getBizId()); //转换为模板需要的map数据源 Map map = new HashMap(); map.put("serId", notice.getId()); map.put("name", notice.getName()); String type = ""; if("10".equals(notice.getType())){ type = "库区通知单"; } if("20".equals(notice.getType())){ type = "监管通知单"; } map.put("type", type); map.put("customerName", notice.getCustomerName()); String unitName = ""; Dept dept = coreDeptService.getDeptById(notice.getUnitName()); if(dept != null){ unitName = dept.getKqmc(); } map.put("unitName", unitName); Depot depot = depotService.getCacheDepot(notice.getCompanyId(), notice.getDepotId()); String depotId = ""; if(dept != null){ depotId = depot.getName(); } map.put("depotId", depotId); map.put("year", notice.getYear()); map.put("targetNumber", notice.getTargetNumber()); map.put("completeNumber", notice.getCompleteNumber()); map.put("completeStatus", notice.getCompleteStatus()); map.put("contract", notice.getContract()); map.put("remark", notice.getRemark()); map.put("createUser", notice.getCreateBy()); map.put("createTime", DateFormatUtils.format(notice.getCreateTime(), "yyyy-MM-dd HH:mm:ss")); param.setDataMap(map); return param; } }