add:增加托盘倒库手持批量组盘;

生产入库托盘混托入库回传;
    发货通知单,销售出库单回传。
This commit is contained in:
2025-12-08 09:16:27 +08:00
parent 772309fab6
commit 3a8ca11b88
12 changed files with 325 additions and 88 deletions

View File

@@ -22,7 +22,7 @@ public enum StatusEnum {
/**
* 单据状态
*/
FORM_STATUS(ForkMap.of("生成", "10", null, "已分配", "13", null, "下发", "15", null, "执行中", "20", null, "暂停", "30", null, "完成", "80", null, "强制完成", "82", null, "取消", "90", null)),
FORM_STATUS(ForkMap.of("生成", "10", null, "已分配", "13", null, "下发", "15", null, "执行中", "20", null, "暂停", "30", null, "待回传", "40", null, "完成", "80", null, "强制完成", "82", null, "取消", "90", null)),
/**
* 出入库单据类型退货出库
@@ -45,7 +45,7 @@ public enum StatusEnum {
*/
ERP_TYPE(ForkMap.of("PRD_MO", "10", "生产订单", "PUR_ReceiveBill", "11", "收料通知单",
"SAL_SaleOrder", "12", "销售订单", "PRD_INSTOCK", "13", "生产入库单", "STK_InStock", "14", "采购入库单",
"SAL_RETURNSTOCK", "15", "销售退货入库单", "PUR_MRB", "18", "采购退料出库单",
"SAL_RETURNSTOCK", "15", "销售退货入库单", "SAL_OUTSTOCK", "16", "销售出库单", "PUR_MRB", "18", "采购退料出库单",
"SUB_PickMtrl", "19", "委外用料清单", "PRD_PPBOM", "20", "生产用料清单", "PRD_PickMtrl", "21", "生产领料单",
"SP_PickMtrl", "22", "简单生产领料单", "STK_TransferDirect", "23", "调拨出库单", "STK_MisDelivery", "26", "其他出库单", "PRD_ReturnMtrl", "27", "生产退料单", "PRD_FeedMtrl", "28", "生产补料单", "SUB_RETURNMTRL", "29", "委外退料单")),

View File

@@ -1,7 +1,9 @@
package org.nl.wms.decision_manage.handler.chainer.impl;
import cn.hutool.core.collection.CollectionUtil;
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 com.github.javaparser.utils.Log;
import lombok.Data;
@@ -11,6 +13,8 @@ import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.SpringContextHolder;
import org.nl.wms.decision_manage.handler.chainer.DecisionerChain;
import org.nl.wms.dispatch_manage.task.service.ISchBaseTaskService;
import org.nl.wms.dispatch_manage.task.service.dao.SchBaseTask;
import org.nl.wms.md_manage.vehicleMater.service.IMdPbVehicleMaterService;
import org.nl.wms.md_manage.vehicleMater.service.dao.MdPbVehicleMater;
import org.nl.wms.stor_manage.struct.service.IStIvtStructattrService;
@@ -55,9 +59,20 @@ public class EndDecisionChainer extends DecisionerChain<List> {
boolean in_storage = StatusEnum.STRATEGY_TYPE.code("入库").equals(strategy_type);
IStIvtStructattrService iStIvtStructattrService = SpringContextHolder.getBean(IStIvtStructattrService.class);
IMdPbVehicleMaterService iMdPbVehicleMaterService = SpringContextHolder.getBean(IMdPbVehicleMaterService.class);
ISchBaseTaskService iSchBaseTaskService = SpringContextHolder.getBean(ISchBaseTaskService.class);
List<String> structs = new ArrayList<>();
//入库分配
if (in_storage) {
//混托任务判断
if (startParam.getString("vehicle_code").contains("T")) {
List<SchBaseTask> schBaseTaskList = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>()
.eq("vehicle_code", startParam.getString("vehicle_code")).select("point_code2")
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
if (CollectionUtil.isNotEmpty(schBaseTaskList)) {
structs.add(schBaseTaskList.get(0).getPoint_code2());
return structs;
}
}
StIvtStructattr struct = (StIvtStructattr) transfers.get(0);
UpdateWrapper<StIvtStructattr> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("lock_type", StatusEnum.LOCK.code("入库锁"))

View File

@@ -70,11 +70,12 @@ public class GroupDickInStorageTask extends AbstractTask {
}
String groupId = item.get(0).getGroup_id();
MdGruopDick mst = iMdGruopDickService.getById(groupId);
SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>()
.eq("vehicle_code", vehicle_code).select("task_code")
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
if (schBaseTask != null) {
throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + schBaseTask.getTask_code());
List<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
.lt("status", StatusEnum.FORM_STATUS.code("完成")).select("vehicle_code"));
if (!CollectionUtils.isEmpty(list)){
if (!list.get(0).getVehicle_code().contains("T")) {
throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + list.get(0).getTask_code());
}
}
JSONObject mstJ = (JSONObject) JSONObject.toJSON(mst);
MdPbVehicleMaterVo vehicleMater = item.get(0);

View File

@@ -53,16 +53,20 @@ public class InStorageTask extends AbstractTask {
if (StringUtils.isEmpty(vehicle_code) ||StringUtils.isEmpty(start_point)||StringUtils.isEmpty(struct_code)){
throw new BadRequestException("创建任务失败:方法请求参数不能为空");
}
List<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException("当前载具存在任务:"+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
}
SchBaseTask task = new SchBaseTask();
task.setStatus(StatusEnum.FORM_STATUS.code("生成"));
List<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
.lt("status", StatusEnum.FORM_STATUS.code("完成")).select("vehicle_code"));
if (!CollectionUtils.isEmpty(list)){
if (!list.get(0).getVehicle_code().contains("T")) {
throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + list.get(0).getTask_code());
}else {
task.setStatus(StatusEnum.FORM_STATUS.code("待回传"));
}
}
task.setId(IdUtil.getStringId());
task.setSource_form_id(from.getString("id"));
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setStatus(StatusEnum.FORM_STATUS.code("生成"));
task.setHandle_class(this.getClass().getName());
task.setAcs_type(StatusEnum.ACS_TYPE.code("立库"));
task.setCreate_time(DateUtil.now());

View File

@@ -29,7 +29,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
@@ -82,58 +84,80 @@ public class PalletInStorageTask extends AbstractTask {
if (CollectionUtils.isEmpty(item)) {
throw new BadRequestException("申请任务失败:载具" + vehicle_code + "载具物料信息信息不存在");
}
MdPbVehicleMaterVo vehicleMaterVo = item.get(0);
String remark = vehicleMaterVo.getRemark();
String isCheck = StringUtils.isNotBlank(vehicleMaterVo.getIs_check()) ? "1" : vehicleMaterVo.getIs_check();
if ("空托盘入库".equals(remark)) {
iBmVehicleInfoService.update(new UpdateWrapper<BmVehicleInfo>()
.set("h", Integer.valueOf(h))
.set("update_time", DateUtil.now())
.set("update_name", "ACS托盘入库申请")
.eq("vehicle_code", vehicle_code));
MdPbVehicleMaterVo vehicleMater = item.get(0);
//拣选回库流程
BussEventMulticaster.Publish(
new FlowStartEvent("pallet_in",
(proc_inst_id,empPlace) -> iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
.set("proc_inst_id",proc_inst_id)
.eq("vehicle_code",vehicle_code)
.eq("is_delete",false))
,new JSONObject(MapOf.of("start_point", point_code1)))
.build("md_pb_vehicleMater",vehicleMater.getId(),null,null, (JSONObject) JSONObject.toJSON(vehicleMater))
);
}else {
String groupId = vehicleMaterVo.getGroup_id();
MdGruopDick mst = iMdGruopDickService.getById(groupId);
if (mst == null) {
throw new BadRequestException("申请任务失败,载具没有组盘信息!");
List<MdPbVehicleMaterVo> newVehicleMater =new ArrayList<>();
//混托任务判断
if (item.get(0).getVehicle_code().contains("T")&&item.size() > 1) {
newVehicleMater= item.stream().filter(r -> r.getNeed_pick() == null || !r.getNeed_pick()).collect(Collectors.toList());
if (newVehicleMater.size() ==item.size()) {
newVehicleMater.get(0).setNeed_pick(true);
}else{
item.stream().filter(r -> r.getNeed_pick() != null && r.getNeed_pick()).findFirst().ifPresent(newVehicleMater::add);
}
SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>()
.eq("vehicle_code", vehicle_code).select("task_code")
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
if (schBaseTask != null) {
throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + schBaseTask.getTask_code());
}
iBmVehicleInfoService.update(new UpdateWrapper<BmVehicleInfo>()
.set("h", Integer.valueOf(h))
.set("update_time", DateUtil.now())
.set("update_name", "ACS托盘入库申请")
.eq("vehicle_code",vehicle_code));
JSONObject mstJ = (JSONObject) JSONObject.toJSON(mst);
MdPbVehicleMaterVo vehicleMater = vehicleMaterVo;
mstJ.put("stor_code", vehicleMater.getStor_code());
BussEventMulticaster.Publish(
new FlowStartEvent("md_group",
(proc_inst_id, empPlace) -> iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
.set("proc_inst_id", proc_inst_id)
.eq("vehicle_code", vehicle_code)
.eq("is_delete", false))
, new JSONObject(MapOf.of("start_point", point_code1, "isCheck", isCheck)))
.build("md_group_dick", mst.getId(), mst.getSource_form_type(), mst.getSource_form_id(), mstJ)
.build("md_pb_vehicleMater", item)
);
} else {
newVehicleMater = item;
}
newVehicleMater.forEach(r -> {
String remark = r.getRemark();
String isCheck = StringUtils.isNotBlank(r.getIs_check()) ? "1" : r.getIs_check();
if ("空托盘入库".equals(remark)) {
iBmVehicleInfoService.update(new UpdateWrapper<BmVehicleInfo>()
.set("h", Integer.valueOf(h))
.set("update_time", DateUtil.now())
.set("update_name", "ACS托盘入库申请")
.eq("vehicle_code", vehicle_code));
MdPbVehicleMaterVo vehicleMater = item.get(0);
//拣选回库流程
BussEventMulticaster.Publish(
new FlowStartEvent("pallet_in",
(proc_inst_id, empPlace) -> iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
.set("proc_inst_id", proc_inst_id)
.eq("vehicle_code", vehicle_code)
.eq("is_delete", false))
, new JSONObject(MapOf.of("start_point", point_code1)))
.build("md_pb_vehicleMater", vehicleMater.getId(), null, null, (JSONObject) JSONObject.toJSON(vehicleMater))
);
} else {
String groupId = r.getGroup_id();
MdGruopDick mst = iMdGruopDickService.getById(groupId);
if (mst == null) {
throw new BadRequestException("申请任务失败,载具没有组盘信息!");
}
List<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
.lt("status", StatusEnum.FORM_STATUS.code("完成")).select("vehicle_code"));
if (!CollectionUtils.isEmpty(list)) {
if (!list.get(0).getVehicle_code().contains("T")) {
throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + list.get(0).getTask_code());
}
}
// SchBaseTask schBaseTask = iSchBaseTaskService.getOne(new QueryWrapper<SchBaseTask>()
// .eq("vehicle_code", vehicle_code).select("task_code","vehicle_code")
// .lt("status", StatusEnum.FORM_STATUS.code("完成")));
// if (schBaseTask != null) {
// if (!schBaseTask.getVehicle_code().contains("T")) {
// throw new BadRequestException("申请任务失败:载具" + vehicle_code + "已经存任务" + schBaseTask.getTask_code());
// }
// }
iBmVehicleInfoService.update(new UpdateWrapper<BmVehicleInfo>()
.set("h", Integer.valueOf(h))
.set("update_time", DateUtil.now())
.set("update_name", "ACS托盘入库申请")
.eq("vehicle_code", vehicle_code));
JSONObject mstJ = (JSONObject) JSONObject.toJSON(mst);
MdPbVehicleMaterVo vehicleMater = r;
mstJ.put("stor_code", vehicleMater.getStor_code());
BussEventMulticaster.Publish(
new FlowStartEvent("md_group",
(proc_inst_id, empPlace) -> iMdPbVehicleMaterService.update(new UpdateWrapper<MdPbVehicleMater>()
.set("proc_inst_id", proc_inst_id)
.eq("vehicle_code", vehicle_code)
.eq("is_delete", false))
, new JSONObject(MapOf.of("start_point", point_code1, "isCheck", isCheck)))
.build("md_group_dick", mst.getId(), mst.getSource_form_type(), mst.getSource_form_id(), mstJ)
.build("md_pb_vehicleMater", item)
);
}
});
List<SchBaseTask> list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", vehicle_code)
.lt("status", StatusEnum.FORM_STATUS.code("完成")));
if (ObjectUtils.isNotEmpty(list)) {

View File

@@ -98,7 +98,6 @@ public class FormActivityBehavior extends FlowNodeActivityBehavior<JSONObject> {
mst_json.put("source_form_type",handler.getString("source_form_type"));
StIvtIostorinv mst = mst_json.toJavaObject(StIvtIostorinv.class);
handler.put("form_id",mst.getId());
JSONArray itemArr = handler.getJSONArray("item");
if(itemArr !=null){
for (int i = 0; i < itemArr.size(); i++) {

View File

@@ -79,6 +79,19 @@ public class MdGruopDickController {
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
}
@PostMapping("/mixingGroupDick")
@Log("托盘混料组盘")
@SaIgnore
public ResponseEntity<Object> mixingGroupDick(@RequestBody MaterGroupDto dicks) {
RedissonUtils.lock(() -> {
iMdGruopDickService.mixingGroupDick((JSONObject) JSONObject.toJSON(dicks));
}, "托盘混料组盘", null);
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
}
@PostMapping
@Log("人工组盘入库")
@SaIgnore

View File

@@ -27,6 +27,10 @@ public interface IMdGruopDickService extends IService<MdGruopDick> {
Object queryAll(GroupDickQuery query, PageQuery page);
void groupDick(JSONObject form);
void mixingGroupDick(JSONObject form);
void delete(@RequestBody String[] ids);

View File

@@ -63,6 +63,7 @@ import java.util.stream.Collectors;
@Service
public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGruopDick> implements IMdGruopDickService {
@Autowired
private IMdPbVehicleMaterService iMdPbVehicleMaterService;
@Autowired
@@ -121,6 +122,118 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
return build;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void mixingGroupDick(JSONObject forms) {
List<Map> tableData = (List) forms.remove("item");
String vehicleCode = forms.getString("vehicle_code");
if (CollectionUtils.isEmpty(forms)) {
throw new BadRequestException("组盘失败:入库明细数据不能为空");
}
if (StringUtils.isBlank(vehicleCode)) {
throw new BadRequestException("组盘失败:载具" + vehicleCode + "信息不能为空!");
}
if (!vehicleCode.contains("T")) {
throw new BadRequestException("组盘失败:载具" + vehicleCode + "不是托盘,不能进行混料组盘!");
}
BmVehicleInfo vehicleInfo = iBmVehicleInfoService.vehileInfo(vehicleCode);
if (vehicleInfo == null) {
throw new BadRequestException("组盘失败:载具" + vehicleCode + "信息不存在请在载具信息中维护");
}
Integer h = vehicleInfo.getH();
RedissonUtils.lock(() -> {
//组盘前库存校验
QueryWrapper<StIvtStructattr> ivtList = new QueryWrapper<StIvtStructattr>()
.eq("vehicle_code", vehicleInfo.getVehicle_code());
List<StIvtStructattr> existList = iStIvtStructattrService.list(ivtList);
if (ObjectUtils.isNotEmpty(existList)) {
throw new BadRequestException(String.format("组盘失败:当前载具号在立库的库位中未出库:%s中请核查库存记录!", existList.get(0).getStruct_code()));
}
if (!vehicleInfo.getVehicle_code().contains("T")) {
//组盘前符合条件库位数量校验
QueryWrapper<StIvtStructattr> query = new QueryWrapper<StIvtStructattr>()
.eq("is_used", true)
.eq("lock_type", StatusEnum.LOCK.code("无锁"))
.eq("stor_code", forms.getString("stor_code"))
.isNull("vehicle_code");
if (h != null) {
query.ge("h", h);
}
int structCount = iStIvtStructattrService.count(query);
if (structCount < DictConstantPool.STRUCT_COUNT) {
throw new BadRequestException("入库失败:当前仓库可用库位小于" + DictConstantPool.STRUCT_COUNT);
}
}
}, StatusEnum.STRATEGY_TYPE.code("入库") + forms.getString("stor_code"), 5);
String now = DateUtil.now();
forms.put("create_name", SecurityUtils.getCurrentNickName());
forms.put("create_time", now);
forms.put("status", StatusEnum.FORM_STATUS.code("生成"));
List<MdPbVehicleMater> vehicleMaters = new ArrayList<>();
Map<String, MdGruopDick> map = new HashMap<>();
if (!CollectionUtils.isEmpty(forms)) {
//父级组盘
MdGruopDick mdGruopDick = new MdGruopDick();
String groupDick = null;
List<MdPbVehicleMater> tmpCount = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
.eq("is_delete", false)
.in("vehicle_code", forms.getString("vehicle_code")));
if (tmpCount.size() > 0) {
groupDick = tmpCount.get(0).getGroup_id();
mdGruopDick.setStatus(StatusEnum.FORM_STATUS.code("完成"));
mdGruopDick.setUpdate_name(SecurityUtils.getCurrentNickName());
mdGruopDick.setUpdate_time(now);
mdGruopDick.setForm_data(forms.getJSONObject("form_data"));
} else {
MdGruopDick dick = forms.toJavaObject(MdGruopDick.class);
dick.setVehicle_code(vehicleCode);
dick.setCode(CodeUtil.getNewCode("md_group_dick"));
dick.setId(IdUtil.getStringId());
groupDick = dick.getId();
dick.setStatus(StatusEnum.FORM_STATUS.code("完成"));
dick.setCreate_name(SecurityUtils.getCurrentNickName());
dick.setCreate_time(now);
dick.setForm_data(forms.getJSONObject("form_data"));
map.put(vehicleCode, dick);
}
for (int i = 0; i < tableData.size(); i++) {
Map itemMap = tableData.get(i);
JSONObject item = new JSONObject(itemMap);
//子级组盘
MdPbVehicleMater vehicleMater = item.toJavaObject(MdPbVehicleMater.class);
vehicleMater.setGroup_id(groupDick);
vehicleMater.setVehicle_code(vehicleCode);
vehicleMater.setUnit_id("100438");//个
vehicleMater.setStor_code(vehicleCode.toUpperCase().contains("T") ? "FStockPallet" : "FStockId");
vehicleMater.setId(IdUtil.getStringId());
vehicleMater.setCreate_time(now);
vehicleMater.setCreate_name(SecurityUtils.getCurrentNickName());
vehicleMaters.add(vehicleMater);
}
}
boolean count = vehicleMaters.stream()
.filter(vm -> vm.getVehicle_code() != null && vm.getVehicle_code().contains("T"))
//按载具和物料分组
.collect(Collectors.groupingBy(
vm -> vm.getVehicle_code() + "_" + vm.getMaterial_id(),
Collectors.mapping(MdPbVehicleMater::getPcsn, Collectors.toSet())
))
.values().stream()
.anyMatch(pcsnSet -> pcsnSet.size() > 1);
if (count) {
throw new BadRequestException("组盘失败,原因:同一个载具存在相同物料不同批次的数据,相同物料不同批次不符合混料组盘,请检查或分开组盘!");
}
//参数校验
// List<MdGruopDick> tmpCount2 = this.list(new QueryWrapper<MdGruopDick>().in("vehicle_code", map.keySet()).lt("status", StatusEnum.FORM_STATUS.code("完成")));
// if (tmpCount2.size() > 0) {
// throw new BadRequestException("组盘失败:当前载具存在未完成的组盘信息" + tmpCount2.stream().map(MdGruopDick::getVehicle_code).collect(Collectors.joining(",")));
// }
this.saveBatch(map.values());
iMdPbVehicleMaterService.saveBatch(vehicleMaters);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void groupDick(JSONObject forms) {
@@ -172,8 +285,11 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
String vehicle_code = item.getString("vehicle_code");
MdPbVehicleMater vehicleMater = item.toJavaObject(MdPbVehicleMater.class);
MdGruopDick mdGruopDick = map.get(vehicle_code);
if (mdGruopDick ==null){
if (mdGruopDick == null) {
MdGruopDick dick = forms.toJavaObject(MdGruopDick.class);
if (dick == null) {
dick = new MdGruopDick();
}
dick.setVehicle_code(vehicle_code);
dick.setCode(CodeUtil.getNewCode("md_group_dick"));
dick.setId(IdUtil.getStringId());
@@ -181,7 +297,7 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
dick.setCreate_name(SecurityUtils.getCurrentNickName());
dick.setCreate_time(now);
dick.setForm_data(forms.getJSONObject("form_data"));
map.put(vehicle_code,dick);
map.put(vehicle_code, dick);
vehicleMater.setGroup_id(dick.getId());
}else {
vehicleMater.setGroup_id(mdGruopDick.getId());
@@ -196,27 +312,50 @@ public class MdGruopDickServiceImpl extends ServiceImpl<MdGruopDickMapper, MdGru
vehicleMaters.add(vehicleMater);
}
}
//参数校验
List<MdGruopDick> tmpCount2= this.list(new QueryWrapper<MdGruopDick>().in("vehicle_code", map.keySet()).lt("status", StatusEnum.FORM_STATUS.code("完成")));
if (tmpCount2.size()>0){
throw new BadRequestException("组盘失败:当前载具存在未完成的组盘信息"+tmpCount2.stream().map(MdGruopDick::getVehicle_code).collect(Collectors.joining(",")));
}
int tmpCount = iBmVehicleInfoService.count(new QueryWrapper<BmVehicleInfo>().in("vehicle_code", map.keySet()));
if (tmpCount<map.size()){
throw new BadRequestException("组盘失败:载具编号不存在");
}
List<MdPbVehicleMater> tmpCount1 = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
.eq("is_delete",false)
.in("vehicle_code", map.keySet()));
if (tmpCount1.size()>0){
//托盘组盘校验
List<MdPbVehicleMater> collect = tmpCount1.stream().filter(mdPbVehicleMater -> mdPbVehicleMater.getNeed_pick()&&mdPbVehicleMater.getVehicle_code().contains("T")).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(collect)) {
String vehicles = collect.stream().map(MdPbVehicleMater::getVehicle_code).collect(Collectors.joining(","));
throw new BadRequestException("载具" + vehicles + "为拣选回库无需组盘");
//混托不校验
if (!vehicle0.contains("T")) {
List<MdGruopDick> tmpCount2 = this.list(new QueryWrapper<MdGruopDick>().in("vehicle_code", map.keySet()).lt("status", StatusEnum.FORM_STATUS.code("完成")));
if (tmpCount2.size() > 0) {
throw new BadRequestException("组盘失败:当前载具存在未完成的组盘信息" + tmpCount2.stream().map(MdGruopDick::getVehicle_code).collect(Collectors.joining(",")));
}
} else {
//参数校验
int tmpCount = iBmVehicleInfoService.count(new QueryWrapper<BmVehicleInfo>().in("vehicle_code", map.keySet()));
if (tmpCount < map.size()) {
throw new BadRequestException("组盘失败:载具编号不存在");
}
List<MdPbVehicleMater> checkMaterList = new ArrayList<>(vehicleMaters);
List<MdPbVehicleMater> vehicleMaterList = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
.eq("is_delete", false)
.eq("vehicle_code", vehicle0));
if (ObjectUtils.isNotEmpty(vehicleMaterList)) {
checkMaterList.addAll(vehicleMaterList);
}
boolean count = checkMaterList.stream()
.filter(vm -> vm.getVehicle_code() != null && vm.getVehicle_code().contains("T"))
//按载具和物料分组
.collect(Collectors.groupingBy(
vm -> vm.getVehicle_code() + "_" + vm.getMaterial_id(),
Collectors.mapping(MdPbVehicleMater::getPcsn, Collectors.toSet())
))
.values().stream()
.anyMatch(pcsnSet -> pcsnSet.size() > 1);
if (count) {
throw new BadRequestException("组盘失败!原因:该托盘存在物料编码相同但批次不同的数据,相同物料不同批次不符合混料组盘,请检查或分开组盘!");
}
throw new BadRequestException("组盘失败:载具已经存在组盘信息" + tmpCount1.stream().map(MdPbVehicleMater::getVehicle_code).collect(Collectors.joining(",")));
}
// List<MdPbVehicleMater> tmpCount1 = iMdPbVehicleMaterService.list(new QueryWrapper<MdPbVehicleMater>()
// .eq("is_delete",false)
// .in("vehicle_code", map.keySet()));
// if (tmpCount1.size()>0){
// //托盘组盘校验
// List<MdPbVehicleMater> collect = tmpCount1.stream().filter(mdPbVehicleMater -> mdPbVehicleMater.getNeed_pick()&&mdPbVehicleMater.getVehicle_code().contains("T")).collect(Collectors.toList());
// if (!CollectionUtils.isEmpty(collect)) {
// String vehicles = collect.stream().map(MdPbVehicleMater::getVehicle_code).collect(Collectors.joining(","));
// throw new BadRequestException("载具" + vehicles + "为拣选回库无需组盘");
// }
// throw new BadRequestException("组盘失败:载具已经存在组盘信息" + tmpCount1.stream().map(MdPbVehicleMater::getVehicle_code).collect(Collectors.joining(",")));
// }
this.saveBatch(map.values());
iMdPbVehicleMaterService.saveBatch(vehicleMaters);
}

View File

@@ -11,7 +11,10 @@ import java.util.List;
@Data
public class MaterGroupDto {
/**
* 载具编号
*/
private String vehicle_code;
/**
* 仓库编码
*/

View File

@@ -45,7 +45,7 @@ public class PdaInController {
public ResponseEntity<TableDataInfo> confirm(@RequestBody PdaFormInMst pdaFormInMst) {
RedissonUtils.lock(() -> {
pdaInIOService.pdaInIostorUseCode(pdaFormInMst);
}, pdaFormInMst.getBillNo(), null);
}, "合格证入库", null);
return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK);
}

View File

@@ -40,6 +40,40 @@ public class PdaInIOService {
* 回传代码
*/
public void pdaInIostorUseCode(PdaFormInMst mst) {
// if (CollectionUtils.isEmpty(mstList)) {
// throw new BadRequestException("组盘信息为空,请检查!");
// }
// if (mstList.get(0).getVehicle_code().contains("T")) {
// boolean count = mstList.stream()
// .filter(vm -> vm.getVehicle_code() != null && vm.getVehicle_code().contains("T"))
// .collect(Collectors.groupingBy(
// vm -> vm.getVehicle_code() + "_" + vm.getMaterial_id(),
// Collectors.mapping(PdaFormInMst::getPcsn, Collectors.toSet())
// ))
// .values().stream()
// .anyMatch(pcsnSet -> pcsnSet.size() > 1);
// if (count) {
// throw new BadRequestException("组盘失败,原因:同一个载具存在相同物料不同批次的数据,相同物料不同批次不符合混料组盘,请检查或分开组盘!");
// }
// } else {
// if (mstList.size() > 1) {
// throw new BadRequestException("组盘失败,原因:料箱组盘只能放入一种物料!");
// }
// }
// mstList.forEach(mst -> {
if (mst.getVehicle_code().contains("T")) {
// boolean count = mstList.stream()
// .filter(vm -> vm.getVehicle_code() != null && vm.getVehicle_code().contains("T"))
// .collect(Collectors.groupingBy(
// vm -> vm.getVehicle_code() + "_" + vm.getMaterial_id(),
// Collectors.mapping(PdaFormInMst::getPcsn, Collectors.toSet())
// ))
// .values().stream()
// .anyMatch(pcsnSet -> pcsnSet.size() > 1);
// if (count) {
// throw new BadRequestException("组盘失败,原因:同一个载具存在相同物料不同批次的数据,相同物料不同批次不符合混料组盘,请检查或分开组盘!");
// }
}
String materialId = mst.getMaterial_id();
String vehicleCode = mst.getVehicle_code();
String unitId = mst.getUnit_id();
@@ -79,7 +113,7 @@ public class PdaInIOService {
throw new BadRequestException("入库失败物料单位ID在系统中不存在");
}
BmVehicleInfo vehicleInfo = iBmVehicleInfoService.vehileInfo(vehicleCode);
if (vehicleInfo==null){
if (vehicleInfo == null) {
throw new BadRequestException("入库失败,载具编码在基础信息中不存在");
}
groupDto.setSource_form_type(mst.getForm_type());
@@ -102,6 +136,7 @@ public class PdaInIOService {
materItem.setForm_data(groupItemData);
groupDto.setItem(ListOf.of(materItem));
iMdGruopDickService.groupDick((JSONObject) JSONObject.toJSON(groupDto));
// });
}