fix:1.持出库确认校验载具库存是否存在;

2.如果出库单据空出,修复ERP源单据数量;
This commit is contained in:
2025-01-17 16:31:18 +08:00
parent d749d506a5
commit 2bd4366e69
6 changed files with 93 additions and 26 deletions

View File

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.constant.DictConstantPool;
import org.nl.common.domain.exception.BadRequestException;
@@ -17,9 +18,10 @@ import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.DecisionHandler;
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
import org.nl.wms.system_manage.service.param.ISysParamService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
@@ -49,6 +51,8 @@ public class OutStorageTask extends AbstractTask {
private IStIvtStructattrService iStIvtStructattrService;
@Autowired
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
@Autowired
private IPmFormDataService iPmFormDataService;
@Override
@Transactional
@@ -57,23 +61,23 @@ public class OutStorageTask extends AbstractTask {
String target_point = from.getString("target_point");
//通过全局变量获取目标位置
String product_area = from.getString("product_area");
if (StringUtils.isEmpty(product_area)){
if (StringUtils.isEmpty(product_area)) {
JSONObject formData = from.getJSONObject("form_data");
if (!StringUtils.isEmpty(formData.getString("product_area"))){
if (!StringUtils.isEmpty(formData.getString("product_area"))) {
product_area = formData.getString("product_area");
}
}
if (StringUtils.isNotEmpty(product_area)){
if (StringUtils.isNotEmpty(product_area)) {
String configTarget;
if (vehicle_code.contains("T")){
configTarget = DictConstantPool.PRODUCT_OUT_POINT_TP.get(product_area);
}else {
configTarget = DictConstantPool.PRODUCT_OUT_POINT.get(product_area);
if (vehicle_code.contains("T")) {
configTarget = DictConstantPool.PRODUCT_OUT_POINT_TP.get(product_area);
} else {
configTarget = DictConstantPool.PRODUCT_OUT_POINT.get(product_area);
}
if (StringUtils.isEmpty(configTarget)){
if (StringUtils.isEmpty(configTarget)) {
throw new BadRequestException("创建任务失败:出库点车间点位对应关系配置异常");
}
target_point=configTarget;
target_point = configTarget;
}
if (StringUtils.isEmpty(vehicle_code) ||StringUtils.isEmpty(target_point)){
throw new BadRequestException("创建任务失败:方法请求参数不能为空");

View File

@@ -2,6 +2,7 @@ package org.nl.wms.dispatch_manage.task.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.nl.common.domain.entity.PageQuery;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -63,4 +64,7 @@ public interface ISchBaseTaskService extends IService<SchBaseTask> {
JSONObject errorTask(JSONObject param,String type);
JSONObject getIoSourceFormData(String vehicle_code, String pcsn);
}

View File

@@ -1,5 +1,6 @@
package org.nl.wms.dispatch_manage.task.service.dao.mapper;
import com.alibaba.fastjson.JSONObject;
import org.apache.ibatis.annotations.Select;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
@@ -24,4 +25,6 @@ public interface SchBaseTaskMapper extends BaseMapper<SchBaseTask> {
IPage<SchBaseTask> selectPageLeftJoin(IPage<SchBaseTask> pages, @Param("whereJson") SchBaseTaskQuery whereJson, @Param("collect") List<String> collect);
List<Map> getByVehicle(@Param("vehicles") List<String> vehicles);
JSONObject getIoSourceFormData(@Param("vehicle_code") String vehicle_code, @Param("pcsn") String pcsn);
}

View File

@@ -38,6 +38,17 @@
</where>
ORDER BY t.create_time DESC
</select>
<select id="getIoSourceFormData" resultType="com.alibaba.fastjson.JSONObject">
SELECT
st_ivt_iostorinvdtl.source_form_data
FROM
st_ivt_iostorinvdtl
LEFT JOIN st_ivt_iostorinv ON st_ivt_iostorinv.id = st_ivt_iostorinvdtl.inv_id
WHERE
vehicle_code = #{vehicle_code}
AND pcsn = #{pcsn}
AND st_ivt_iostorinv.STATUS <![CDATA[<]]> 80
</select>
<select id="getByVehicle" resultType="java.util.Map">
SELECT
md_pb_vehicleMater.*,

View File

@@ -1,17 +1,20 @@
package org.nl.wms.dispatch_manage.task.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpStatus;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.apache.commons.lang3.StringUtils;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.entity.PageQuery;
import org.nl.common.domain.exception.BadRequestException;
@@ -20,10 +23,9 @@ import org.nl.common.publish.BussEventMulticaster;
import org.nl.common.utils.*;
import org.nl.wms.dispatch_manage.task.handler.AbstractTask;
import org.nl.wms.dispatch_manage.task.handler.impl.MoveStorageTask;
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
import org.nl.wms.dispatch_manage.task.service.dao.mapper.SchBaseTaskMapper;
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.wms.dispatch_manage.task.service.dto.SchBaseTaskQuery;
import org.nl.wms.external_system.acs.service.WmsToAcsService;
import org.nl.wms.flow_manage.flow.framework.process.nodeType.excess.impl.DecisionHandler;
@@ -32,6 +34,8 @@ import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution;
import org.nl.wms.flow_manage.monitor.event.FlowContinueEvent;
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
import org.springframework.beans.factory.annotation.Autowired;
@@ -63,9 +67,10 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
@Autowired
@Lazy
private MoveStorageTask moveStorageTask;
@Autowired
private WmsToAcsService wmsToAcsService;
@Autowired
private IPmFormDataService iPmFormDataService;
@Override
public IPage<SchBaseTask> queryAll(SchBaseTaskQuery whereJson, PageQuery page) {
@@ -176,6 +181,26 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
.in("task_code", taskCodes));
}
}
} else if (param.getString("status").equals(StatusEnum.FORM_STATUS.code("取消"))) {
//出库任务空出取消ERP源单数量变更回去
List<MdPbVehicleMater> vehicleMaterList = iMdPbVehicleMaterService.list(
new QueryWrapper<MdPbVehicleMater>()
.eq("task_code", task.getTask_code()).eq("vehicle_code", task.getVehicle_code())
);
if (ObjectUtils.isNotEmpty(vehicleMaterList)) {
//查找未完成的出库单与明细
JSONObject formData = this.getIoSourceFormData(task.getVehicle_code(), vehicleMaterList.get(0).getPcsn());
if (formData != null) {
String formDataId = formData.getJSONObject("source_form_data").getString("id");
String qty = formData.getJSONObject("source_form_data").getString("qty");
if (StringUtils.isNotBlank(formDataId) && StringUtils.isNotBlank(qty)) {
iPmFormDataService.update(new LambdaUpdateWrapper<PmFormData>()
.set(PmFormData::getQty, qty)
.eq(PmFormData::getId, formDataId));
}
}
}
} else {
this.update(new UpdateWrapper<SchBaseTask>()
.set("status", param.getString("status"))
@@ -238,6 +263,11 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
return null;
}
public JSONObject getIoSourceFormData(String vehicle_code, String pcsn) {
return this.baseMapper.getIoSourceFormData(vehicle_code, pcsn);
}
private void moveTask(SchBaseTask task, String struct_code, StIvtStructattr stIvtStructattr) {
AtomicReference<String> moveStruct = new AtomicReference<>();
this.update(new UpdateWrapper<SchBaseTask>()

View File

@@ -6,11 +6,13 @@ import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.common.domain.exception.BadRequestException;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.RedissonUtils;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.flow_manage.flow.service.execution.IActRuExecutionService;
import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution;
@@ -18,9 +20,9 @@ import org.nl.wms.md_manage.group_dick.service.IMdGruopDickService;
import org.nl.wms.md_manage.group_dick.service.dao.MdGruopDick;
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.pda_manage.palletio.service.PalletIostorinvService;
import org.nl.wms.pm_manage.form_data.service.IPmFormDataService;
import org.nl.wms.pm_manage.form_data.service.dao.PmFormData;
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
import org.nl.wms.stor_manage.struct.service.dao.StIvtStructattr;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -30,6 +32,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.List;
/**
* <p>
@@ -47,10 +50,11 @@ public class IOStorageController {
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
@Autowired
private IActRuExecutionService iActRuExecutionService;
@Autowired
private IPmFormDataService iPmFormDataService;
@Autowired
private IMdGruopDickService iMdGruopDickService;
@Autowired
private IStIvtStructattrService iStIvtStructattrService;
@PostMapping("out")
@SaIgnore
@@ -60,16 +64,27 @@ public class IOStorageController {
MdPbVehicleMater one = iMdPbVehicleMaterService.getOne(new QueryWrapper<MdPbVehicleMater>()
.eq("vehicle_code", vehicle_code)
.eq("is_delete", false));
if (one!=null){
if (one != null) {
//校验料箱是否还存在库存
RedissonUtils.lock(() -> {
QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>()
.eq("is_used", true)
.eq("lock_type", StatusEnum.LOCK.code("无锁"))
.eq("vehicle_code", vehicle_code);
List<StIvtStructattr> list = iStIvtStructattrService.list(query);
if (ObjectUtils.isNotEmpty(list)) {
throw new BadRequestException(String.format("出库确认失败:当前载具号在立库的库位:%s中请检查!", list.get(0).getStruct_code()));
}
}, StatusEnum.STRATEGY_TYPE.code("出库") + vehicle_code, 5);
//流程校验
String proc_inst_id = one.getProc_inst_id();
if (!StringUtils.isEmpty(proc_inst_id)){
if (!StringUtils.isEmpty(proc_inst_id)) {
String parent_id = iActRuExecutionService.getParentByChild(proc_inst_id);
ActRuExecution ruExecution = iActRuExecutionService.getOne(new QueryWrapper<ActRuExecution>()
.eq("proc_inst_id",parent_id)
.eq("proc_inst_id", parent_id)
.lt("status", StatusEnum.FLOW_STATUS.code("完成")));
if (ruExecution!=null){
throw new BadRequestException(String.format("当前载具%s业务流程%s未完成",vehicle_code,parent_id));
if (ruExecution != null) {
throw new BadRequestException(String.format("当前载具%s业务流程%s未完成", vehicle_code, parent_id));
}
}
//单据校验"针对托盘库做条件判断