This commit is contained in:
2023-06-15 14:20:20 +08:00
36 changed files with 534 additions and 111 deletions

View File

@@ -19,6 +19,7 @@ import java.util.Map;
public class PointEvent<T> extends PublishEvent {
private String type;
private String acs_task_type;
private String point_code1;
private String point_code2;
private String vehicle_code;

View File

@@ -17,7 +17,7 @@ public class CodeUtil{
String codeId = service.queryIdByCode(ruleCode);
RedissonUtils.lock(() -> {
code[0] = service.codeDemo(map);
}, codeId, 3);
}, codeId, 1);
return code[0];
}
}

View File

@@ -19,6 +19,7 @@ public interface WmsToAcsService {
Map<String, Object> issueTaskToAcs(JSONArray arr);
Map<String, Object> issueTaskToAcs2(JSONArray arr);
Map<String, Object> issueTaskToAcs3(JSONArray arr);
/**
* WMS客户端--->ACS服务端

View File

@@ -138,10 +138,11 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{
String status = row.getString("status");
// 任务处理类
try {
AbstractAcsTask taskHandler = (AbstractAcsTask)SpringContextHolder.getBean(Class.forName(processing_class));
if (taskHandler!=null){
taskHandler.updateTaskStatus(row,status);
if (ObjectUtil.isNotEmpty(processing_class)) {
AbstractAcsTask taskHandler = (AbstractAcsTask)SpringContextHolder.getBean(Class.forName(processing_class));
if (taskHandler!=null){
taskHandler.updateTaskStatus(row,status);
}
}
//发布一个任务执行事件:服务跟任务不一样,可以同事存在
TaskEvent event = TaskEvent.builder()

View File

@@ -66,6 +66,32 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{
return AcsUtil.notifyAcs(api, form);
}
@Override
public Map<String, Object> issueTaskToAcs3(JSONArray arr) {
JSONArray form = new JSONArray();
for (Object o : arr) {
JSONObject task = (JSONObject) o;
Boolean is_send = task.getBoolean("is_send");
String send = "1";
if (!is_send) send = "0";
JSONObject param = new JSONObject(MapOf.of("task_id", task.getString("task_id")
, "task_code", task.getString("task_code")
, "task_group_id", task.getString("task_group_id")
, "start_point_code", task.getString("point_code1")
, "next_point_code", task.getString("point_code2")
, "task_type", task.getString("acs_task_type")
, "priority", task.getString("priority")
, "is_send", send
, "vehicle_code", task.getString("vehicle_code")
, "agv_system_type", task.getString("agv_system_type")
));
form.add(param);
}
String api = "api/wms/task";
return AcsUtil.notifyAcs(api, form);
}
@Override
public Map<String, Object> cancelToAcs(JSONArray arr) {
String api = "api/wms/cancelTask";

View File

@@ -1,6 +1,8 @@
package org.nl.wms.masterdata_manage.service.vehicle.dao;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
import java.io.Serializable;
@@ -25,6 +27,7 @@ public class MdPbStoragevehicleinfo implements Serializable {
/**
* 载具标识
*/
@TableId
private String storagevehicle_id;
/**

View File

@@ -40,4 +40,10 @@ public interface IStIvtStructattrService extends IService<StIvtStructattr> {
* @param jo
*/
JSONObject getSectCascader(JSONObject jo);
/**
* 查询超限货位
* @param jo
*/
StIvtStructattr getExceedAttr(JSONObject jo);
}

View File

@@ -1,5 +1,6 @@
package org.nl.wms.masterdata_manage.storage.service.storage.dao.mapper;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
@@ -13,4 +14,5 @@ import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
*/
public interface StIvtStructattrMapper extends BaseMapper<StIvtStructattr> {
StIvtStructattr getExceedAttr(JSONObject jo);
}

View File

@@ -2,4 +2,35 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.masterdata_manage.storage.service.storage.dao.mapper.StIvtStructattrMapper">
<select id="getExceedAttr" resultType="org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr">
SELECT
a.*
FROM
st_ivt_structattr a
INNER JOIN st_ivt_structattr b ON a.struct_id = b.control_code
WHERE
a.is_used = '1'
and a.lock_type = '0'
and IFNULL(a.storagevehicle_code,'') = ''
and b.is_used = '1'
and b.lock_type = '0'
and IFNULL(b.storagevehicle_code,'') = ''
<if test="stor_id != null and stor_id != ''">
and a.stor_id = #{stor_id}
</if>
<if test="sect_id != null and sect_id != ''">
and a.sect_id = #{sect_id}
</if>
<if test="stor_id != null and stor_id != ''">
and b.stor_id = #{stor_id}
</if>
<if test="sect_id != null and sect_id != ''">
and b.sect_id = #{sect_id}
</if>
ORDER BY a.struct_code
LIMIT 1
</select>
</mapper>

View File

@@ -117,6 +117,11 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
return result;
}
@Override
public StIvtStructattr getExceedAttr(JSONObject jo) {
return this.baseMapper.getExceedAttr(jo);
}
@Override
public void changeActive(JSONObject form) {
Assert.notNull(form,"请求参数不能为空");

View File

@@ -28,7 +28,7 @@ public class PointListener extends AbstraceListener<PointEvent> {
task.put("task_id", task_id);
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
task.put("task_type", event.getType());
task.put("acs_task_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode());
task.put("acs_task_type", event.getAcs_task_type());
task.put("task_status", TaskStatusEnum.CREATED.getCode());
task.put("point_code1", event.getPoint_code1());
task.put("point_code2", event.getPoint_code2());
@@ -43,6 +43,7 @@ public class PointListener extends AbstraceListener<PointEvent> {
task.put("update_optname", SecurityUtils.getCurrentNickName());
task.put("create_time", DateUtil.now());
task.put("update_time", DateUtil.now());
task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode());
task.put("priority", "1");}
taskService.save(task.toJavaObject(SchBaseTask.class));
return task_id;

View File

@@ -206,8 +206,9 @@ public class SpeEmpTask extends AbstractAcsTask {
if (!("fall_finish"+task.getTask_id()).equals(device.getRemark())){
iDeviceService.update(new UpdateWrapper<PdmBiDevice>()
.set("material_id", task.getMaterial_id())
.set("deviceinstor_qty",device.getDeviceinstor_qty().add(task.getMaterial_qty()))
.set("remark","fall_finish"+task.getTask_id())
.eq("device_code", task.getPoint_code2()));
.eq("device_code", device.getDevice_code()));
}
}
break;

View File

@@ -171,34 +171,18 @@ public class SpeFullTask extends AbstractAcsTask {
.set("update_name","acs")
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
Map<String, String> extParam = (Map)param.get("ext_param");
//取货完成/放货完成暂不处理箱子
if (extParam.get("put_finish") != null){
log.info("放货完成:{},vechile_code:{}",task.getTask_id(),task.getVehicle_code2());
// pointService.update(new UpdateWrapper<SchBasePoint>()
// .set("vehicle_code",task.getVehicle_code2())
// .eq("point_code",task.getPoint_code3()));
}
//take_finish 取满 fall_finish 倒料 put_finish放空
if (extParam.get("fall_finish") != null){
PdmBiDevice one = deviceService.getOne(new QueryWrapper<PdmBiDevice>().eq("device_code", task.getPoint_code2()));
//TODO:添加任务唯一性校验防止重复更新
PdmBiDevice one = deviceService.getDeviceByPointCode(task.getPoint_code2());
if (!("fall_finish"+task.getTask_id()).equals(one.getRemark())){
deviceService.update(new UpdateWrapper<PdmBiDevice>()
.set("material_id", task.getMaterial_id())
.set("deviceinstor_qty",one.getDeviceinstor_qty().add(task.getMaterial_qty()))
.set("remark","fall_finish"+task.getTask_id())
.eq("device_code", task.getPoint_code2()));
.eq("device_code", one.getDevice_code()));
}
}
if (extParam.get("take_finish") != null){
log.info("取货完成:{},vechile_code:{}",task.getTask_id(),task.getVehicle_code2());
// pointService.update(new UpdateWrapper<SchBasePoint>()
// .set("vehicle_code","")
// .eq("point_code",task.getPoint_code3()));
// pointService.update(new UpdateWrapper<SchBasePoint>()
// .set("vehicle_code",task.getVehicle_code2())
// .eq("point_code",task.getPoint_code1()));
}
break;
case STATUS_FINISH:
taskService.update(new UpdateWrapper<SchBaseTask>()

View File

@@ -254,12 +254,14 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
// 循环获取的数据
List<PdmProduceWorkorder> data = new ArrayList<>();
Map<String, String> errorMap = new HashMap();
List<String> workprodures = new ArrayList<>();
List<String> materialSpecs = new ArrayList<>();
List<String> persons = new ArrayList<>();
row:
for (int i = 0; i < read.size(); i++) {
List<Object> list = read.get(i);
if (ObjectUtil.isEmpty(list)) {
continue;
}
if (ObjectUtil.isEmpty(list)) { continue; }
PdmProduceWorkorder workorder = new PdmProduceWorkorder();
packageForm(workorder);
for (int j = 0; j < list.size(); j++) {
@@ -284,26 +286,12 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
}
if (j == 2) {
//物料
List<MdMeMaterialbase> material_specs = materialbaseService.list(new QueryWrapper<MdMeMaterialbase>().eq("material_spec", col));
if (CollectionUtils.isEmpty(material_specs)) {
errorMap.put("" + (i + 1) + "行,第" + (j + 1) + "", col + "物料规格对应物料信息不存在");
} else {
Optional<MdMeMaterialbase> first = material_specs.stream().filter(mdMeMaterialbase -> mdMeMaterialbase.getMaterial_code().contains("S")
&& Pattern.matches("^[0-9]*$", mdMeMaterialbase.getMaterial_name().substring(mdMeMaterialbase.getMaterial_name().length() - 1))
).findFirst();
if (!first.isPresent()) {
errorMap.put("" + (i + 1) + "行,第" + (j + 1) + "", col + "物料规格对应物料信息不存在");
}
workorder.setMaterial_id(first.get().getMaterial_id());
}
materialSpecs.add(col);
workorder.setMaterial_id(col);
}
if (j == 3) {
PdmBiWorkprocedure workprocedure = workprocedureService.getOne(new QueryWrapper<PdmBiWorkprocedure>().eq("workprocedure_name", col));
if (ObjectUtil.isEmpty(workprocedure)) {
errorMap.put("" + (i + 1) + "行,第" + (j + 1) + "", col + "工序名称是否正确");
} else {
workorder.setWorkprocedure_id(workprocedure.getWorkprocedure_id());
}
workprodures.add(col);
workorder.setWorkprocedure_id(col);
}
if (j == 4) {
//设备 A1_TW_
@@ -315,13 +303,8 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
workorder.setMaterial_weight(bigDecimal.setScale(3, RoundingMode.HALF_UP));
}
if (j == 8) {
//操作工
SysUser user = userService.getOne(new QueryWrapper<SysUser>().eq("person_name", col));
if (ObjectUtil.isEmpty(user)) {
errorMap.put("" + (i + 1) + "行,第" + (j + 1) + "", col + " 操作工没有账号");
} else {
workorder.setCurrent_produce_person_id(user.getUser_id());
}
persons.add(col);
workorder.setCurrent_produce_person_id(col);
}
if (j == 9) {
workorder.setPlan_qty(new BigDecimal(Long.valueOf(col)));
@@ -334,7 +317,46 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
if (CollectionUtils.isEmpty(errorMap)) {
data.add(workorder);
}
;
}
List<MdMeMaterialbase> tmp_material_specs = materialbaseService.list(new QueryWrapper<MdMeMaterialbase>().in("material_spec", materialSpecs));
List<SysUser> tmp_sysUsers = userService.list(new QueryWrapper<SysUser>().in("person_name", persons));
List<PdmBiWorkprocedure> tmp_workprocedure_names = workprocedureService.list(new QueryWrapper<PdmBiWorkprocedure>().in("workprocedure_name", workprodures));
Map<String, PdmBiWorkprocedure> collect = tmp_workprocedure_names.stream().collect(HashMap::new, (k, v) -> k.put(v.getWorkprocedure_name(), v), HashMap::putAll);
Map<String, SysUser> users = tmp_sysUsers.stream().collect(HashMap::new, (k, v) -> k.put(v.getPerson_name(), v), HashMap::putAll);
Map<String, List<MdMeMaterialbase>> materialspecs = tmp_material_specs.stream().collect(Collectors.groupingBy(MdMeMaterialbase::getMaterial_spec));
for (int i = 0; i < data.size(); i++) {
PdmProduceWorkorder workorder = data.get(i);
SysUser sysUser = users.get(workorder.getCurrent_produce_person_id());
if (sysUser==null){
errorMap.put(""+(i+1)+"行:","账号:"+workorder.getCurrent_produce_person_id()+"不存在");
}else {
workorder.setCurrent_produce_person_id(sysUser.getUser_id());
}
PdmBiWorkprocedure workprocedure = collect.get(workorder.getWorkprocedure_id());
if (workprocedure==null){
errorMap.put(""+(i+1)+"行:","工序名称:"+workorder.getWorkprocedure_id()+"不存在");
}else {
workorder.setWorkorder_id(workprocedure.getWorkprocedure_id());
}
List<MdMeMaterialbase> mdMeMaterialbases = materialspecs.get(workorder.getMaterial_id());
if (!CollectionUtils.isEmpty(mdMeMaterialbases)){
if (mdMeMaterialbases.size() == 1){
workorder.setMaterial_id(mdMeMaterialbases.get(0).getMaterial_id());
}else {
Optional<MdMeMaterialbase> first = mdMeMaterialbases.stream().filter(mdMeMaterialbase -> mdMeMaterialbase.getMaterial_code().contains("S")
&& Pattern.matches("^[0-9]*$", mdMeMaterialbase.getMaterial_name().substring(mdMeMaterialbase.getMaterial_name().length() - 1))
).findFirst();
if (first.isPresent()){
workorder.setMaterial_id(first.get().getMaterial_id());
}else {
errorMap.put(""+(i+1)+"行:","物料规格:"+workorder.getMaterial_id()+"不存在");
}
}
}else {
errorMap.put(""+(i+1)+"行:","物料规格:"+workorder.getMaterial_id()+"不存在");
}
}
if (!CollectionUtils.isEmpty(errorMap)) {
throw new BadRequestException(JSON.toJSONString(errorMap));

View File

@@ -17,6 +17,8 @@ import java.util.Map;
public enum IOSEnum {
//出入库类型
IO_TYPE(MapOf.of("入库", "0", "出库", "1")),
//是否
IS_USED(MapOf.of("", "1", "", "0")),
//单据类型
BILL_TYPE(MapOf.of("生产入库", "11", "手工入库", "12", "原料入库", "13"
, "领料出库", "21", "销售出库", "22", "手工出库", "23")),
@@ -25,7 +27,7 @@ public enum IOSEnum {
//单据状态
WORK_STATUS(MapOf.of("未生成", "00", "生成", "10", "执行中", "20", "完成", "99")),
//锁定类型
LOCK_TYPE(MapOf.of("未锁定", "0", "入库锁", "1", "出库锁", "2","盘点锁", "3","损溢锁", "4")),
LOCK_TYPE(MapOf.of("未锁定", "0", "入库锁", "1", "出库锁", "2","盘点锁", "3","损溢锁", "4","其他锁","99")),
;
private Map<String, String> code;

View File

@@ -1,5 +1,6 @@
package org.nl.wms.storage_manage.productmanage.controller.iostorInv;
import cn.dev33.satoken.annotation.SaIgnore;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -141,5 +142,13 @@ public class IStivtlostorivnCpOutController {
return new ResponseEntity<>(HttpStatus.OK);
}
@GetMapping("/initAttr")
@Log("初始化仓位")
@ApiOperation("初始化仓位")
@SaIgnore
public ResponseEntity<Object> initAttr(){
iStIvtIostorinvCpOutService.initAttr();
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -178,4 +178,9 @@ public interface IStIvtIostorinvCpOutService extends IService<StIvtIostorinvCp>
* }
*/
void confirmTask(JSONObject whereJson);
/*
初始化仓位
*/
void initAttr();
}

View File

@@ -30,6 +30,7 @@ import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleextServic
import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleinfoService;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbBucketrecord;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleext;
import org.nl.wms.masterdata_manage.service.vehicle.dao.MdPbStoragevehicleinfo;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstorattr;
@@ -385,6 +386,8 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
PointEvent event = PointEvent.builder()
.type(AcsTaskEnum.TASK_STRUCT_CP_OUT.getCode())
.acs_task_type("8")
.task_group_id(IdUtil.getStringId())
.point_code1(disDao.getStruct_code())
.point_code2(pointDao.getPoint_code())
.vehicle_code(disDao.getStoragevehicle_code())
@@ -457,7 +460,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
.findAny().get();
iStIvtStructivtCpService.UpdateIvt(ivtDataParam(dao,ChangeIvtUtil.SUBFROZEN_SUBIVT_QTY,dtlDao.getSource_billdtl_id()));
// 3解锁
// 3解锁
unLockNext(dao.getStruct_id());
// 4) 更新载具扩展属性
@@ -571,7 +574,7 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
mst_jo.put("is_out", true);
iostorinvdisCpService.confirm(mst_jo);
} else {
} else if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
// 更新任务为执行中
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
@@ -585,6 +588,11 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
.eq(StIvtIostorinvdisCp::getTask_id, task_id)
.set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("执行中"))
);
} if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) {
// 取消任务
JSONObject param = new JSONObject();
param.put("iostorinvdis_id",disDao.getIostorinvdis_id());
delTask(param);
}
}
@@ -614,12 +622,11 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
public void sendTask(JSONObject whereJson) {
SchBaseTask taskDao = iSchBaseTaskService.getById(whereJson.getString("task_id"));
JSONArray paramArr = new JSONArray();
paramArr.add(JSON.parseObject(JSONUtil.toJsonStr(taskDao)));
JSONArray param = new JSONArray();
param.add(JSON.parseObject(JSONUtil.toJsonStr(taskDao)));
// 1.下发任务
WmsToAcsService bean = SpringContextHolder.getBean(WmsToAcsService.class);
bean.issueTaskToAcs2(paramArr);
bean.issueTaskToAcs3(param);
// 2.更新任务状态
taskDao.setTask_status(TaskStatusEnum.ISSUE.getCode());
@@ -634,6 +641,45 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
taskOperate(whereJson);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void initAttr() {
// 总共9排 一排15列 5层 按照成品库区sect_code: KQ001 sect_name: 成品库区 sect_id: 1528631043496742912
for (int i = 1; i < 10; i++) {
for (int j = 1; j < 16; j++) {
for (int k = 1; k < 6; k++) {
StIvtStructattr dao = new StIvtStructattr();
dao.setStruct_id(IdUtil.getStringId());
if (j<10) {
dao.setStruct_code("L0"+i+"-0"+j+"-0"+k);
} else {
dao.setStruct_code("L0"+i + "-" + j + "-0"+k);
}
dao.setStruct_name(i+""+j+""+k+"");
dao.setSimple_name(i+""+j+""+k+"");
dao.setSect_id("1528631043496742912");
dao.setSect_code("KQ001");
dao.setSect_name("成品库区");
dao.setStor_id("1528627995269533696");
dao.setStor_code("F102");
dao.setStor_name("紫铜成品仓库");
dao.setStor_type("4");
dao.setIs_tempstruct(false);
dao.setCreate_id(SecurityUtils.getCurrentUserId());
dao.setCreate_name(SecurityUtils.getCurrentNickName());
dao.setCreate_time(new Date());
dao.setIs_used(true);
dao.setLock_type("0");
dao.setXqty(BigDecimal.valueOf(i));
dao.setYqty(BigDecimal.valueOf(j));
dao.setZqty(BigDecimal.valueOf(k));
dao.setMaterial_height_type("1");
iStIvtStructattrService.save(dao);
}
}
}
}
@NotNull
private StIvtIostorinvCp packageMstForm(StIvtIostorinvCp stIvtIostorinvCp,JSONObject whereJson,Boolean isUpdate) {
JSONArray rows = whereJson.getJSONArray("tableData");
@@ -808,6 +854,21 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
StIvtStructattr attrDao = iStIvtStructattrService.getById(struct_id);
if (ObjectUtil.isEmpty(attrDao)) throw new BadRequestException("仓位不存在!");
// 判断载具是否超限
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getOne(
new QueryWrapper<MdPbStoragevehicleinfo>().lambda()
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code, attrDao.getStoragevehicle_code())
);
if (StrUtil.equals(vehicleDao.getOverstruct_type(),IOSEnum.IS_USED.code(""))) {
// 解锁超限货位
iStIvtStructattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(StIvtStructattr::getControl_code,attrDao.getStruct_id())
);
}
attrDao.setInv_code("");
attrDao.setInv_type("");
attrDao.setInv_id("");
@@ -816,5 +877,4 @@ public class StIvtIostorinvCpOutServiceImpl extends ServiceImpl<StIvtIostorinvCp
iStIvtStructattrService.updateById(attrDao);
}
}

View File

@@ -425,14 +425,23 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
StIvtStructattr attrDao = new StIvtStructattr();
// 1.根据仓库、库区找出一个仓位
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getById(disDao.getStoragevehicle_id());
if (ObjectUtil.isEmpty(struct_id)) {
/* 自动分配 */
whereJson.put("rule_type", RuleUtil.PRODUCTION_IN_1);
// 判断载具是否超限
if (StrUtil.equals(vehicleDao.getOverstruct_type(),IOSEnum.IS_USED.code(""))) {
whereJson.put("rule_type", RuleUtil.PRODUCTION_IN_2);
} else {
whereJson.put("rule_type", RuleUtil.PRODUCTION_IN_1);
}
attrDao = divRuleCpService.divRuleIn(whereJson);
} else {
/* 手动分配 */
if (StrUtil.equals(vehicleDao.getOverstruct_type(),IOSEnum.IS_USED.code("")))
throw new BadRequestException("载具超限请自动分配!");
// 查出对应仓位
attrDao = iStIvtStructattrService.getById(struct_id);
@@ -516,6 +525,18 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
.eq(StIvtStructattr::getStruct_code, disDao.getStruct_code())
);
// 判断载具是否超限
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getById(disDao.getStoragevehicle_id());
if (StrUtil.equals(vehicleDao.getOverstruct_type(),IOSEnum.IS_USED.code(""))) {
// 解锁超限货位
iStIvtStructattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(StIvtStructattr::getControl_code,disDao.getStruct_id())
);
}
// 更新库存
iStIvtStructivtCpService.UpdateIvt(ivtDataParam(disDao,ChangeIvtUtil.SUBWAREHOUSING_QTY,null));
@@ -571,6 +592,8 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
PointEvent event = PointEvent.builder()
.type(AcsTaskEnum.TASK_STRUCT_CP_IN.getCode())
.acs_task_type("8")
.task_group_id(IdUtil.getStringId())
.point_code2(disDao.getStruct_code())
.point_code1(pointDao.getPoint_code())
.vehicle_code(disDao.getStoragevehicle_code())
@@ -696,7 +719,7 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
mst_jo.put("is_out", false);
iostorinvdisCpService.confirm(mst_jo);
} else {
} else if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
// 更新任务为执行中
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
@@ -709,6 +732,11 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
.eq(StIvtIostorinvdisCp::getTask_id, task_id)
.set(StIvtIostorinvdisCp::getWork_status, IOSEnum.WORK_STATUS.code("执行中"))
);
} else if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) {
// 取消任务
JSONObject param = new JSONObject();
param.put("iostorinvdis_id",disDao.getIostorinvdis_id());
delTask(param);
}
}
@@ -736,13 +764,13 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
@Override
@Transactional(rollbackFor = Exception.class)
public void sendTask(JSONObject whereJson) {
SchBaseTask taskDao = iSchBaseTaskService.getById(whereJson.getString("task_id"));
JSONArray paramArr = new JSONArray();
paramArr.add(JSON.parseObject(JSONUtil.toJsonStr(taskDao)));
SchBaseTask taskDao = iSchBaseTaskService.getById(whereJson.getString("task_id"));
JSONArray param = new JSONArray();
param.add(JSON.parseObject(JSONUtil.toJsonStr(taskDao)));
// 1.下发任务
WmsToAcsService bean = SpringContextHolder.getBean(WmsToAcsService.class);
bean.issueTaskToAcs2(paramArr);
bean.issueTaskToAcs3(param);
// 2.更新任务状态
taskDao.setTask_status(TaskStatusEnum.ISSUE.getCode());

View File

@@ -19,7 +19,7 @@
dtl.struct_id,
SUM( dtl.mol_qty ) AS total_qty,
dtl.mol_id,
dtl.bucketunique,
MAX(dtl.bucketunique) AS bucketunique,
MAX(dtl.storagevehicle_code) AS storagevehicle_code
FROM
st_ivt_moreorlessdtl_cp dtl

View File

@@ -8,6 +8,12 @@ public class RuleUtil {
*/
public static final String PRODUCTION_IN_1 = "in_1";
/*
* 入库分配:
* 按照仓位顺序找到一个成品仓一层两个货位
*/
public static final String PRODUCTION_IN_2 = "in_2";
/*
* 出库分配:
* 根据 仓库、库区、物料、销售单找库存

View File

@@ -3,6 +3,7 @@ package org.nl.wms.storage_manage.productmanage.util.impl;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
@@ -50,13 +51,23 @@ public class DivRuleCpServiceImpl implements DivRuleCpService {
new QueryWrapper<StIvtStructattr>().lambda()
.eq(StIvtStructattr::getStor_id, stor_id)
.eq(StIvtStructattr::getSect_id, sect_id)
.isNull(StIvtStructattr::getStoragevehicle_code)
.ne(StIvtStructattr::getStoragevehicle_code,"")
.eq(StIvtStructattr::getIs_used, "1") //TODO 暂时写死
.eq(StIvtStructattr::getIs_used, IOSEnum.IS_USED.code(""))
.eq(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(StIvtStructattr::getStoragevehicle_code,"")
.orderByAsc(StIvtStructattr::getStruct_code)
,false);
break;
case RuleUtil.PRODUCTION_IN_2 :
attrDao = iStIvtStructattrService.getExceedAttr(whereJson);
// 不为空则锁住对应货位
if (ObjectUtil.isNotEmpty(attrDao))
iStIvtStructattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("其他锁"))
.eq(StIvtStructattr::getStruct_id, attrDao.getControl_code())
);
break;
}
return attrDao;

View File

@@ -2,6 +2,9 @@ package org.nl.wms.storage_manage.semimanage.service.iostorInv.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -19,6 +22,8 @@ import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtBsrealstorattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtSectattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService;
@@ -26,6 +31,8 @@ import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtBsrealstora
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtSectattr;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.product_manage.sch.manage.TaskStatusEnum;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.storage_manage.CHANGE_BILL_TYPE_ENUM;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.basedata.service.record.service.IStIvtStructivtflowService;
@@ -70,6 +77,8 @@ public class StIvtIostorinvBcpOutServiceImpl extends ServiceImpl<StIvtIostorinvB
private DivRuleCpService divRuleCpService;
@Autowired
private IStIvtSectattrService sectattrService;
@Autowired
private ISchBaseTaskService iSchBaseTaskService; // 任务表服务
@Override
@@ -199,6 +208,7 @@ public class StIvtIostorinvBcpOutServiceImpl extends ServiceImpl<StIvtIostorinvB
PointEvent event = PointEvent.builder()
.type(CHANGE_BILL_TYPE_ENUM.IOSTORINV_IN_SEND.getCode())
.acs_task_type("7")
.point_code1(mst.getPoint_code())
.point_code2(mst.getStruct_code())
.vehicle_code(mst.getStoragevehicle_code())
@@ -213,9 +223,27 @@ public class StIvtIostorinvBcpOutServiceImpl extends ServiceImpl<StIvtIostorinvB
mst.setUpdate_id(SecurityUtils.getCurrentUserId());
mst.setUpdate_name(SecurityUtils.getCurrentNickName());
this.updateById(mst);
// 下发任务
sendTask(mst.getTask_id());
return mst.getTask_id();
}
public void sendTask(String task_id) {
SchBaseTask taskDao = iSchBaseTaskService.getById(task_id);
JSONArray param = new JSONArray();
param.add(JSON.parseObject(JSONUtil.toJsonStr(taskDao)));
// 1.下发任务
WmsToAcsService bean = SpringContextHolder.getBean(WmsToAcsService.class);
bean.issueTaskToAcs3(param);
// 2.更新任务状态
taskDao.setTask_status(TaskStatusEnum.ISSUE.getCode());
iSchBaseTaskService.updateById(taskDao);
}
private void checkParam(StIvtIostorinvBcp mst) {
if (mst == null || mst.getIs_delete() == true) {
throw new BadRequestException("单据不存在");
@@ -247,14 +275,48 @@ public class StIvtIostorinvBcpOutServiceImpl extends ServiceImpl<StIvtIostorinvB
String status = form.getString("status");
StIvtIostorinvBcp mst = this.getOne(new QueryWrapper<StIvtIostorinvBcp>().lambda().eq(StIvtIostorinvBcp::getTask_id, task_id));
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
// 完成
this.update(new UpdateWrapper<StIvtIostorinvBcp>().lambda().eq(StIvtIostorinvBcp::getTask_id, task_id)
.set(StIvtIostorinvBcp::getWork_status, IOSEnum.WORK_STATUS.code("完成")));
JSONObject mst_jo = new JSONObject();
mst_jo.put("iostorinv_id", mst.getIostorinv_id());
this.confirm(mst_jo);
} else {
} else if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
// 执行中
this.update(new UpdateWrapper<StIvtIostorinvBcp>().lambda().eq(StIvtIostorinvBcp::getTask_id, task_id)
.set(StIvtIostorinvBcp::getWork_status, IOSEnum.WORK_STATUS.code("执行中")));
// 更新任务
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getTask_status,TaskStatusEnum.EXECUTING.getCode())
.eq(SchBaseTask::getTask_id,task_id )
);
} else {
// 取消
delTask(task_id);
}
}
private void delTask(String task_id) {
StIvtIostorinvBcp mstDao = this.getOne(
new QueryWrapper<StIvtIostorinvBcp>().lambda()
.eq(StIvtIostorinvBcp::getTask_id, task_id)
);
// 删除任务
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode())
.eq(SchBaseTask::getTask_id, mstDao.getTask_id())
);
// 更新主表
mstDao.setTask_id("");
mstDao.setWork_status(IOSEnum.WORK_STATUS.code("未生成"));
mstDao.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
this.updateById(mstDao);
}
}

View File

@@ -2,6 +2,9 @@ package org.nl.wms.storage_manage.semimanage.service.iostorInv.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -19,10 +22,14 @@ import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtSectattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtSectattr;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.product_manage.sch.manage.TaskStatusEnum;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.CHANGE_BILL_TYPE_ENUM;
import org.nl.wms.storage_manage.basedata.service.record.dto.StIvtStructivtflowDto;
@@ -73,6 +80,8 @@ public class StIvtIostorinvBcpServiceImpl extends ServiceImpl<StIvtIostorinvBcpM
private DivRuleCpService divRuleCpService;
@Autowired
private IStIvtSectattrService sectattrService;
@Autowired
private ISchBaseTaskService iSchBaseTaskService; // 任务表服务
@Override
@@ -186,6 +195,7 @@ public class StIvtIostorinvBcpServiceImpl extends ServiceImpl<StIvtIostorinvBcpM
}
@Override
@Transactional
public String confirmTask(JSONObject form) {
Assert.notNull(new Object[]{form, form.get("iostorinv_id")}, "请求参数不能为空");
StIvtIostorinvBcp mst = this.getById(form.getString("iostorinv_id"));
@@ -219,6 +229,7 @@ public class StIvtIostorinvBcpServiceImpl extends ServiceImpl<StIvtIostorinvBcpM
PointEvent event = PointEvent.builder()
.type(AcsTaskEnum.TASK_STRUCT_IN.getCode())
.acs_task_type("7")
.point_code1(mst.getPoint_code())
.point_code2(stIvtStructattr.getStruct_code())
.vehicle_code(mst.getStoragevehicle_code())
@@ -233,6 +244,9 @@ public class StIvtIostorinvBcpServiceImpl extends ServiceImpl<StIvtIostorinvBcpM
mst.setUpdate_id(SecurityUtils.getCurrentUserId());
mst.setUpdate_name(SecurityUtils.getCurrentNickName());
this.updateById(mst);
// 下发任务
sendTask(mst.getTask_id());
return mst.getTask_id();
}
@@ -277,10 +291,65 @@ public class StIvtIostorinvBcpServiceImpl extends ServiceImpl<StIvtIostorinvBcpM
//执行中
this.update(new UpdateWrapper<StIvtIostorinvBcp>().lambda().eq(StIvtIostorinvBcp::getTask_id, task_id)
.set(StIvtIostorinvBcp::getWork_status, IOSEnum.WORK_STATUS.code("执行中")));
}else {
//
// 更新任务
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getTask_status,TaskStatusEnum.EXECUTING.getCode())
.eq(SchBaseTask::getTask_id,task_id )
);
}else {
// 取消
delTask(task_id);
}
}
private void delTask(String task_id) {
StIvtIostorinvBcp mstDao = this.getOne(
new QueryWrapper<StIvtIostorinvBcp>().lambda()
.eq(StIvtIostorinvBcp::getTask_id, task_id)
);
// 解锁仓位
structattrService.update(
new UpdateWrapper<StIvtStructattr>().lambda()
.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(StIvtStructattr::getStruct_id, mstDao.getStruct_id())
);
// 删除任务
iSchBaseTaskService.update(
new UpdateWrapper<SchBaseTask>().lambda()
.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode())
.eq(SchBaseTask::getTask_id, mstDao.getTask_id())
);
// 更新主表
mstDao.setSect_id("");
mstDao.setSect_code("");
mstDao.setSect_name("");
mstDao.setStruct_id("");
mstDao.setStruct_code("");
mstDao.setStruct_name("");
mstDao.setTask_id("");
mstDao.setWork_status(IOSEnum.WORK_STATUS.code("未生成"));
mstDao.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
this.updateById(mstDao);
}
public void sendTask(String task_id) {
SchBaseTask taskDao = iSchBaseTaskService.getById(task_id);
JSONArray param = new JSONArray();
param.add(JSON.parseObject(JSONUtil.toJsonStr(taskDao)));
// 1.下发任务
WmsToAcsService bean = SpringContextHolder.getBean(WmsToAcsService.class);
bean.issueTaskToAcs3(param);
// 2.更新任务状态
taskDao.setTask_status(TaskStatusEnum.ISSUE.getCode());
iSchBaseTaskService.updateById(taskDao);
}
}