fix: 解包任务下发
This commit is contained in:
@@ -45,8 +45,8 @@ 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 storagevehicle_type = MapUtil.getStr(whereJson, "storagevehicle_type");
|
||||
String search = MapUtil.getStr(whereJson, "vehicle_code");
|
||||
String storagevehicle_type = MapUtil.getStr(whereJson, "vehicle_type");
|
||||
|
||||
if (ObjectUtil.isNotEmpty(search)) {
|
||||
queryWrapper.likeRight(MdPbStoragevehicleinfo::getStoragevehicle_code, search)
|
||||
|
||||
@@ -148,7 +148,7 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
|
||||
dto.setCreate_time(now);
|
||||
|
||||
Sectattr sectattr = iSectattrService.getOne(new LambdaQueryWrapper<Sectattr>()
|
||||
.eq(Sectattr::getSect_code, dto.getSect_id())
|
||||
.eq(Sectattr::getSect_code, dto.getSect_code())
|
||||
.eq(Sectattr::getIs_delete, BaseDataEnum.IS_YES_NOT.code("否")));
|
||||
BsrealStorattr bsrealStorattr = iBsrealStorattrService.findById(sectattr.getStor_id());
|
||||
dto.setSect_id(sectattr.getSect_id());
|
||||
|
||||
@@ -7,6 +7,7 @@ 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.LambdaUpdateWrapper;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
@@ -29,9 +30,13 @@ import org.nl.wms.pm_manage.service.IPdmBdWorkorderService;
|
||||
import org.nl.wms.pm_manage.service.dao.PdmBdWorkorder;
|
||||
import org.nl.wms.record_manage.service.IMdPbRegionMemberService;
|
||||
import org.nl.wms.record_manage.service.dao.MdPbRegionMember;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
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.util.tasks.jb.JbUpAgvTask;
|
||||
import org.nl.wms.system_manage.enums.TagNameEnum;
|
||||
import org.nl.wms.system_manage.service.dict.ISysDictService;
|
||||
import org.nl.wms.system_manage.service.dict.dao.Dict;
|
||||
import org.nl.wms.system_manage.service.param.ISysParamService;
|
||||
@@ -47,6 +52,9 @@ import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDtlMappe
|
||||
import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDisDto;
|
||||
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
|
||||
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.slf4j.MDC;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -54,6 +62,8 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
@@ -100,6 +110,10 @@ public class PdaJBServiceImpl implements PdaJBService {
|
||||
private ISysParamService sysParamService;
|
||||
@Resource
|
||||
private IMdPbRegionMemberService regionMemberService;
|
||||
@Resource
|
||||
private RedissonClient redissonClient;
|
||||
@Resource
|
||||
private ISchBaseTaskService taskService;
|
||||
@Override
|
||||
public PdaResponse getOrderList(JSONObject whereJson) {
|
||||
String flag = whereJson.getString("flag");
|
||||
@@ -109,117 +123,129 @@ public class PdaJBServiceImpl implements PdaJBService {
|
||||
return PdaResponse.requestParamOk(workorders);
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public PdaResponse callMaterial(JSONObject whereJson) {
|
||||
log.info("解包叫料,请求参数:{}", whereJson);
|
||||
// workorder_id、area、point_code
|
||||
String pointCode = whereJson.getString("point_code");
|
||||
String workorderId = whereJson.getString("workorder_id");
|
||||
PdmBdWorkorder workorder = workorderService.getById(workorderId);
|
||||
if (ObjectUtil.isEmpty(workorder)) {
|
||||
throw new BadRequestException("工单不存在!");
|
||||
}
|
||||
if (!"1".equals(workorder.getWorkorder_status())) {
|
||||
throw new BadRequestException("该工单不是未生产,无法开工!");
|
||||
}
|
||||
// 出库的仓位
|
||||
Structattr outStructAttr = structattrService.getByCode(workorder.getStruct_code());
|
||||
if (ObjectUtil.isEmpty(outStructAttr)) {
|
||||
throw new BadRequestException("仓位【" + workorder.getStruct_code() + "】不存在!");
|
||||
}
|
||||
MdMeMaterialbase materialbase = materialbaseService.getById(workorder.getMaterial_id());
|
||||
if (ObjectUtil.isEmpty(materialbase)) {
|
||||
throw new BadRequestException("物料【" + workorder.getMaterial_id() + "】不存在!");
|
||||
}
|
||||
GroupPlate groupPlate = groupplateService.getOne(new LambdaQueryWrapper<GroupPlate>()
|
||||
.eq(GroupPlate::getStoragevehicle_code, outStructAttr.getStoragevehicle_code())
|
||||
.eq(GroupPlate::getStatus, "02"));
|
||||
if (ObjectUtil.isEmpty(groupPlate)) {
|
||||
throw new BadRequestException("托盘[" + outStructAttr.getStoragevehicle_code() + "]组盘信息不存在!");
|
||||
}
|
||||
// 1、创建出库单、明细、分配明细
|
||||
JSONObject insertInvObj = new JSONObject();
|
||||
JSONArray tableData = new JSONArray();
|
||||
JSONObject table = new JSONObject();
|
||||
tableData.add(table);
|
||||
insertInvObj.put("stor_id", outStructAttr.getStor_id());
|
||||
insertInvObj.put("stor_code", outStructAttr.getStor_code());
|
||||
insertInvObj.put("bill_status", "10");
|
||||
insertInvObj.put("total_qty", workorder.getPlan_weight());
|
||||
insertInvObj.put("detail_count", 1);
|
||||
insertInvObj.put("bill_type", "1012");
|
||||
insertInvObj.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd"));
|
||||
insertInvObj.put("tableData", tableData);
|
||||
table.put("turnout_struct_code", outStructAttr.getStruct_code());
|
||||
table.put("turnout_sect_code", outStructAttr.getSect_code());
|
||||
table.put("turnout_sect_name", outStructAttr.getSect_name());
|
||||
table.put("sect_id", outStructAttr.getSect_id());
|
||||
table.put("struct_id", outStructAttr.getStruct_id());
|
||||
table.put("group_id", groupPlate.getGroup_id());
|
||||
table.put("storagevehicle_code", outStructAttr.getStoragevehicle_code());
|
||||
table.put("storagevehicle_type", workorder.getVehicle_type());
|
||||
table.put("material_id", materialbase.getMaterial_id());
|
||||
table.put("pcsn", groupPlate.getPcsn());
|
||||
table.put("qty", groupPlate.getQty());
|
||||
table.put("qty_unit_id", groupPlate.getQty_unit_id());
|
||||
table.put("qty_unit_name", groupPlate.getQty_unit_name());
|
||||
table.put("fronzen_qty", 0);
|
||||
table.put("status", "01");
|
||||
table.put("material_code", materialbase.getMaterial_code());
|
||||
table.put("material_name", materialbase.getMaterial_name());
|
||||
table.put("material_spec", materialbase.getMaterial_spec());
|
||||
String invId = outBillService.insertDtl(insertInvObj);
|
||||
// 调用手工分配
|
||||
JSONObject param = new JSONObject();
|
||||
JSONObject row = new JSONObject();
|
||||
JSONArray rows = new JSONArray();
|
||||
rows.add(row);
|
||||
param.put("rows", rows);
|
||||
IOStorInvDtl dtl = ioStorInvDtlMapper.selectOne(new LambdaQueryWrapper<IOStorInvDtl>()
|
||||
.eq(IOStorInvDtl::getIostorinv_id, invId));
|
||||
param.put("row", dtl);
|
||||
row.put("storagevehicle_code", outStructAttr.getStoragevehicle_code());
|
||||
row.put("pcsn", groupPlate.getPcsn());
|
||||
row.put("qty", groupPlate.getQty());
|
||||
row.put("qty_unit_name", groupPlate.getQty_unit_name());
|
||||
row.put("frozen_qty", groupPlate.getFrozen_qty());
|
||||
row.put("struct_id", outStructAttr.getStruct_id());
|
||||
row.put("struct_code", outStructAttr.getStruct_code());
|
||||
row.put("struct_name", outStructAttr.getStruct_name());
|
||||
row.put("sect_id", outStructAttr.getSect_id());
|
||||
row.put("sect_code", outStructAttr.getSect_code());
|
||||
row.put("sect_name", outStructAttr.getSect_name());
|
||||
row.put("material_code", groupPlate.getMaterial_code());
|
||||
row.put("material_name", groupPlate.getMaterial_name());
|
||||
row.put("edit", true);
|
||||
outBillService.manualDiv(param);
|
||||
RLock lock = redissonClient.getLock(pointCode);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
String workorderId = whereJson.getString("workorder_id");
|
||||
PdmBdWorkorder workorder = workorderService.getById(workorderId);
|
||||
if (ObjectUtil.isEmpty(workorder)) {
|
||||
throw new BadRequestException("工单不存在!");
|
||||
}
|
||||
if (!"1".equals(workorder.getWorkorder_status())) {
|
||||
throw new BadRequestException("该工单不是未生产,无法开工!");
|
||||
}
|
||||
// 出库的仓位
|
||||
Structattr outStructAttr = structattrService.getByCode(workorder.getStruct_code());
|
||||
if (ObjectUtil.isEmpty(outStructAttr)) {
|
||||
throw new BadRequestException("仓位【" + workorder.getStruct_code() + "】不存在!");
|
||||
}
|
||||
MdMeMaterialbase materialbase = materialbaseService.getById(workorder.getMaterial_id());
|
||||
if (ObjectUtil.isEmpty(materialbase)) {
|
||||
throw new BadRequestException("物料【" + workorder.getMaterial_id() + "】不存在!");
|
||||
}
|
||||
GroupPlate groupPlate = groupplateService.getOne(new LambdaQueryWrapper<GroupPlate>()
|
||||
.eq(GroupPlate::getStoragevehicle_code, outStructAttr.getStoragevehicle_code())
|
||||
.eq(GroupPlate::getStatus, "02"));
|
||||
if (ObjectUtil.isEmpty(groupPlate)) {
|
||||
throw new BadRequestException("托盘[" + outStructAttr.getStoragevehicle_code() + "]组盘信息不存在!");
|
||||
}
|
||||
// 1、创建出库单、明细、分配明细
|
||||
JSONObject insertInvObj = new JSONObject();
|
||||
JSONArray tableData = new JSONArray();
|
||||
JSONObject table = new JSONObject();
|
||||
tableData.add(table);
|
||||
insertInvObj.put("stor_id", outStructAttr.getStor_id());
|
||||
insertInvObj.put("stor_code", outStructAttr.getStor_code());
|
||||
insertInvObj.put("bill_status", "10");
|
||||
insertInvObj.put("total_qty", workorder.getPlan_weight());
|
||||
insertInvObj.put("detail_count", 1);
|
||||
insertInvObj.put("bill_type", "1012");
|
||||
insertInvObj.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd"));
|
||||
insertInvObj.put("tableData", tableData);
|
||||
table.put("turnout_struct_code", outStructAttr.getStruct_code());
|
||||
table.put("turnout_sect_code", outStructAttr.getSect_code());
|
||||
table.put("turnout_sect_name", outStructAttr.getSect_name());
|
||||
table.put("sect_id", outStructAttr.getSect_id());
|
||||
table.put("struct_id", outStructAttr.getStruct_id());
|
||||
table.put("group_id", groupPlate.getGroup_id());
|
||||
table.put("storagevehicle_code", outStructAttr.getStoragevehicle_code());
|
||||
table.put("storagevehicle_type", workorder.getVehicle_type());
|
||||
table.put("material_id", materialbase.getMaterial_id());
|
||||
table.put("pcsn", groupPlate.getPcsn());
|
||||
table.put("qty", groupPlate.getQty());
|
||||
table.put("qty_unit_id", groupPlate.getQty_unit_id());
|
||||
table.put("qty_unit_name", groupPlate.getQty_unit_name());
|
||||
table.put("fronzen_qty", 0);
|
||||
table.put("status", "01");
|
||||
table.put("material_code", materialbase.getMaterial_code());
|
||||
table.put("material_name", materialbase.getMaterial_name());
|
||||
table.put("material_spec", materialbase.getMaterial_spec());
|
||||
String invId = outBillService.insertDtl(insertInvObj);
|
||||
// 调用手工分配
|
||||
JSONObject param = new JSONObject();
|
||||
JSONObject row = new JSONObject();
|
||||
JSONArray rows = new JSONArray();
|
||||
rows.add(row);
|
||||
param.put("rows", rows);
|
||||
IOStorInvDtl dtl = ioStorInvDtlMapper.selectOne(new LambdaQueryWrapper<IOStorInvDtl>()
|
||||
.eq(IOStorInvDtl::getIostorinv_id, invId));
|
||||
param.put("row", dtl);
|
||||
row.put("storagevehicle_code", outStructAttr.getStoragevehicle_code());
|
||||
row.put("pcsn", groupPlate.getPcsn());
|
||||
row.put("qty", groupPlate.getQty());
|
||||
row.put("qty_unit_name", groupPlate.getQty_unit_name());
|
||||
row.put("frozen_qty", groupPlate.getFrozen_qty());
|
||||
row.put("struct_id", outStructAttr.getStruct_id());
|
||||
row.put("struct_code", outStructAttr.getStruct_code());
|
||||
row.put("struct_name", outStructAttr.getStruct_name());
|
||||
row.put("sect_id", outStructAttr.getSect_id());
|
||||
row.put("sect_code", outStructAttr.getSect_code());
|
||||
row.put("sect_name", outStructAttr.getSect_name());
|
||||
row.put("material_code", groupPlate.getMaterial_code());
|
||||
row.put("material_name", groupPlate.getMaterial_name());
|
||||
row.put("edit", true);
|
||||
outBillService.manualDiv(param);
|
||||
|
||||
// 创建任务
|
||||
SchBasePoint outPoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getParent_point_code, pointCode)
|
||||
.eq(SchBasePoint::getRegion_code, "CKQ"));
|
||||
JSONObject taskParam = new JSONObject();
|
||||
taskParam.put("order_id", workorderId);
|
||||
taskParam.put("iostorinv_id", invId);
|
||||
taskParam.put("point_code", outPoint.getPoint_code());
|
||||
outBillService.allSetPoint(taskParam);
|
||||
// 创建任务
|
||||
SchBasePoint outPoint = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getParent_point_code, pointCode)
|
||||
.eq(SchBasePoint::getRegion_code, "CKQ"));
|
||||
JSONObject taskParam = new JSONObject();
|
||||
taskParam.put("order_id", workorderId);
|
||||
taskParam.put("iostorinv_id", invId);
|
||||
taskParam.put("point_code", outPoint.getPoint_code());
|
||||
outBillService.allSetPoint(taskParam);
|
||||
|
||||
// 3、工单状态修改,设置实际开始时间
|
||||
workorder.setWorkorder_status("3");
|
||||
workorder.setOperator(SecurityUtils.getCurrentNickName());
|
||||
workorder.setReal_weight(workorder.getPlan_weight());
|
||||
workorder.setRealproducestart_date(DateUtil.now());
|
||||
workorder.setUpdate_time(DateUtil.now());
|
||||
workorder.setUpdate_id(SecurityUtils.getCurrentUserId());
|
||||
workorder.setUpdate_name(SecurityUtils.getCurrentNickName());
|
||||
workorderService.updateById(workorder);
|
||||
// 3、工单状态修改,设置实际开始时间
|
||||
workorder.setWorkorder_status("3");
|
||||
workorder.setOperator(SecurityUtils.getCurrentNickName());
|
||||
workorder.setReal_weight(workorder.getPlan_weight());
|
||||
workorder.setRealproducestart_date(DateUtil.now());
|
||||
workorder.setUpdate_time(DateUtil.now());
|
||||
workorder.setUpdate_id(SecurityUtils.getCurrentUserId());
|
||||
workorder.setUpdate_name(SecurityUtils.getCurrentNickName());
|
||||
workorderService.updateById(workorder);
|
||||
} else {
|
||||
throw new BadRequestException("速度太快啦,稍后再试...");
|
||||
}
|
||||
} finally {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse getWeight(JSONObject whereJson) {
|
||||
// todo: 调用acs获取
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String pointCode = whereJson.getString("point_code");
|
||||
String workorder_id = whereJson.getString("workorder_id");
|
||||
@@ -227,6 +253,7 @@ public class PdaJBServiceImpl implements PdaJBService {
|
||||
if (ObjectUtil.isEmpty(param)) {
|
||||
throw new BadRequestException("请先定义 " + JB_STANDARD_ERROR + " 系统参数!");
|
||||
}
|
||||
// todo: 调用acs获取
|
||||
JSONObject res = new JSONObject();
|
||||
res.put("weight", "999.99");
|
||||
res.put("flag", "1");
|
||||
@@ -242,10 +269,12 @@ public class PdaJBServiceImpl implements PdaJBService {
|
||||
return PdaResponse.requestParamOk(res);
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public PdaResponse downMaterial(JSONObject whereJson) {
|
||||
// 用任务组的方式下发任务(3条任务)
|
||||
MDC.put(TagNameEnum.TAG_NAME.getTag(), TagNameEnum.PDA_JB_DOWN_MATERIAL.getTag());
|
||||
log.info("解包下料,请求参数:{}", whereJson);
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
@@ -254,57 +283,79 @@ public class PdaJBServiceImpl implements PdaJBService {
|
||||
String area = whereJson.getString("area");
|
||||
// 设备
|
||||
String pointCode = whereJson.getString("point_code");
|
||||
BigDecimal weight = whereJson.getBigDecimal("weight");
|
||||
String tpCode = whereJson.getString("tp_code");
|
||||
String ltCode = whereJson.getString("lt_code");
|
||||
String workorderId = whereJson.getString("workorder_id");
|
||||
RLock lock = redissonClient.getLock(pointCode);
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
BigDecimal weight = whereJson.getBigDecimal("weight");
|
||||
String tpCode = whereJson.getString("tp_code");
|
||||
String ltCode = whereJson.getString("lt_code");
|
||||
String workorderId = whereJson.getString("workorder_id");
|
||||
// 存在任务就不继续
|
||||
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
|
||||
.eq(SchBaseTask::getIs_delete, false)
|
||||
.and(ll -> ll.like(SchBaseTask::getPoint_code1, pointCode).or()
|
||||
.like(SchBaseTask::getPoint_code2, pointCode).or()
|
||||
.like(SchBaseTask::getPoint_code3, pointCode).or()
|
||||
.like(SchBaseTask::getPoint_code4, pointCode).or()));
|
||||
if (list.size() > 0) {
|
||||
throw new BadRequestException(pointCode + " 该点位已存在任务!");
|
||||
}
|
||||
PdmBdWorkorder workorder = workorderService.getById(workorderId);
|
||||
if (ObjectUtil.isEmpty(workorder)) {
|
||||
throw new BadRequestException("工单不存在!");
|
||||
}
|
||||
// 物料
|
||||
MdMeMaterialbase materialbase = materialbaseService.getById(workorder.getMaterial_id());
|
||||
if (ObjectUtil.isEmpty(materialbase)) {
|
||||
throw new BadRequestException("物料【" + workorder.getMaterial_id() + "】不存在!");
|
||||
}
|
||||
// 0、创建组盘
|
||||
GroupPlate groupPlate = new GroupPlate();
|
||||
groupPlate.setGroup_id(IdUtil.getStringId());
|
||||
groupPlate.setStoragevehicle_code(ltCode);
|
||||
// 料桶类型根据工单,工单是根据点位
|
||||
groupPlate.setStoragevehicle_type(workorder.getVehicle_type());
|
||||
groupPlate.setMaterial_id(materialbase.getMaterial_id());
|
||||
groupPlate.setPcsn(DateUtil.format(new Date(), "yyyy-MM-dd"));
|
||||
groupPlate.setQty(weight);
|
||||
groupPlate.setQty_unit_id("11");
|
||||
groupPlate.setQty_unit_name("kg");
|
||||
groupPlate.setFrozen_qty(BigDecimal.ZERO);
|
||||
groupPlate.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("组盘"));
|
||||
groupPlate.setCreate_id(currentUserId);
|
||||
groupPlate.setCreate_name(nickName);
|
||||
groupPlate.setCreate_time(now);
|
||||
groupplateService.save(groupPlate);
|
||||
|
||||
PdmBdWorkorder workorder = workorderService.getById(workorderId);
|
||||
if (ObjectUtil.isEmpty(workorder)) {
|
||||
throw new BadRequestException("工单不存在!");
|
||||
Dict dict = dictService.getDictByCodeAndValue("storagevehicle_type", workorder.getVehicle_type());
|
||||
Sectattr sect = sectattrService.findByCode(dict.getPara1());
|
||||
// 组装插入主表明细表的数据
|
||||
Map<String, Object> insertInvObj = buildInsertData(ltCode, workorder, materialbase, groupPlate, sect);
|
||||
String invId = inBillService.insertDtl(insertInvObj);
|
||||
|
||||
// 组织数据,调用分配货位
|
||||
JSONObject divObj = buildDivStructData(sect, invId);
|
||||
inBillService.divStruct(divObj);
|
||||
|
||||
// 一键设置,创建任务
|
||||
// 组建参数
|
||||
Map<String, Object> jsonMst = buildTaskData(pointCode, workorderId, invId);
|
||||
inBillService.divPoint(jsonMst);
|
||||
|
||||
// 工单完成
|
||||
workorder.setWorkorder_status("5");
|
||||
workorder.setRealproduceend_date(DateUtil.now());
|
||||
workorderService.updateById(workorder);
|
||||
}
|
||||
} finally {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
} else {
|
||||
throw new BadRequestException("速度太快啦,稍后再试...");
|
||||
}
|
||||
}
|
||||
// 物料
|
||||
MdMeMaterialbase materialbase = materialbaseService.getById(workorder.getMaterial_id());
|
||||
if (ObjectUtil.isEmpty(materialbase)) {
|
||||
throw new BadRequestException("物料【" + workorder.getMaterial_id() + "】不存在!");
|
||||
}
|
||||
// 0、创建组盘
|
||||
GroupPlate groupPlate = new GroupPlate();
|
||||
groupPlate.setGroup_id(IdUtil.getStringId());
|
||||
groupPlate.setStoragevehicle_code(ltCode);
|
||||
// 料桶类型根据工单,工单是根据点位
|
||||
groupPlate.setStoragevehicle_type(workorder.getVehicle_type());
|
||||
groupPlate.setMaterial_id(materialbase.getMaterial_id());
|
||||
groupPlate.setPcsn(DateUtil.format(new Date(), "yyyy-MM-dd"));
|
||||
groupPlate.setQty(weight);
|
||||
groupPlate.setQty_unit_id("11");
|
||||
groupPlate.setQty_unit_name("kg");
|
||||
groupPlate.setFrozen_qty(BigDecimal.ZERO);
|
||||
groupPlate.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("组盘"));
|
||||
groupPlate.setCreate_id(currentUserId);
|
||||
groupPlate.setCreate_name(nickName);
|
||||
groupPlate.setCreate_time(now);
|
||||
groupplateService.save(groupPlate);
|
||||
|
||||
Dict dict = dictService.getDictByCodeAndValue("storagevehicle_type", workorder.getVehicle_type());
|
||||
Sectattr sect = sectattrService.findByCode(dict.getPara1());
|
||||
// 组装插入主表明细表的数据
|
||||
Map<String, Object> insertInvObj = buildInsertData(ltCode, workorder, materialbase, groupPlate, sect);
|
||||
String invId = inBillService.insertDtl(insertInvObj);
|
||||
|
||||
// 组织数据,调用分配货位
|
||||
JSONObject divObj = buildDivStructData(sect, invId);
|
||||
inBillService.divStruct(divObj);
|
||||
|
||||
// 一键设置,创建任务
|
||||
// 组建参数
|
||||
Map<String, Object> jsonMst = buildTaskData(pointCode, workorderId, invId);
|
||||
inBillService.divPoint(jsonMst);
|
||||
|
||||
// 工单完成
|
||||
workorder.setWorkorder_status("5");
|
||||
workorder.setRealproduceend_date(DateUtil.now());
|
||||
workorderService.updateById(workorder);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
package org.nl.wms.sch_manage.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description: 任务完成枚举
|
||||
* @Date: 2023/6/13
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum TaskFinishedTypeEnum {
|
||||
/**
|
||||
* ACS自动完成
|
||||
*/
|
||||
AUTO_ACS("1", "ACS自动完成"),
|
||||
/**
|
||||
* PC手动完成
|
||||
*/
|
||||
MANUAL_PC("2", "PC手动完成"),
|
||||
/**
|
||||
* PDA手持
|
||||
*/
|
||||
MANUAL_PDA("3", "PDA手持");
|
||||
|
||||
private final String code;
|
||||
|
||||
private final String description;
|
||||
}
|
||||
@@ -70,7 +70,9 @@ public abstract class AbstractTask {
|
||||
// 查询未执行下发的任务
|
||||
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
|
||||
.eq(SchBaseTask::getTask_status, TaskStatus.CREATE.getCode()));
|
||||
.eq(SchBaseTask::getTask_status, TaskStatus.CREATED.getCode())
|
||||
.orderByAsc(SchBaseTask::getTask_group_id)
|
||||
.orderByAsc(SchBaseTask::getTask_group_seq));
|
||||
if (ObjectUtil.isEmpty(taskList)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -5,32 +5,35 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
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;
|
||||
import org.nl.wms.system_manage.enums.TagNameEnum;
|
||||
import org.nl.wms.warehouse_manage.enums.IOSConstant;
|
||||
import org.reflections.Reflections;
|
||||
import org.slf4j.MDC;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
@Order(value = 1)
|
||||
public class AutoTask {
|
||||
|
||||
/**
|
||||
* 任务服务
|
||||
*/
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
private static Set<Class<? extends AbstractTask>> subTypes;
|
||||
|
||||
/**
|
||||
* 任务工厂服务
|
||||
*/
|
||||
@Autowired
|
||||
private TaskFactory taskFactory;
|
||||
// 类加载时候执行扫描
|
||||
static {
|
||||
Reflections reflections = new Reflections("org.nl.wms.sch_manage.service.util.tasks");
|
||||
subTypes = reflections.getSubTypesOf(AbstractTask.class);
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public void run() {
|
||||
@@ -44,17 +47,19 @@ public class AutoTask {
|
||||
* 定时下发任务
|
||||
*/
|
||||
private void sendTask() {
|
||||
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
|
||||
.eq(SchBaseTask::getTask_status, TaskStatus.CREATE.getCode())
|
||||
.orderByAsc(SchBaseTask::getTask_group_seq));
|
||||
if (ObjectUtil.isEmpty(taskList)) {
|
||||
return;
|
||||
}
|
||||
// 整理下发acs参数
|
||||
for (SchBaseTask taskDao : taskList) {
|
||||
AbstractTask task = taskFactory.getTask(taskDao.getConfig_code());
|
||||
task.sendTaskOne(taskDao.getTask_id());
|
||||
}
|
||||
subTypes.forEach(clz -> {
|
||||
// 调用AbstractAcsTask类的每个子类的schedule()方法
|
||||
try {
|
||||
Object obj = SpringContextHolder.getBean(clz);
|
||||
Method m = obj.getClass().getMethod("schedule");
|
||||
m.invoke(obj);
|
||||
} catch (InvocationTargetException e) {
|
||||
e.printStackTrace();
|
||||
log.info("定时器执行失败:{}", e.getTargetException().getMessage());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.info("定时器执行失败:{}", e.getMessage());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,8 +14,10 @@ import org.nl.wms.pm_manage.service.dao.PdmBdWorkorder;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskconfigService;
|
||||
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.dao.SchBaseTaskconfig;
|
||||
import org.nl.wms.sch_manage.service.util.AbstractTask;
|
||||
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
|
||||
import org.nl.wms.warehouse_manage.enums.IOSEnum;
|
||||
@@ -45,6 +47,8 @@ public class JbDownAgvTask extends AbstractTask {
|
||||
private IOStorInvDisMapper ioStorInvDisMapper;
|
||||
@Resource
|
||||
private ISchBasePointService pointService;
|
||||
@Resource
|
||||
private ISchBaseTaskconfigService taskconfigService;
|
||||
@Override
|
||||
public String create(JSONObject param) {
|
||||
// 改造:多条任务
|
||||
@@ -81,6 +85,7 @@ public class JbDownAgvTask extends AbstractTask {
|
||||
@Override
|
||||
public AcsTaskDto sendAcsParam(String taskId) {
|
||||
SchBaseTask taskDao = taskService.getById(taskId);
|
||||
SchBaseTaskconfig taskconfig = taskconfigService.getTaskByConfigCode(taskDao.getConfig_code());
|
||||
|
||||
// 组织下发给acs的数据
|
||||
AcsTaskDto acsTaskDto = new AcsTaskDto();
|
||||
@@ -90,8 +95,11 @@ public class JbDownAgvTask extends AbstractTask {
|
||||
acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
|
||||
acsTaskDto.setStart_device_code2(taskDao.getPoint_code3());
|
||||
acsTaskDto.setNext_device_code2(taskDao.getPoint_code4());
|
||||
acsTaskDto.setTask_group_id(taskDao.getTask_group_id());
|
||||
acsTaskDto.setTask_group_seq(taskDao.getTask_group_seq());
|
||||
acsTaskDto.setPriority(taskDao.getPriority());
|
||||
acsTaskDto.setTask_type("1");
|
||||
acsTaskDto.setAgv_system_type(taskconfig.getAcs_task_type());
|
||||
acsTaskDto.setTask_type(taskconfig.getTask_type());
|
||||
return acsTaskDto;
|
||||
}
|
||||
|
||||
@@ -138,7 +146,7 @@ public class JbDownAgvTask extends AbstractTask {
|
||||
|
||||
private void finishTask(SchBaseTask taskObj) {
|
||||
// 任务完成
|
||||
taskObj.setRemark("等待最后一条任务完成");
|
||||
taskObj.setRemark("该任务已完成,等待最后一条任务完成后全部完成!");
|
||||
if ("1".equals(taskObj.getTask_group_seq().toString())) {
|
||||
// 开盖设置成有盖
|
||||
SchBasePoint khgPoint = pointService.getById(taskObj.getPoint_code2());
|
||||
@@ -154,9 +162,9 @@ public class JbDownAgvTask extends AbstractTask {
|
||||
pointService.updateById(jbjPoint);
|
||||
}
|
||||
if ("3".equals(taskObj.getTask_group_seq().toString())) {
|
||||
// 开盖设置成有盖
|
||||
// 开盖设置成空位
|
||||
SchBasePoint khgPoint = pointService.getById(taskObj.getPoint_code2());
|
||||
khgPoint.setPoint_status("2");
|
||||
khgPoint.setPoint_status("1");
|
||||
khgPoint.setUpdate_time(DateUtil.now());
|
||||
pointService.updateById(khgPoint);
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
|
||||
@@ -94,8 +94,6 @@ public class JbUpAgvTask extends AbstractTask {
|
||||
acsTaskDto.setPriority(taskDao.getPriority());
|
||||
acsTaskDto.setAgv_system_type(taskconfig.getAcs_task_type());
|
||||
acsTaskDto.setTask_type(taskconfig.getTask_type());
|
||||
acsTaskDto.setTask_group_id(taskDao.getTask_group_id());
|
||||
acsTaskDto.setTask_group_seq(taskDao.getTask_group_seq());
|
||||
return acsTaskDto;
|
||||
}
|
||||
|
||||
@@ -180,6 +178,11 @@ public class JbUpAgvTask extends AbstractTask {
|
||||
.set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code2())
|
||||
.set(Structattr::getOccupancy_state, 2)
|
||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code4()));
|
||||
} else {
|
||||
// 仓位设置空
|
||||
structattrService.update(new LambdaUpdateWrapper<Structattr>()
|
||||
.set(Structattr::getOccupancy_state, 1)
|
||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code4()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,14 @@ public enum TagNameEnum {
|
||||
* LMS系统
|
||||
*/
|
||||
LMS("LMS系统"),
|
||||
/***
|
||||
* 自动下发任务到ACS
|
||||
*/
|
||||
AUTO_TASK_SEND("自动下发任务到ACS"),
|
||||
/**
|
||||
* 解包手持下料
|
||||
*/
|
||||
PDA_JB_DOWN_MATERIAL("解包手持下料"),
|
||||
/**
|
||||
* 标记符号
|
||||
*/
|
||||
|
||||
@@ -103,9 +103,9 @@
|
||||
<logger name="org.hibernate" level="ERROR" additivity="true">
|
||||
<appender-ref ref="asyncFileAppender"/>
|
||||
</logger>
|
||||
<logger name="org.quartz" level="ERROR" additivity="true">
|
||||
<appender-ref ref="asyncFileAppender"/>
|
||||
</logger>
|
||||
<!-- <logger name="org.quartz" level="ERROR" additivity="true">-->
|
||||
<!-- <appender-ref ref="asyncFileAppender"/>-->
|
||||
<!-- </logger>-->
|
||||
<logger name="com.google" level="ERROR" additivity="true">
|
||||
<appender-ref ref="asyncFileAppender"/>
|
||||
</logger>
|
||||
|
||||
Reference in New Issue
Block a user