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.constant.InoutConstant;
|
import com.fzzy.igds.data.*;
|
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.fzzy.work.data.WorkBizType;
|
import com.fzzy.work.domain.WorkOrderConf;
|
import com.fzzy.work.service.BizWorkService;
|
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 org.springframework.transaction.annotation.Transactional;
|
|
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;
|
|
@Resource
|
private BizWorkService workService;
|
|
/*----------------------入库通知单信息-------------------------*/
|
|
/**
|
* 分页查询数据
|
* @param page
|
* @param param
|
*/
|
public void pageQueryIn(Page<InoutNoticeIn> page, NoticeParam param) {
|
QueryWrapper<InoutNoticeIn> 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<InoutNoticeIn> getNoticeIn(NoticeParam param) {
|
|
QueryWrapper<InoutNoticeIn> 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<InoutNoticeIn> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("id", id);
|
return noticeInMapper.selectOne(queryWrapper);
|
}
|
|
/**
|
* 查询数据
|
* @param companyId
|
* @return
|
*/
|
public List<InoutNoticeIn> 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
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
public BaseResp saveOrUpdateIn(InoutNoticeIn data) {
|
|
//如果是库区自建通知单
|
if (InoutConstant.NOTICE_IN_TYPE_10.equals(data.getType())) {
|
//获取质押合同数据
|
PledgeContract pledge = this.getPledgeByDepotId(data);
|
if (null != pledge && pledge.getStatus().equals(Constant.YN_N)) {
|
return BaseResp.error("当前仓库有未解压的质押合同,质押合同=" + pledge.getName());
|
}
|
}
|
|
//如果质押通知单
|
if (InoutConstant.NOTICE_IN_TYPE_20.equals(data.getType())) {
|
//1.验证银行是否填写,未填写,则不允许保存
|
if (StringUtils.isEmpty(data.getBankId())) {
|
return BaseResp.error("质押银行不能为空!");
|
}
|
//2.验证银行和仓库的对应关系是否正确,不正确则不允许保存
|
PledgeContract pledge = this.getPledgeByDepotIdAndBankId(data);
|
if (null == pledge) {
|
return BaseResp.error("未获取到当前库区、仓库和银行之间的质押信息!");
|
}
|
}
|
|
//修改和提交是两个逻辑判断
|
if (null == data.getUpdateBy()) {
|
return this.saveInAddStartWork(data);
|
} else {
|
data.setUpdateBy(ContextUtil.getLoginUserName());
|
data.setUpdateTime(new Date());
|
noticeInMapper.updateById(data);
|
return BaseResp.success();
|
}
|
}
|
|
private BaseResp saveInAddStartWork(InoutNoticeIn data) {
|
//数据保存
|
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);
|
|
//执行流程
|
WorkOrderConf conf = workService.getConfByDeptId(data.getDeptId(), WorkBizType.TYPE_10);
|
//流程不启用
|
if (null == conf || Constant.YN_N.equals(conf.getValTag())) {
|
data.setAuditStatus(AuditStatus.STATUS_20.getCode());
|
//data.setAuditDate(data.getCreateTime());
|
} else {
|
BaseResp resp = workService.startByNoticeIn(data, conf);
|
log.info("---------启动工单流程------{}", resp);
|
}
|
|
noticeInMapper.insert(data);
|
|
return BaseResp.success();
|
}
|
|
|
/**
|
* 判断当前仓库是否在质押合同中未解压
|
* @param data 当前数据
|
* @return true-在质押合同中未解压,false-在质押合同中已解压
|
*/
|
private PledgeContract getPledgeByDepotId(InoutNoticeIn data) {
|
IgdsBaseParam param = new IgdsBaseParam();
|
param.setCompanyId(data.getCompanyId());
|
param.setDeptId(data.getDeptId());
|
param.setDepotId(data.getDepotId());
|
return pledgeContractService.getByDepotId(param);
|
}
|
|
private PledgeContract getPledgeByDepotIdAndBankId(InoutNoticeIn data) {
|
IgdsBaseParam param = new IgdsBaseParam();
|
param.setCompanyId(data.getCompanyId());
|
param.setDeptId(data.getDeptId());
|
param.setDepotId(data.getDepotId());
|
param.setBankId(data.getBankId());
|
return pledgeContractService.getByDepotId(param);
|
}
|
|
/**
|
* - 删除数据
|
*
|
* @param data
|
* @return
|
*/
|
public String delDataIn(InoutNoticeIn data) {
|
noticeInMapper.deleteById(data);
|
return null;
|
}
|
|
/*----------------------出库通知单信息-------------------------*/
|
|
/**
|
* 分页查询数据
|
* @param page
|
* @param param
|
*/
|
public void pageQueryOut(Page<InoutNoticeOut> page, NoticeParam param) {
|
QueryWrapper<InoutNoticeOut> 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<InoutNoticeOut> getNoticeOut(NoticeParam param) {
|
QueryWrapper<InoutNoticeOut> 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<InoutNoticeOut> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("id", id);
|
return noticeOutMapper.selectOne(queryWrapper);
|
}
|
|
/**
|
* Mybatis-plus 获取信息
|
* @param companyId
|
* @return
|
*/
|
public List<InoutNoticeOut> 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<PledgeContract> 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<String, PledgeContract> 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<InoutNoticeIn> 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<InoutNoticeOut> 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<String, Object> 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<String, Object> 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;
|
}
|
|
}
|