opt:优化CTU出入库功能;

This commit is contained in:
2025-11-14 13:38:37 +08:00
parent 3d038430f3
commit a65125c8a1
32 changed files with 352 additions and 124 deletions

View File

@@ -49,6 +49,10 @@
material.material_code LIKE #{param.material_code}
</if>
<if test="param.material_name != null and param.material_name != ''">
AND
material.material_name LIKE CONCAT('%', #{param.material_name}, '%')
</if>
<if test="param.pcsn != null and param.pcsn != ''">
AND
ext.pcsn = #{param.pcsn}
@@ -271,6 +275,6 @@
ext.pcsn LIKE #{params.pcsn}
</if>
</where>
ORDER BY ext.create_time
ORDER BY ext.create_time LIMIT 10
</select>
</mapper>

View File

@@ -21,6 +21,7 @@
LEFT JOIN md_me_materialbase mater ON mater.material_id = gro.material_id
<where>
gro.frozen_qty = 0
AND gro.qty > 0
<if test="search != null and search != ''">
and (mater.material_code LIKE '%${search}%'
or mater.material_name LIKE '%${search}%')
@@ -48,7 +49,7 @@
</if>
<if test="is_lock != null and is_lock != ''">
and ivt.lock_type = '0'
and ivt.is_used = '1'
</if>
<if test="order_by != null and order_by != ''">
order by ${order_by}

View File

@@ -142,9 +142,9 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
/**
* 物料导入
*/
//@Override
// @Override
@Transactional
public void excelImport99(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
public void excelImport2123(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
try {
InputStream inputStream = file.getInputStream();
ExcelReader excelReader = ExcelUtil.getReader(inputStream);
@@ -154,10 +154,10 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
for (int i = 1; i < read.size(); i++) {
List<Object> list = read.get(i);
String m1 = String.valueOf(list.get(0));
String m2 = String.valueOf(list.get(1));
String m2 = ObjectUtil.isEmpty(list.get(1)) ? "未知物料名称待补充" : String.valueOf(list.get(1));
String m3 = ObjectUtil.isEmpty(list.get(2)) ? null : String.valueOf(list.get(2));
String m4 = ObjectUtil.isEmpty(list.get(3)) ? null : String.valueOf(list.get(3));
String m5 = ObjectUtil.isEmpty(list.get(4)) ? null : String.valueOf(list.get(4));
//String m4 = ObjectUtil.isEmpty(list.get(3)) ? null : String.valueOf(list.get(3));
//String m5 = ObjectUtil.isEmpty(list.get(4)) ? null : String.valueOf(list.get(4));
// 根据物料编码查询是否有相同物料编码的物料
MdMeMaterialbase mdMeMaterialbase = this.baseMapper.selectOne(
new QueryWrapper<MdMeMaterialbase>().lambda()
@@ -171,8 +171,8 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
dao.setMaterial_code(m1);
dao.setMaterial_name(m2);
dao.setMaterial_spec(m3);
dao.setMaterial_model(m4);
dao.setBase_unit_id(m5);
//dao.setMaterial_model(m4);
dao.setBase_unit_id("1");
dao.setIs_used("1");
dao.setIs_delete("0");
dao.setCreate_id(SecurityUtils.getCurrentUserId());
@@ -196,6 +196,7 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
@Override
@Transactional
public void excelImport(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
Integer in = 1;
try {
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
@@ -205,6 +206,10 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
List<List<Object>> read = excelReader.read();
if (read.size() > 1) {
for (int i = 1; i < read.size(); i++) {
in = i;
if (i == 280) {
int a = 0;
}
List<Object> list = read.get(i);
if (ObjectUtil.isEmpty(list.get(1)) || ObjectUtil.isEmpty(list.get(4)) || ObjectUtil.isEmpty(list.get(5)) || ObjectUtil.isEmpty(list.get(6))) {
if (ObjectUtil.isEmpty(list.get(1))) {
@@ -214,7 +219,7 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
throw new BadRequestException("" + i + "行,库位编号不能为空,请检查。");
}
if (ObjectUtil.isEmpty(list.get(5))) {
throw new BadRequestException("" + i + "行,托盘编号不能为空,请检查。");
throw new BadRequestException("" + i + "行,载具编号不能为空,请检查。");
}
if (ObjectUtil.isEmpty(list.get(6))) {
throw new BadRequestException("" + i + "行,库存数量不能为空,请检查。");
@@ -229,8 +234,20 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
if (ObjectUtil.isEmpty(mdMeMaterialbase)) {
throw new BadRequestException("" + i + "行,物料编码不存在【" + m1 + "】,请检查。");
}
Integer m4 = Integer.parseInt(String.valueOf(list.get(6)).trim());
if (m4 == 0) {
m4 = 1;
m1 = "KL001";
mdMeMaterialbase = this.baseMapper.selectOne(
new QueryWrapper<MdMeMaterialbase>().lambda()
.eq(MdMeMaterialbase::getMaterial_code, m1)
);
}
//库位编号
String m2 = String.valueOf(list.get(4)).trim();
if (!m2.contains("L")) {
m2 = "L" + m2;
}
Structattr structattr = iStructattrService.getOne(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getStruct_code, m2)
@@ -240,23 +257,42 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
}
//托盘编号
String m3 = String.valueOf(list.get(5)).trim();
MdPbStoragevehicleinfo mdPbStoragevehicleinfo = iMdPbStoragevehicleinfoService.getOne(new LambdaQueryWrapper<>(MdPbStoragevehicleinfo.class)
if (!m3.contains("LX")) {
m3 = "28LX" + m3;
}
List<MdPbStoragevehicleinfo> mdPbStoragevehicleinfo = iMdPbStoragevehicleinfoService.list(new LambdaQueryWrapper<>(MdPbStoragevehicleinfo.class)
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code, m3)
);
if (ObjectUtil.isEmpty(mdPbStoragevehicleinfo)) {
throw new BadRequestException("" + i + "行,托盘编号不存在【" + m3 + "】,请检查。");
MdPbStoragevehicleinfo dao = new MdPbStoragevehicleinfo();
dao.setStoragevehicle_id(IdUtil.getStringId());
dao.setStoragevehicle_code(m3);
dao.setStoragevehicle_name("料箱");
dao.setCreate_id("1");
dao.setCreate_name("admin");
dao.setCreate_time(DateUtil.now());
dao.setUpdate_optid("1");
dao.setUpdate_optname("admin");
dao.setOccupystruct_qty(BigDecimal.valueOf(1L));
dao.setOverstruct_type("00");
dao.setUpdate_time(DateUtil.now());
dao.setIs_delete("0");
dao.setIs_used("1");
dao.setStoragevehicle_type("2");
iMdPbStoragevehicleinfoService.save(dao);
}
List<GroupPlate> groupPlateList = iMdPbGroupplateService.list(
new LambdaQueryWrapper<GroupPlate>()
.eq(GroupPlate::getStoragevehicle_code, mdPbStoragevehicleinfo.getStoragevehicle_code())
.eq(GroupPlate::getMaterial_id, mdMeMaterialbase.getMaterial_id())
.lt(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
);
if (ObjectUtils.isNotEmpty(groupPlateList)) {
continue;
if (!ObjectUtil.isEmpty(mdPbStoragevehicleinfo)) {
List<GroupPlate> groupPlateList = iMdPbGroupplateService.list(
new LambdaQueryWrapper<GroupPlate>()
.eq(GroupPlate::getStoragevehicle_code, mdPbStoragevehicleinfo.get(0).getStoragevehicle_code())
.eq(GroupPlate::getMaterial_id, mdMeMaterialbase.getMaterial_id())
.lt(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
);
if (ObjectUtils.isNotEmpty(groupPlateList)) {
continue;
}
}
//物料数量
Integer m4 = Integer.parseInt(String.valueOf(list.get(6)).trim());
JSONObject whereJson = new JSONObject();
JSONArray dataArray = new JSONArray();
JSONObject item = new JSONObject();
@@ -271,7 +307,7 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
whereJson.put("pcsn", "");
whereJson.put("qty", m4);
whereJson.put("nonClear", "1");
whereJson.put("vehicle_code", mdPbStoragevehicleinfo.getStoragevehicle_code());
whereJson.put("vehicle_code", m3);
whereJson.put("groupStatus", IOSEnum.GROUP_PLATE_STATUS.code("入库"));
whereJson.put("remark", "该库存通过仓库数据初始化进行仓库盘点,手动导入库存。");
pdaIosInService.groupPlate(whereJson);
@@ -282,17 +318,18 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
);
if (struct == null) {
iStructattrService.update(new LambdaUpdateWrapper<>(Structattr.class)
.set(Structattr::getStoragevehicle_code, mdPbStoragevehicleinfo.getStoragevehicle_code())
.set(Structattr::getStoragevehicle_code, m3)
.set(Structattr::getUpdate_optid, currentUserId)
.set(Structattr::getUpdate_optname, nickName)
.set(Structattr::getUpdate_time, now)
.set(Structattr::getIs_used, 1)
.eq(Structattr::getStruct_id, structattr.getStruct_id())
);
}
}
}
} catch (Exception ex) {
throw new BadRequestException("导入失败" + ex.getMessage());
throw new BadRequestException("导入失败" + ex.getMessage() + ":" + in);
}
}
@@ -498,9 +535,9 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
/**
* 载具
*/
//@Override
// @Override
@Transactional
public void excelImport8(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
public void excelImport2122(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
try {
List<MdPbStoragevehicleinfo> insertList = new ArrayList<>();
InputStream inputStream = file.getInputStream();
@@ -510,10 +547,19 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
for (int i = 1; i < read.size(); i++) {
List<Object> list = read.get(i);
String m1 = String.valueOf(list.get(0));
if (!m1.contains("LX")) {
m1 = "28LX" + m1;
}
List<MdPbStoragevehicleinfo> groupPlateList = iMdPbStoragevehicleinfoService.list(
new LambdaQueryWrapper<MdPbStoragevehicleinfo>()
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code, m1));
if (ObjectUtils.isNotEmpty(groupPlateList)) {
continue;
}
MdPbStoragevehicleinfo dao = new MdPbStoragevehicleinfo();
dao.setStoragevehicle_id(IdUtil.getStringId());
dao.setStoragevehicle_code(m1);
dao.setStoragevehicle_name("货架");
dao.setStoragevehicle_name("料箱");
dao.setCreate_id("1");
dao.setCreate_name("admin");
dao.setCreate_time(DateUtil.now());
@@ -524,7 +570,7 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
dao.setUpdate_time(DateUtil.now());
dao.setIs_delete("0");
dao.setIs_used("1");
dao.setStoragevehicle_type("01");
dao.setStoragevehicle_type("2");
insertList.add(dao);
}
iMdPbStoragevehicleinfoService.saveBatch(insertList);

View File

@@ -37,7 +37,7 @@ public class MdPbStoragevehicleinfoServiceImpl extends ServiceImpl<MdPbStorageve
public IPage<MdPbStoragevehicleinfo> queryAll(Map whereJson, PageQuery page) {
// 查询条件
LambdaQueryWrapper<MdPbStoragevehicleinfo> queryWrapper = new QueryWrapper<MdPbStoragevehicleinfo>().lambda();
String search = MapUtil.getStr(whereJson, "storagevehicle_code");
String search = MapUtil.getStr(whereJson, "vehicle_code");
String storagevehicle_type = MapUtil.getStr(whereJson, "storagevehicle_type");
if (ObjectUtil.isNotEmpty(search)) {

View File

@@ -447,7 +447,7 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
record.setStruct_code(changeDto.getStructCode());
record.setStor_code(structattr.getStor_code());
record.setSect_code(structattr.getSect_code());
record.setGrowth(changeDto.getInBound());
record.setGrowth(!changeDto.getTaskType().contains("Out"));
records.add(record);
}
if (!CollectionUtils.isEmpty(records)){

View File

@@ -203,7 +203,7 @@ public class GateWayServiceImpl implements IGateWayService {
status = TaskStatus.CANCELED;
break;
case SEND_FAIL:
status = TaskStatus.UNFINISHED;
status = TaskStatus.CANCELED;
break;
case EXECUTE_FAIL:
status = TaskStatus.CANCELED;

View File

@@ -253,7 +253,7 @@ public class PdaIosOutController {
@PostMapping("transferConfirm")
@Log("转运确认")
public ResponseEntity<Object> transferConfirm(@RequestBody JSONObject whereJson) {
assertNotBlankJson(whereJson, "请求参数不能为空", "storagevehicle_code");
// assertNotBlankJson(whereJson, "请求参数不能为空", "storagevehicle_code");
RedissonUtils.lock(() -> {
pdaIosOutService.transferConfirm(whereJson);
}, "transferConfirm" + whereJson.getString("storagevehicle_code"), null);

View File

@@ -622,7 +622,7 @@ public class PdaIosInServiceImpl implements PdaIosInService {
} else {
//空载具入库
whereJson.put("qty", 1);
String materialCode = "1".equals(whereJson.getString("material_id")) ? StatusEnum.VEHICLE_TYPE.code("空托盘") : "2".equals(whereJson.getString("material_id")) ? StatusEnum.VEHICLE_TYPE.code("料箱") : StatusEnum.VEHICLE_TYPE.code("货架");
String materialCode = whereJson.getString("vehicle_code").contains("T") ? StatusEnum.VEHICLE_TYPE.code("空托盘") :whereJson.getString("vehicle_code").contains("H") ? StatusEnum.VEHICLE_TYPE.code("货架") : StatusEnum.VEHICLE_TYPE.code("料箱");
JSONArray dataArray = new JSONArray();
JSONObject item = new JSONObject();
whereJson.put("material_code",materialCode);

View File

@@ -38,6 +38,7 @@ import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.impl.SchBaseTaskServiceImpl;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
@@ -123,6 +124,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
@Autowired
private ISchBaseTaskService iSchBaseTaskService;
/**
* 点位服务
*/
@@ -207,7 +209,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
List<JSONObject> result = mdPbGroupplateMapper.getVehicleMaterial(whereJson);
List<JSONObject> jsonObjectList = result.stream().filter(r -> r.getBigDecimal("qty").compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList());
if (CollectionUtils.isEmpty(jsonObjectList)) {
throw new BadRequestException("此载具无出库确认的任务!");
return PdaResponse.requestParamOk(list);
}
list.add(result.get(0));
return PdaResponse.requestParamOk(list);
@@ -262,7 +264,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
JSONObject taskForm = new JSONObject();
taskForm.put("task_type", IOSConstant.ST_OUT_TASK);
taskForm.put("config_code", IOSConstant.ST_OUT_TASK);
taskForm.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
taskForm.put("TaskCode", IdUtil.getStringId());
taskForm.put("point_code1", json.getString("struct_code"));
taskForm.put("point_code2", whereJson.getString("siteCode"));
taskForm.put("vehicle_code", json.getString("storagevehicle_code"));
@@ -302,7 +304,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
JSONObject taskForm = new JSONObject();
taskForm.put("task_type", IOSConstant.PDA_POINT_TASK);
taskForm.put("config_code", IOSConstant.PDA_POINT_TASK);
taskForm.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
taskForm.put("TaskCode",IdUtil.getStringId());
taskForm.put("point_code1", json.getString("struct_code"));
taskForm.put("point_code2", whereJson.getString("siteCode"));
taskForm.put("vehicle_code", json.getString("storagevehicle_code"));
@@ -333,12 +335,17 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
@Transactional
public PdaResponse vehicleOutConfirm(JSONObject whereJson) {
long qty = 1L;
String materialCode = StatusEnum.VEHICLE_TYPE.code("空托盘");
Sectattr sectattr = iSectattrService.getById(whereJson.getString("sect_id"));
if (ObjectUtil.isEmpty(sectattr)) {
throw new BadRequestException("该仓位所属的库区已禁用,请先启用该库区!");
}
String materialCode = "1".equals(sectattr.getExt_id()) ? "KT001" : "2".equals(sectattr.getExt_id()) ? "KL001" : "KH001";
//空料箱出库
if (StringUtils.isNotBlank(whereJson.getString("qty"))) {
qty = whereJson.getLongValue("qty");
if (qty > 6) {
throw new BadRequestException("一次性只能输入小于7以内的载具数量");
if (qty > 4) {
throw new BadRequestException("一次性只能输入小于4以内的载具数量");
}
materialCode = StatusEnum.VEHICLE_TYPE.code("空料箱");
}
@@ -349,10 +356,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
whereJson.put("pcsn", "1");
whereJson.put("material_id", materDao.getMaterial_id());
whereJson.put("material_code", materDao.getMaterial_code());
Sectattr sectattr = iSectattrService.getById(whereJson.getString("sect_id"));
if (ObjectUtil.isEmpty(sectattr)) {
throw new BadRequestException("该仓位所属的库区已禁用,请先启用该库区!");
}
BsrealStorattr storeDao = iSrealStorattrService.findByCode(sectattr.getStor_code());
whereJson.put("stor_code", storeDao.getStor_code());
whereJson.put("sect_code", sectattr.getSect_code());
@@ -360,7 +364,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
.ioType(whereJson.getString(StatusEnum.STRATEGY_TYPE.code("出库")))
.sect_code(whereJson.getString("sect_code"))
.stor_code(whereJson.getString("stor_code"))
.material_code(whereJson.getString("material_id"))
.material_id(whereJson.getString("material_id"))
.material_code(whereJson.getString("material_code"))
.qty(BigDecimal.valueOf(qty))
.build();
@@ -368,12 +372,15 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
if (CollectionUtils.isEmpty(structList)) {
throw new BadRequestException("无可用库存!");
}
if (structList.size()<qty) {
throw new BadRequestException("您选择出库的数量为:"+qty+",仓库库存数量为:"+structList.size()+",库存不足,请把出库数量调整小再出库!");
}
structList.forEach(r -> {
//创建任务
JSONObject taskForm = new JSONObject();
taskForm.put("task_type", IOSConstant.VEHICLE_OUT_TASK);
taskForm.put("config_code", IOSConstant.VEHICLE_OUT_TASK);
taskForm.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
taskForm.put("TaskCode",IdUtil.getStringId());
taskForm.put("point_code1", r.getStruct_code());
taskForm.put("point_code2", whereJson.getString("siteCode"));
taskForm.put("vehicle_code", r.getStoragevehicle_code());
@@ -384,13 +391,13 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
Set<String> vehicleCodeSet = structList.stream()
.map(StrategyStructMaterialVO::getStoragevehicle_code)
.collect(Collectors.toSet());
mdPbGroupplateMapper.update(
new GroupPlate(),
new LambdaUpdateWrapper<GroupPlate>()
.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
.in(GroupPlate::getStoragevehicle_code, vehicleCodeSet)
);
// mdPbGroupplateMapper.update(
// new GroupPlate(),
// new LambdaUpdateWrapper<GroupPlate>()
// .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
// .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"))
// .in(GroupPlate::getStoragevehicle_code, vehicleCodeSet)
// );
//锁定仓位
Set<String> structCodeSet = structList.stream()
.map(StrategyStructMaterialVO::getStruct_code)
@@ -527,9 +534,11 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
//校验是否有任务
List<SchBaseTask> activeTasks = iSchBaseTaskService.getTaskList(null, pointIds, null, null);
if (CollectionUtils.isNotEmpty(activeTasks)) {
throw new BadRequestException("检查到运输到这个点位的任务,任务号为:" + activeTasks.get(0).getTask_code() +
",起点为:" + activeTasks.get(0).getPoint_code1() + ",终点为:" + activeTasks.get(0).getPoint_code2() +
",载具号为:" + activeTasks.get(0).getVehicle_code() + ",请稍后操作,或在WMS任务列表中检查。");
if (!activeTasks.get(0).getVehicle_code().contains("LX")) {
throw new BadRequestException("检查到运输到这个点位的任务,任务号为:" + activeTasks.get(0).getTask_code() +
",起点为:" + activeTasks.get(0).getPoint_code1() + ",终点为:" + activeTasks.get(0).getPoint_code2() +
",载具号为:" + activeTasks.get(0).getVehicle_code() + ",请稍后操作,或在WMS任务列表中检查。");
}
}
} else {
//解绑
@@ -581,6 +590,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
}
wrapper.eq(SchBasePoint::getPoint_code, siteCode)
.set(SchBasePoint::getVehicle_code, shelfCode)
.set(SchBasePoint::getCan_material_type, shelfCode)
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货"))
.set(SchBasePoint::getUpdate_time, DateUtil.now())
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName());
@@ -652,12 +662,17 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
//任务校验
SchBaseTask task = iSchBaseTaskService.getOne(new LambdaQueryWrapper<SchBaseTask>().eq(SchBaseTask::getVehicle_code, whereJson.getString("storagevehicle_code")).lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()));
if (ObjectUtil.isNotEmpty(task)) {
throw new BadRequestException("该货架:" + whereJson.getString("storagevehicle_code") + "的运输任务,任务号为:" + task.getTask_code() + ",尚未完成,请等待任务完成,再取货确认。");
Map<String, Object> param =new HashMap<>();
param.put("task_code", task.getTask_code());
param.put("method_name", "forceFinish");
param.put("config_code", task.getConfig_code());
iSchBaseTaskService.operation(param);
//throw new BadRequestException("该货架:" + whereJson.getString("storagevehicle_code") + "的运输任务,任务号为:" + task.getTask_code() + ",尚未完成,请等待任务完成,再取货确认。");
}
//获取终点
SchBasePoint pointDao = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, whereJson.getString("storagevehicle_code")));
if (ObjectUtil.isEmpty(pointDao)) {
throw new BadRequestException("未找到载具所在的点位信息,请检查");
throw new BadRequestException("未找到载具所在的点位信息,无需确认");
}
//预装区与商用5号线点位需自动回空
if (pointDao.getRegion_code().equals(StatusEnum.REGION_INFO.code("商用线5号线"))) {
@@ -678,7 +693,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
// }
List<GroupPlate> groupPlates = iMdPbGroupplateService.list(new QueryWrapper<GroupPlate>()
.eq("storagevehicle_code", whereJson.getString("storagevehicle_code"))
.eq("status", IOSEnum.GROUP_PLATE_STATUS.code("")));
.lt("status", IOSEnum.GROUP_PLATE_STATUS.code("")));
for (GroupPlate vehicleMater : groupPlates) {
BigDecimal subtract = vehicleMater.getQty().subtract(vehicleMater.getFrozen_qty());
//100-出50 = 50
@@ -694,6 +709,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
//载具解绑
iSchBasePointService.update(new SchBasePoint(), new LambdaUpdateWrapper<>(SchBasePoint.class)
.set(SchBasePoint::getVehicle_code, null)
.set(SchBasePoint::getPoint_status, 0)
.set(SchBasePoint::getIos_id, BaseDataEnum.IS_YES_NOT.code(""))
.eq(SchBasePoint::getPoint_code, pointDao.getPoint_code())
);

View File

@@ -74,7 +74,7 @@ public enum StatusEnum {
TASK_TYPE(ForkMap.pushAll(IOBILL_TYPE_IN.code, IOBILL_TYPE_OUT.code, IOBILL_TYPE_MOVE.code, EXT_TASK_TYPE.code, OTHER_TASK_TYPE.code)),
ACS_TASK_TYPE(ForkMap.of(
"叉车", "1", "ccbyrw01", "CTU", "2", "ctubyrw01", "潜伏车", "3", "qfbyrw01", "桁架任务", "4", null
"叉车", "1", "ccbyrw01", "CTU入库", "2", "ctubyru01", "潜伏车", "3", "qfbyrw01", "CTU出库", "4", "ctubyru02"
)),
/**
@@ -96,7 +96,7 @@ public enum StatusEnum {
REGION_INFO(ForkMap.of("商用线5号线", "SYCX01", null, "预装暂存区", "YZZC01", null, "预装线货架区", "YZHJ01", null, "铜管仓", "TGCK01", null,
"烧焊车间", "SHCJ01", null, "来料检验区", "LLJY01", null, "空托存放区", "KTCF01", null, "两器货架区", "LQHJ01", null, "满托存放区", "MTCF01", null, "焊接货架区", "LQSH01", null, "原料入库区", "RKQ01", null)),
"烧焊车间", "SHCJ01", null, "来料检验区", "LLJY01", null, "空托存放区", "KTCF01", null, "两器货架区", "LQHJ01", null, "满托存放区", "MTCF01", null, "焊接货架区", "LQSH01", null, "原料入库区", "RKQ01", null,"CTU入库点", "CTU01", null,"CTU出库点", "CTU02", null)),
STOCK_INFO(ForkMap.of("托盘库", "FStockPallet", null, "料箱库", "FStockId", null, "虚拟库", "FicStockId", null, "二楼ctu缓存库", "CStockId", null,
@@ -108,8 +108,7 @@ public enum StatusEnum {
BIND_TYPE(ForkMap.of(
"解绑", "0", null, "绑定", "1", null, "不操作", "3", null
)),
VEHICLE_TYPE(ForkMap.of(
"空载具", "0", 0, "空托盘", "KT001", 1, "空料箱", "KL001", 2, "空货架", "KH001", 3
VEHICLE_TYPE(ForkMap.of("空载具", "0", 0, "空托盘", "KT001", 1, "空料箱", "KL001", 2, "空货架", "KH001", 3
)),
STORE_INFO(ForkMap.of(

View File

@@ -37,9 +37,9 @@ public enum TaskStatus {
/**
* 未完成
*/
UNFINISHED("7", "未完成", "未完成");
UNFINISHED("7", "未完成", "未完成"),
WAIT("10", "等待确认", "等待确认");
TaskStatus(String code, String name, String desc) {
this.code = code;
this.name = name;

View File

@@ -128,6 +128,7 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
updateWrapper.set(SchBasePoint::getRegion_name, baseRegion.getRegion_name());
if (StringUtils.isNotBlank(entity.getVehicle_code())) {
updateWrapper.set(SchBasePoint::getVehicle_code, entity.getVehicle_code());
updateWrapper.set(SchBasePoint::getCan_material_type, entity.getVehicle_code());
}else {
updateWrapper.set(SchBasePoint::getVehicle_code, null);
}
@@ -210,10 +211,18 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
@Override
public String getPointCode(String regionCode) {
String pointCode = "";
List<SchBasePoint> pointList = checkEndPointTask(
regionCode,
IOSEnum.LOCK_TYPE.code("未锁定"),
StatusEnum.SORT_TYPE.code("升序"), null, null, "true", false);
List<SchBasePoint> pointList;
if (regionCode.equals(StatusEnum.REGION_INFO.code("CTU出库点"))) {
LambdaQueryWrapper<SchBasePoint> queryWrapper = new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getIs_used, true);
queryWrapper.eq(SchBasePoint::getRegion_code, regionCode);
queryWrapper.orderByAsc(SchBasePoint::getPoint_code);
pointList = this.list(queryWrapper);
} else {
pointList = checkEndPointTask(
regionCode,
IOSEnum.LOCK_TYPE.code("未锁定"),
StatusEnum.SORT_TYPE.code("升序"), null, null, "true", false);
}
if (regionCode.equals(StatusEnum.REGION_INFO.code("预装线货架区"))) {
//可放空料架位置
pointCode = pointList.stream()

View File

@@ -2,7 +2,6 @@ package org.nl.wms.sch_manage.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -18,6 +17,7 @@ import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.IdUtil;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.sch_manage.enums.StatusEnum;
import org.nl.wms.sch_manage.enums.TaskStatus;
@@ -51,6 +51,9 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
@Autowired
private ISchBasePointService iSchBasePointService;
@Autowired
private SchBaseTaskServiceImpl schBaseTaskServiceImpl;
@Autowired
private TaskFactory taskFactory;
@@ -102,8 +105,8 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
Assert.notNull(entity.getTask_status(), "任务状态不能为空!");
entity.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr());
entity.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
entity.setTask_id(org.nl.config.IdUtil.getStringId());
entity.setTask_code(IdUtil.getStringId());
entity.setCreate_id(currentUserId);
entity.setCreate_name(nickName);
entity.setCreate_time(now);

View File

@@ -1,6 +1,8 @@
package org.nl.wms.sch_manage.service.util;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.sch_manage.enums.StatusEnum;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
/**
* @Author: Liuxy
@@ -26,4 +28,17 @@ public class PointUtils {
// 设置
return statusArr.getString(label);
}
public static String getRcsTraceId(SchBaseTask task) {
if (task.getVehicle_code().contains("T")) {
return "ccbyrw01";
} else if (task.getVehicle_code().contains("LX")) {
return task.getConfig_code().contains("In") ?"ctubyru01":"ctubyru02";
} else {
return "qfbyrw01";
}
}
}

View File

@@ -23,6 +23,7 @@ import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import org.nl.wms.sch_manage.service.util.PointUtils;
import org.nl.wms.sch_manage.service.util.TaskType;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
@@ -86,18 +87,18 @@ public class BackInTask extends AbstractTask {
updateIvtUtils.checkTask(json);
SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId());
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setTask_code(IdUtil.getStringId());
task.setTask_status(TaskStatus.CREATE.getCode());
task.setConfig_code(json.getString("config_code"));
task.setPoint_code1(json.getString("point_code1"));
task.setPoint_code2(json.getString("point_code2"));
task.setVehicle_code(json.getString("vehicle_code"));
task.setVehicle_type(json.getString("vehicle_type"));
task.setAcs_trace_id(json.getString("acs_task_type"));
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
task.setRequest_param(json.toString());
task.setAcs_trace_id(PointUtils.getRcsTraceId(task));
taskService.save(task);
return task.getTask_id();
}

View File

@@ -21,6 +21,7 @@ import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import org.nl.wms.sch_manage.service.util.PointUtils;
import org.nl.wms.sch_manage.service.util.TaskType;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
@@ -138,6 +139,7 @@ public class CtuInTask extends AbstractTask {
task.setRequest_param(json.toString());
task.setVehicle_type(json.getString("vehicle_type"));
task.setConfig_code(IOSConstant.CTU_IN_TASK);
task.setAcs_trace_id(PointUtils.getRcsTraceId(task));
taskService.create(task);
return task.getTask_code();
}

View File

@@ -14,6 +14,7 @@ import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import org.nl.wms.sch_manage.service.util.PointUtils;
import org.nl.wms.sch_manage.service.util.TaskType;
import org.nl.wms.warehouse_management.service.IStIvtMoveinvService;
import org.nl.wms.warehouse_management.service.IStIvtMoveinvdtlService;
@@ -59,7 +60,7 @@ public class MoveTask extends AbstractTask {
updateIvtUtils.checkTask(json);
SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId());
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setTask_code(IdUtil.getStringId());
task.setTask_status(TaskStatus.CREATE.getCode());
task.setConfig_code(json.getString("config_code"));
task.setPoint_code1(json.getString("point_code1"));
@@ -71,6 +72,7 @@ public class MoveTask extends AbstractTask {
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
task.setAcs_trace_id(PointUtils.getRcsTraceId(task));
taskService.save(task);
return task.getTask_id();
}

View File

@@ -22,6 +22,7 @@ import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import org.nl.wms.sch_manage.service.util.PointUtils;
import org.nl.wms.sch_manage.service.util.TaskType;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IOutBillService;
@@ -80,7 +81,7 @@ public class PdaPointTask extends AbstractTask {
updateIvtUtils.checkTask(json);
SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId());
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setTask_code(IdUtil.getStringId());
task.setTask_status(TaskStatus.CREATE.getCode());
task.setConfig_code(json.getString("config_code"));
task.setPoint_code1(json.getString("point_code1"));
@@ -94,6 +95,7 @@ public class PdaPointTask extends AbstractTask {
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
task.setAcs_trace_id(PointUtils.getRcsTraceId(task));
taskService.save(task);
return task.getTask_code();
}
@@ -174,6 +176,7 @@ public class PdaPointTask extends AbstractTask {
iSchBasePointService.update(new UpdateWrapper<SchBasePoint>().lambda()
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
.set(SchBasePoint::getVehicle_code, null)
.set(SchBasePoint::getCan_material_type, null)
.set(SchBasePoint::getIos_id, null)
.set(SchBasePoint::getIng_task_code, null)
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))

View File

@@ -14,6 +14,7 @@ import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import org.nl.wms.sch_manage.service.util.PointUtils;
import org.nl.wms.sch_manage.service.util.TaskType;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IRawAssistIStorService;
@@ -66,6 +67,7 @@ public class StInTask extends AbstractTask {
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
task.setAcs_trace_id(PointUtils.getRcsTraceId(task));
taskService.save(task);
return task.getTask_id();
}

View File

@@ -16,6 +16,7 @@ import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import org.nl.wms.sch_manage.service.util.PointUtils;
import org.nl.wms.sch_manage.service.util.TaskType;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
@@ -75,6 +76,7 @@ public class StOutTask extends AbstractTask {
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
task.setAcs_trace_id(PointUtils.getRcsTraceId(task));
taskService.save(task);
return task.getTask_id();
}

View File

@@ -19,6 +19,7 @@ import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import org.nl.wms.sch_manage.service.util.PointUtils;
import org.nl.wms.sch_manage.service.util.TaskType;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
@@ -70,7 +71,7 @@ public class VehicleInTask extends AbstractTask {
updateIvtUtils.checkTask(json);
SchBaseTask task = new SchBaseTask();
task.setTask_id(IdUtil.getStringId());
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setTask_code(IdUtil.getStringId());
task.setTask_status(TaskStatus.CREATE.getCode());
task.setConfig_code(json.getString("config_code"));
task.setPoint_code1(json.getString("point_code1"));
@@ -84,6 +85,7 @@ public class VehicleInTask extends AbstractTask {
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
task.setAcs_trace_id(PointUtils.getRcsTraceId(task));
taskService.save(task);
return task.getTask_id();
}

View File

@@ -18,6 +18,7 @@ import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import org.nl.wms.sch_manage.service.util.PointUtils;
import org.nl.wms.sch_manage.service.util.TaskType;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
@@ -82,6 +83,7 @@ public class VehicleOutTask extends AbstractTask {
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName());
task.setCreate_time(DateUtil.now());
task.setAcs_trace_id(PointUtils.getRcsTraceId(task));
taskService.save(task);
return task.getTask_id();
}

View File

@@ -1011,7 +1011,7 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
//创建任务
JSONObject task_form = new JSONObject();
task_form.put("task_type", "STOutTask");
task_form.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
task_form.put("TaskCode",IdUtil.getStringId());
task_form.put("point_code1", ioStorInvDis.getStruct_code());
task_form.put("point_code2", pointCode);
task_form.put("vehicle_code", ioStorInvDis.getStoragevehicle_code());
@@ -1022,6 +1022,7 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
LambdaUpdateWrapper<SchBasePoint> wrapper = new LambdaUpdateWrapper<SchBasePoint>()
.eq(SchBasePoint::getPoint_code, pointCode)
.set(SchBasePoint::getVehicle_code, ioStorInvDis.getStoragevehicle_code())
.set(SchBasePoint::getCan_material_type, ioStorInvDis.getStoragevehicle_code())
.set(SchBasePoint::getIs_has_workder, BaseDataEnum.IS_YES_NOT.code(""))
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货"));
iSchBasePointService.update(new SchBasePoint(), wrapper);
@@ -1235,7 +1236,9 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
StructattrChangeDto changeDto = StructattrChangeDto.builder()
.inv(ioStorInvDis.getIostorinv_id())
.storagevehicleCode(ioStorInvDis.getStoragevehicle_code())
.structCode(ioStorInvDis.getStruct_code()).taskType(task.getConfig_code()).inBound(true).build();
.structCode(ioStorInvDis.getStruct_code())
.taskType(task.getConfig_code())
.inBound(!"qfbyrw01".equals(task.getAcs_trace_id())).build();
iStructattrService.changeStruct(changeDto);
int countDis = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class)
.eq(IOStorInvDis::getIostorinvdtl_id, ioStorInvDis.getIostorinvdtl_id())

View File

@@ -543,7 +543,7 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
//创建任务
JSONObject task_form = new JSONObject();
task_form.put("task_type", "STInTask");
task_form.put("TaskCode", CodeUtil.getNewCode("TASK_CODE"));
task_form.put("TaskCode", IdUtil.getStringId());
task_form.put("point_code1", point_code);
task_form.put("point_code2", ioStorInvDis.get(0).getStruct_code());
task_form.put("vehicle_code", map.get("storagevehicle_code"));

View File

@@ -1,20 +1,32 @@
package org.nl.wms.warehouse_management.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
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.StringUtils;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.SpringContextHolder;
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo;
import org.nl.wms.pda.ios_manage.service.impl.PdaIosInServiceImpl;
import org.nl.wms.sch_manage.enums.StatusEnum;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_management.service.IStIvtMoreorlessdtlService;
import org.nl.wms.warehouse_management.service.IStIvtMoreorlessmstService;
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
import org.nl.wms.warehouse_management.service.dao.StIvtMoreorlessdtl;
import org.nl.wms.warehouse_management.service.dao.StIvtMoreorlessmst;
import org.nl.wms.warehouse_management.service.dao.mapper.StIvtMoreorlessmstMapper;
@@ -24,6 +36,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -44,7 +58,11 @@ public class StIvtMoreorlessmstServiceImpl extends ServiceImpl<StIvtMoreorlessms
*/
@Autowired
private IStIvtMoreorlessdtlService iStIvtMoreorlessdtlService;
@Autowired
private IMdPbStoragevehicleinfoService iMdPbStoragevehicleinfoService;
@Resource
private IMdPbGroupplateService iMdPbGroupplateService;
/**
* 变更库存工具类
*/
@@ -135,6 +153,33 @@ public class StIvtMoreorlessmstServiceImpl extends ServiceImpl<StIvtMoreorlessms
);
// 更新库存
for (StIvtMoreorlessdtl dto : dtlDaoList) {
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(dto.getStoragevehicle_code());
if (ObjectUtil.isEmpty(vehicleDao)) {
throw new BadRequestException("载具信息有误!");
}
// LambdaQueryWrapper<GroupPlate> query = new QueryWrapper<GroupPlate>().lambda()
// .eq(GroupPlate::getStoragevehicle_code,dto.getStoragevehicle_code())
// .eq(GroupPlate::getMaterial_id,dto.getMaterial_id())
// .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库"));
// GroupPlate extDao = iMdPbGroupplateService.getOne(query);
// if (ObjectUtil.isEmpty(extDao)) {
// //组盘
// GroupPlate groupDao = GroupPlate.builder()
// .group_id(IdUtil.getStringId())
// .material_id(dto.getMaterial_id())
// .storagevehicle_code(vehicleDao.getStoragevehicle_code())
// .pcsn(org.nl.common.utils.DateUtil.getDateTimeFormatyMd())
// .qty_unit_id(dto.getQty_unit_id())
// .qty_unit_name(dto.getQty_unit_name())
// .qty(dto.getMol_qty())
// .status(IOSEnum.GROUP_PLATE_STATUS.code("入库"))
// .create_id(SecurityUtils.getCurrentUserId())
// .create_name(SecurityUtils.getCurrentNickName())
// .create_time(DateUtil.now())
// .remark("该物料由:"+SecurityUtils.getCurrentNickName()+"盘点后,更正载具物料的组盘信息。")
// .build();
// iMdPbGroupplateService.save(groupDao);
// }
JSONObject json = new JSONObject();
json.put("type", dao.getMol_type().equals(IOSEnum.MORE_TYPE.code(""))
? IOSConstant.UPDATE_IVT_TYPE_SUB_CANUSE_IVT : IOSConstant.UPDATE_IVT_TYPE_ADD_CANUSE_IVT);

View File

@@ -17,7 +17,6 @@ import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
import org.nl.wms.basedata_manage.service.ISectattrService;
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo;
import org.nl.wms.basedata_manage.service.dao.Sectattr;
import org.nl.wms.sch_manage.enums.StatusEnum;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
@@ -135,23 +134,23 @@ public class UpdateIvtUtils {
Set<String> pointIds = new HashSet<>();
pointIds.add(where.getString("point_code1"));
pointIds.add(where.getString("point_code2"));
list = iSchBaseTaskService.getTaskList(pointIds, pointIds, null, null);
if (CollectionUtils.isNotEmpty(list)) {
throw new BadRequestException("当前起点或终点存在任务,起点:" + where.getString("point_code1") + ",终点:" + where.getString("point_code2") + ",请在WMS任务列表中检查!");
if (!where.getString("vehicle_code").contains("LX")) {
list = iSchBaseTaskService.getTaskList(pointIds, pointIds, null, null);
if (CollectionUtils.isNotEmpty(list)) {
throw new BadRequestException("当前起点或终点存在任务,起点:" + where.getString("point_code1") + ",终点:" + where.getString("point_code2") + ",请在WMS任务列表中检查!");
}
}
list = iSchBaseTaskService.list(new QueryWrapper<SchBaseTask>().eq("vehicle_code", where.getString("vehicle_code"))
.lt("task_status", TaskStatus.FINISHED.getCode()));
if (CollectionUtils.isNotEmpty(list)) {
throw new BadRequestException("当前载具存在任务:" + list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")) + ",请在WMS任务列表中检查!");
}
MdPbStoragevehicleinfo mdPbStoragevehicleinfo = iMdPbStoragevehicleinfoService.getOne(new QueryWrapper<MdPbStoragevehicleinfo>().lambda().eq(MdPbStoragevehicleinfo::getStoragevehicle_code, where.getString("vehicle_code")));
if (mdPbStoragevehicleinfo == null) {
throw new BadRequestException("该载具不存在,请检查。");
if (StringUtils.isBlank(where.getString("isCheckVehicle"))) {
MdPbStoragevehicleinfo mdPbStoragevehicleinfo = iMdPbStoragevehicleinfoService.getOne(new QueryWrapper<MdPbStoragevehicleinfo>().lambda().eq(MdPbStoragevehicleinfo::getStoragevehicle_code, where.getString("vehicle_code")));
if (mdPbStoragevehicleinfo == null) {
throw new BadRequestException("该载具不存在,请检查。");
}
}
//根据载具类型判断RCS任务类型
String acsTaskType = StatusEnum.ACS_TASK_TYPE.getR(mdPbStoragevehicleinfo.getStoragevehicle_type());
where.put("acs_task_type", acsTaskType);
where.put("vehicle_type", mdPbStoragevehicleinfo.getStoragevehicle_type());
}
/**

View File

@@ -36,6 +36,7 @@
size="mini"
placeholder="载具号"
style="width: 110px;"
class="filter-item"
@keyup.enter.native="crud.toQuery"
/>

View File

@@ -89,6 +89,19 @@
<el-table-column type="index" label="序号" align="center" :min-width="flexWidth('index',crud.data,'序号')" />
<el-table-column prop="sect_name" label="盘点库区" align="center" :min-width="flexWidth('sect_name',crud.data,'盘点库区')" />
<el-table-column prop="struct_name" label="盘点货位" align="center" :min-width="flexWidth('struct_name',crud.data,'盘点货位')" />
<!-- <el-table-column prop="storagevehicle_code" label="载具号" :min-width="flexWidth('storagevehicle_code',crud.data,'载具号')">-->
<!-- <template scope="scope">-->
<!-- <el-input v-show="isShow(scope.$index, scope.row,2)" v-model="scope.row.storagevehicle_code" :disabled="scope.row.status === '99'" />-->
<!-- <span v-show="isShow(scope.$index, scope.row,4)">{{ scope.row.storagevehicle_code }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="material_code" label="物料编码" align="center" :min-width="flexWidth('material_code',crud.data,'物料编码')">-->
<!-- <template scope="scope">-->
<!-- <el-input v-show="isShow(scope.$index, scope.row,2)" v-model="scope.row.ma
terial_code" :disabled="scope.row.status === '99'" />-->
<!-- <span v-show="isShow(scope.$index, scope.row,4)">{{ scope.row.material_code }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column prop="storagevehicle_code" label="载具号" :min-width="flexWidth('storagevehicle_code',crud.data,'载具号')" />
<el-table-column prop="material_code" label="物料编码" align="center" :min-width="flexWidth('material_code',crud.data,'物料编码')" />
<el-table-column prop="material_name" label="物料名称" align="center" :min-width="flexWidth('material_name',crud.data,'物料名称')" />

View File

@@ -196,12 +196,12 @@ import crudBsrealstorattr from '@/views/wms/basedata/bsrealstorattr/bsrealstorat
const defaultForm = {
bill_code: '',
stor_id: '',
stor_code: '',
stor_code: '1940342890681208833',
stor_name: '',
bill_status: '10',
total_qty: '0',
detail_count: '0',
bill_type: '',
bill_type: '1003',
remark: '',
biz_date: new Date(),
out_stor_id: '',
@@ -256,6 +256,10 @@ export default {
open() {
crudBsrealstorattr.getStor().then(res => {
this.storlist = res
if (this.storlist && this.storlist.length > 0) {
this.form.stor_id = this.storlist[0].stor_id
this.storChange()
}
})
},
close() {

View File

@@ -36,6 +36,17 @@
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<el-form-item label="物料名称">
<el-input
v-model="query.material_name"
clearable
size="mini"
placeholder="物料"
style="width: 200px;"
class="filter-item"
@keyup.enter.native="crud.toQuery"
/>
</el-form-item>
<el-form-item label="物料编码">
<el-input
v-model="query.material_code"

View File

@@ -14,7 +14,7 @@
<span class="el-dialog__title2">出库分配</span>
<span class="crud-opts-right2">
<!--左侧插槽-->
<slot name="left" />
<slot name="left"/>
<el-button slot="left" type="info" @click="dialogVisible = false">关闭</el-button>
</span>
</div>
@@ -25,6 +25,7 @@
<el-form ref="form" :inline="true" :model="form" size="mini">
<el-form-item label="库区" prop="gender2">
<el-cascader
v-model="cascaderValue"
placeholder="请选择"
:options="sects"
:props="{ checkStrictly: true }"
@@ -36,7 +37,7 @@
</div>
<span class="crud-opts-right2">
<!--左侧插槽-->
<slot name="left" />
<slot name="left"/>
<el-button
slot="left"
class="filter-item"
@@ -124,13 +125,19 @@
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
@current-change="handleDtlCurrentChange"
>
<el-table-column prop="bill_status" label="状态" align="center" width="110px" :formatter="bill_statusFormat" />
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" align="center" />
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" align="center" />
<el-table-column show-overflow-tooltip prop="pcsn" label="批次号" align="center" width="140px" />
<el-table-column show-overflow-tooltip prop="plan_qty" label="数量" :formatter="crud.formatNum3" align="center" />
<el-table-column show-overflow-tooltip prop="assign_qty" label="已分配数量" :formatter="crud.formatNum3" align="center" />
<el-table-column show-overflow-tooltip prop="unassign_qty" label="未分配数量" :formatter="crud.formatNum3" align="center" />
<el-table-column prop="bill_status" label="状态" align="center" width="110px" :formatter="bill_statusFormat"/>
<el-table-column show-overflow-tooltip prop="material_code" label="物料编码" align="center"/>
<el-table-column show-overflow-tooltip prop="material_name" label="物料名称" align="center"/>
<el-table-column show-overflow-tooltip prop="pcsn" label="批次号" align="center" width="140px"/>
<el-table-column show-overflow-tooltip prop="plan_qty" label="数量" :formatter="crud.formatNum3"
align="center"
/>
<el-table-column show-overflow-tooltip prop="assign_qty" label="已分配数量" :formatter="crud.formatNum3"
align="center"
/>
<el-table-column show-overflow-tooltip prop="unassign_qty" label="未分配数量" :formatter="crud.formatNum3"
align="center"
/>
</el-table>
</el-card>
<div class="crud-opts2">
@@ -190,7 +197,7 @@
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
@current-change="handleDisCurrentChange"
>
<el-table-column type="index" label="序号" width="50" align="center" />
<el-table-column type="index" label="序号" width="50" align="center"/>
<el-table-column prop="bill_status" label="状态" align="center" width="110px">
<template slot-scope="scope">
<el-select
@@ -207,30 +214,46 @@
</el-select>
</template>
</el-table-column>
<el-table-column prop="material_code" label="物料编码" width="150px" :min-width="flexWidth('material_code',crud.data,'物料编码')" />
<el-table-column prop="material_name" label="物料名称" width="170px" :min-width="flexWidth('material_name',crud.data,'物料名称')" />
<el-table-column prop="storagevehicle_code" label="载具号" width="150px" :min-width="flexWidth('storagevehicle_code',crud.data,'载具号')" />
<el-table-column prop="pcsn" label="批次号" width="150px" :min-width="flexWidth('pcsn',crud.data,'批次号')" />
<el-table-column show-overflow-tooltip prop="plan_qty" label="出库数量" :formatter="crud.formatNum3" align="center" width="120px" :min-width="flexWidth('plan_qty',crud.data,'出库数量')">
<el-table-column prop="material_code" label="物料编码" width="150px"
:min-width="flexWidth('material_code',crud.data,'物料编码')"
/>
<el-table-column prop="material_name" label="物料名称" width="170px"
:min-width="flexWidth('material_name',crud.data,'物料名称')"
/>
<el-table-column prop="storagevehicle_code" label="载具号" width="150px"
:min-width="flexWidth('storagevehicle_code',crud.data,'载具号')"
/>
<el-table-column prop="pcsn" label="批次号" width="150px" :min-width="flexWidth('pcsn',crud.data,'批次号')"/>
<el-table-column show-overflow-tooltip prop="plan_qty" label="出库数量" :formatter="crud.formatNum3"
align="center" width="120px" :min-width="flexWidth('plan_qty',crud.data,'出库数量')"
>
<template scope="scope">
<el-input-number v-show="mstrow.bill_type === '1011'" v-model="scope.row.plan_qty" :precision="3" :controls="false" :min="1" style="width: 90px" />
<el-input-number v-show="mstrow.bill_type === '1011'" v-model="scope.row.plan_qty" :precision="3"
:controls="false" :min="1" style="width: 90px"
/>
<span v-show="mstrow.bill_type !== '1011'">{{ parseFloat(scope.row.plan_qty).toFixed(3) }}</span>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip prop="struct_code" width="150px" label="仓位编码" align="center" />
<el-table-column show-overflow-tooltip prop="struct_name" width="150px" label="仓位名称" align="center" />
<el-table-column show-overflow-tooltip prop="create_time" width="150px" label="入库时间" align="center" />
<el-table-column show-overflow-tooltip prop="task_code" width="150px" label="任务号" align="center" />
<el-table-column show-overflow-tooltip prop="point_code" width="150px" label="出库点" align="center" />
<el-table-column show-overflow-tooltip prop="struct_code" width="150px" label="仓位编码" align="center"/>
<el-table-column show-overflow-tooltip prop="struct_name" width="150px" label="仓位名称" align="center"/>
<el-table-column show-overflow-tooltip prop="create_time" width="150px" label="入库时间" align="center"/>
<el-table-column show-overflow-tooltip prop="task_code" width="150px" label="任务号" align="center"/>
<el-table-column show-overflow-tooltip prop="point_code" width="150px" label="出库点" align="center"/>
<el-table-column align="center" label="操作" width="120" fixed="right">
<template scope="scope">
<el-button :disabled="tabledisabled(scope.row)" type="danger" class="filter-item" size="mini" icon="el-icon-delete" @click.native.prevent="deleteRow(scope.row)" />
<el-button :disabled="tabledisabled(scope.row)" type="danger" class="filter-item" size="mini"
icon="el-icon-delete" @click.native.prevent="deleteRow(scope.row)"
/>
</template>
</el-table-column>
</el-table>
</el-card>
<pointDialog ref="child" :dialog-show.sync="pointshow" :dialog-typedisable="typedisable" :dialog-areatype="areatype" @PointChanged="PointChanged" />
<StructIvt :dialog-show.sync="structshow" :stor-id="storId" :open-array="openParam" :rowmst="openRow" @StructIvtClosed="queryTableDtl2" />
<pointDialog ref="child" :dialog-show.sync="pointshow" :dialog-typedisable="typedisable" :dialog-areatype="areatype"
@PointChanged="PointChanged"
/>
<StructIvt :dialog-show.sync="structshow" :stor-id="storId" :open-array="openParam" :rowmst="openRow"
@StructIvtClosed="queryTableDtl2"
/>
</el-dialog>
</template>
@@ -259,7 +282,9 @@ export default {
},
openArray: {
type: Array,
default: () => { return [] }
default: () => {
return []
}
},
storId: {
type: String,
@@ -268,6 +293,7 @@ export default {
},
data() {
return {
cascaderValue: [],
dialogVisible: false,
loadingAlldiv: false,
loadingAutodiv: false,
@@ -297,8 +323,7 @@ export default {
},
sects: [],
pointList: [],
rules: {
}
rules: {}
}
},
watch: {
@@ -322,11 +347,25 @@ export default {
methods: {
open() {
crudSectattr.getSectCode({ 'stor_id': this.storId }).then(res => {
debugger
this.sects = res.content
if (this.sects && this.sects.length > 0) {
const firstOption = this.sects[0]
if (firstOption.children && firstOption.children.length > 0) {
this.cascaderValue = [firstOption.value, firstOption.children[0].value]
} else {
this.cascaderValue = [firstOption.value]
}
this.sectQueryChange(this.cascaderValue)
}
})
crudRegion.getRegionList(this.mstrow).then(res => {
this.pointList = res
if (this.pointList && this.pointList.length > 0) {
const foundPoint = this.pointList.find(r => r.region_name.includes('出'))
if (foundPoint) {
this.form2.point_code = foundPoint.region_code
}
}
})
},
close() {
@@ -355,6 +394,9 @@ export default {
})
},
sectQueryChange(val) {
if (!val || val.length === 0) {
val = this.cascaderValue
}
if (val.length === 1) {
this.mstrow.stor_code = val[0]
this.mstrow.sect_code = ''
@@ -528,18 +570,19 @@ export default {
.crud-opts2 .el-dialog__title2 {
line-height: 24px;
font-size:20px;
color:#303133;
font-size: 20px;
color: #303133;
}
.crud-opts2 .role-span {
padding: 10px 0px 10px 0px;
}
.crud-opts2 .crud-opts-form {
padding: 10px 0px 0px 20px;
}
.input-with-select {
.input-with-select {
background-color: #fff;
}
</style>

View File

@@ -81,7 +81,7 @@
<el-table-column prop="vehicle_code" label="载具编码" width="150" show-tooltip-when-overflow />
<el-table-column prop="growth" label="是否增加库存" width="150" show-tooltip-when-overflow>
<template slot-scope="scope">
{{ scope.row.growth }}
{{ scope.row.growth ? '是' : '否' }}
</template>
</el-table-column>
<el-table-column prop="pcsn" label="批次" min-width="150" show-tooltip-when-overflow />