diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java index 99c52985..acce4100 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/AcsTaskEnum.java @@ -43,7 +43,9 @@ public enum AcsTaskEnum { TASK_STRUCT_HR_IN("26","入库-海柔半成品-生产入库"), TASK_STRUCT_HR_OUT("27","出库-海柔半成品-生产出库"), TASK_STRUCT_HR_CHECK("28","海柔半成品-盘点"), - TASK_STRUCT_CP_CHECK("13","-盘点"), + TASK_STRUCT_HR_EMP_IN("29","入库-海柔半成品-空托盘"), + TASK_STRUCT_HR_EMP_OUT("30","出库-海柔半成品-空托盘"), + TASK_STRUCT_CP_CHECK("13","成品-盘点"), TASK_WASH_LACK("20","清洗机-缺料请求"), TASK_WASH_EMP("21","清洗机-空框请求"), TASK_WASH_FULL_AUTO("22","清洗机-满料请求自动"),//去半成品入库:参数不全也去异常处理位 diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/rest/AcsToWmsController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/rest/AcsToWmsController.java index 20472e0a..0fa7616e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/rest/AcsToWmsController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/rest/AcsToWmsController.java @@ -120,6 +120,14 @@ public class AcsToWmsController { return new ResponseEntity<>( HttpStatus.OK); } + @PostMapping("/deviceApply") + @Log("海柔半成品任务申请") + //("海柔半成品任务申请") + @SaIgnore + public ResponseEntity deviceApply(@RequestBody JSONObject string) { + return new ResponseEntity<>(acsToWmsService.deviceApply(string),HttpStatus.OK); + } + @GetMapping("/taskPublish") @Log("taskPublish") diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/AcsToWmsService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/AcsToWmsService.java index f34d183e..13eaebdf 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/AcsToWmsService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/AcsToWmsService.java @@ -82,4 +82,17 @@ public interface AcsToWmsService { * @return */ void feedOrderRealQty(JSONObject string); + + /** + * + * @param json { + * type: 类型 + * device_code1: 设备1 + * barcode1: 条码1 + * device_code2: 设备2 + * barcode2: 条码2 + * } + * @return / + */ + Map deviceApply(JSONObject json); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/AcsToWmsServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/AcsToWmsServiceImpl.java index 628d0751..d47ffee9 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/AcsToWmsServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext_manage/acs/service/impl/AcsToWmsServiceImpl.java @@ -3,6 +3,7 @@ package org.nl.wms.ext_manage.acs.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -32,6 +33,8 @@ import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService; import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder; 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.semimanagehr.service.iostorInv.IStIvtIostorinvEmpBcpService; +import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvHrBcpInService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.http.HttpStatus; @@ -61,9 +64,10 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{ private IPdmBiDeviceService deviceService; @Autowired private ISchBaseTaskService itaskService; - - - + @Autowired + private IStIvtIostorinvHrBcpInService iStIvtIostorinvHrBcpInService; + @Autowired + private IStIvtIostorinvEmpBcpService iStIvtIostorinvEmpBcpService; @Override public Map apply(JSONObject param) { @@ -342,4 +346,88 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{ .set("dq_real_qty",dq_real_qty).eq("workorder_code",workorderCode)); } } + + @Override + public Map deviceApply(JSONObject json) { + /* + * 1.申请入满箱任务 + * 2.申请入空箱任务 + * 3.申请出满箱任务 + * 4.申请出空箱任务 + */ + HashMap result = new HashMap<>(); + + String type = json.getString("type"); + + try { + String device_code1 = json.getString("device_code1"); + String barcode1 = json.getString("barcode1"); + + if (ObjectUtil.isEmpty(device_code1)) throw new BadRequestException("设备不能为空!"); + + if (StrUtil.equals(type, "1")) { + /* 1.申请入满箱任务 */ + + if (ObjectUtil.isEmpty(barcode1)) throw new BadRequestException("条码不能为空!"); + + JSONObject param = new JSONObject(); + param.put("device_code",device_code1); + param.put("barcode",barcode1); + + // 1.调用入库服务 + iStIvtIostorinvHrBcpInService.fullIn(param); + + // 2.判断device_code2、barcode2 是否为空 + if (ObjectUtil.isNotEmpty(json.getString("device_code2")) && ObjectUtil.isNotEmpty(json.getString("barcode2"))) { + + param.put("device_code",json.getString("device_code2")); + param.put("barcode",json.getString("barcode2")); + iStIvtIostorinvHrBcpInService.fullIn(param); + } + } else if (StrUtil.equals(type, "2")) { + /* 2.申请入空箱任务 */ + + if (ObjectUtil.isEmpty(barcode1)) throw new BadRequestException("条码不能为空!"); + + JSONObject param = new JSONObject(); + param.put("device_code",device_code1); + param.put("barcode",barcode1); + + // 1.调用空托盘入库服务 + iStIvtIostorinvEmpBcpService.InEmp(param); + + // 2.判断device_code2、barcode2 是否为空 + if (ObjectUtil.isNotEmpty(json.getString("device_code2")) && ObjectUtil.isNotEmpty(json.getString("barcode2"))) { + param.put("device_code",json.getString("device_code2")); + param.put("barcode",json.getString("barcode2")); + iStIvtIostorinvEmpBcpService.InEmp(param); + } + } else if (StrUtil.equals(type, "3")) { + /* 3.申请出满箱任务 */ + + } else if (StrUtil.equals(type, "4")) { + /* 4.申请出空箱任务 */ + + JSONObject param = new JSONObject(); + param.put("device_code",device_code1); + param.put("barcode",barcode1); + + // 1.调用空托盘出库库服务 + iStIvtIostorinvEmpBcpService.OutEmp(param); + + // 2.判断device_code2、barcode2 是否为空 + if (ObjectUtil.isNotEmpty(json.getString("device_code2"))) { + param.put("device_code",json.getString("device_code2")); + iStIvtIostorinvEmpBcpService.OutEmp(param); + } + } + + } catch (Exception e) { + result.put("status", HttpStatus.BAD_REQUEST.value()); + result.put("message", e.getMessage()); + } + result.put("status", HttpStatus.OK.value()); + result.put("message", ""); + return result; + } } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/IOSEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/IOSEnum.java index 5a0ed5e3..2f829017 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/IOSEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/IOSEnum.java @@ -20,7 +20,7 @@ public enum IOSEnum { //是否 IS_USED(MapOf.of("是", "1", "否", "0")), //仓库编码 - STOR_CODE(MapOf.of("原材料仓", "1528627964823080960", "半成品仓库", "15286279952695336962","成品库", "1528627995269533696")), + STOR_CODE(MapOf.of("原材料仓", "1528627964823080960", "半成品仓库", "15286279952695336962","成品库", "1528627995269533696","海柔半成品","15286279952695336963")), //库区编码 SECT_CODE(MapOf.of("成品库区", "1528631043496742912", "半成品库区", "1528631044482404352")), //托盘超限类型 @@ -36,8 +36,8 @@ public enum IOSEnum { ORDER_STATUS(MapOf.of("生成", "10", "提交", "20", "发货中", "30", "确认", "99")), //锁定类型 LOCK_TYPE(MapOf.of("未锁定", "0", "入库锁", "1", "出库锁", "2","盘点锁", "3","损溢锁", "4","拼盘锁","5","其他锁","99")), - // 海柔半成品出库类型 - BILL_TYPE_HR(MapOf.of("生产出库", "1001", "盘点出库", "1002", "手工出库", "1009")), + // 海柔半成品出入库类型 + BILL_TYPE_HR(MapOf.of("生产出库", "1001", "盘点出库", "1002", "手工出库", "1009","生产入库","0001")), ; private Map code; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/StIvtStructivtCp.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/StIvtStructivtCp.java index d455b865..5582c51e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/StIvtStructivtCp.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/StIvtStructivtCp.java @@ -121,5 +121,10 @@ public class StIvtStructivtCp implements Serializable { */ private BigDecimal unit_weight; + /** + * 单据类型 + */ + private String bill_type; + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/mapper/StIvtStructivtCpMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/mapper/StIvtStructivtCpMapper.xml index df77f750..4afe6843 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/mapper/StIvtStructivtCpMapper.xml +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/dao/mapper/StIvtStructivtCpMapper.xml @@ -152,6 +152,7 @@ mater.material_spec, attr.storagevehicle_code, ivt.canuse_qty, + ivt.bill_type, ivt.frozen_qty, ivt.ivt_qty, ivt.warehousing_qty, diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java index fb1461fb..932a8355 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/productmanage/service/structIvt/impl/StIvtStructivtCpServiceImpl.java @@ -187,6 +187,7 @@ public class StIvtStructivtCpServiceImpl extends ServiceImpl().lambda() + .eq(StIvtStructattr::getStor_id, stor_id) + .eq(StIvtStructattr::getSect_id, sect_id) + .eq(StIvtStructattr::getIs_used, IOSEnum.IS_USED.code("是")) + .eq(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")) + .and(qr -> qr.ne(StIvtStructattr::getStoragevehicle_code,"") + .or().isNull(StIvtStructattr::getStoragevehicle_code) + ) + .eq(StIvtStructattr::getIs_emptyvehicle, true) + .orderByDesc(StIvtStructattr::getXqty) + .orderByAsc(StIvtStructattr::getYqty) + , false); + break; default: return null; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/TASKEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/TASKEnum.java index e8c73611..c5587518 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/TASKEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/TASKEnum.java @@ -16,6 +16,7 @@ import org.nl.wms.storage_manage.semimanage.service.iostorInv.IStIvtIostorinvBcp import org.nl.wms.storage_manage.semimanage.service.iostorInv.IStIvtIostorinvBcpService; import org.nl.wms.storage_manage.semimanage.service.shutFrame.IStIvtShutframeinvBcpService; import org.nl.wms.storage_manage.semimanagehr.service.check.IStIvtCheckmstHrBcpService; +import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvEmpBcpService; import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvHrBcpInService; import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvHrBcpOutService; @@ -81,6 +82,14 @@ public enum TASKEnum implements FunctionStrategy { IStIvtCheckmstHrBcpService bean = SpringContextHolder.getBean(IStIvtCheckmstHrBcpService.class); bean.taskOperate(form); }), + HR_BCP_EMP_IN_TASK(type -> AcsTaskEnum.TASK_STRUCT_HR_EMP_IN.getCode().equals(type), form -> { + IStIvtIostorinvEmpBcpService bean = SpringContextHolder.getBean(IStIvtIostorinvEmpBcpService.class); + bean.taskOperateIn(form); + }), + HR_BCP_EMP_OUT_TASK(type -> AcsTaskEnum.TASK_STRUCT_HR_EMP_OUT.getCode().equals(type), form -> { + IStIvtIostorinvEmpBcpService bean = SpringContextHolder.getBean(IStIvtIostorinvEmpBcpService.class); + bean.taskOperateOut(form); + }), ; diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/impl/StIvtIostorinvBcpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/impl/StIvtIostorinvBcpServiceImpl.java index 207f3641..3729eebe 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/impl/StIvtIostorinvBcpServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanage/service/iostorInv/impl/StIvtIostorinvBcpServiceImpl.java @@ -264,6 +264,7 @@ public class StIvtIostorinvBcpServiceImpl extends ServiceImpl + * 半成品空载具服务 服务类 + *

+ * + * @author generator + * @since 2023-08-01 + */ +public interface IStIvtIostorinvEmpBcpService { + + /** + * acs申请入空箱 + * @param json { + * device_code: 设备 + * barcode: 条码 + * } + */ + void InEmp(JSONObject json); + + /** + * 入空托盘任务反馈 + * @param form / + */ + void taskOperateIn(JSONObject form); + + + /** + * acs申请出空箱 + * @param json { + * device_code: 设备 + * } + */ + void OutEmp(JSONObject json); + + /** + * 出空托盘任务反馈 + * @param form / + */ + void taskOperateOut(JSONObject form); + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/IStIvtIostorinvHrBcpInService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/IStIvtIostorinvHrBcpInService.java index 4794ea8c..841f0727 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/IStIvtIostorinvHrBcpInService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/IStIvtIostorinvHrBcpInService.java @@ -59,4 +59,14 @@ public interface IStIvtIostorinvHrBcpInService extends IService getPdaAll(JSONObject form); + /** + * acs 申请入满箱任务 + * @param / + * { + * device_code : 设备 + * barcode : 条码 + * } + */ + void fullIn(JSONObject json); + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/IStIvtIostorinvOrderService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/IStIvtIostorinvOrderService.java new file mode 100644 index 00000000..2ac3d2d2 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/IStIvtIostorinvOrderService.java @@ -0,0 +1,16 @@ +package org.nl.wms.storage_manage.semimanagehr.service.iostorInv; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.StIvtIostorinvOrder; + +/** + *

+ * 出入库顺序表 服务类 + *

+ * + * @author generator + * @since 2023-08-01 + */ +public interface IStIvtIostorinvOrderService extends IService { + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/dao/StIvtIostorinvOrder.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/dao/StIvtIostorinvOrder.java new file mode 100644 index 00000000..224b7fa3 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/dao/StIvtIostorinvOrder.java @@ -0,0 +1,102 @@ +package org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + *

+ * 出入库顺序表 + *

+ * + * @author generator + * @since 2023-08-01 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("st_ivt_iostorinv_order_bcp") +public class StIvtIostorinvOrder implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 顺序标识 + */ + @TableId(value = "order_id") + private String order_id; + + /** + * 车间 + */ + private String workshop_id; + + /** + * 仓库标识 + */ + private String stor_id; + + /** + * 输送设备 + */ + private String out_device; + + /** + * 来源设备 + */ + private String in_device; + + /** + * 条码 + */ + private String bar_code; + + /** + * 业务日期 + */ + private String biz_date; + + /** + * 物料标识 + */ + private String material_id; + + /** + * 订单 + */ + private String sale_id; + + /** + * 工单 + */ + private String workorder_id; + + /** + * 重量 + */ + private BigDecimal weight; + + /** + * 数量 + */ + private BigDecimal qty; + + /** + * 出入类型 + */ + private String type; + + /** + * 是否删除 + */ + private boolean is_delete; + + /** + * 创建时间 + */ + private String create_time; + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/dao/mapper/StIvtIostorinvOrderMapper.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/dao/mapper/StIvtIostorinvOrderMapper.java new file mode 100644 index 00000000..d02d6f9e --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/dao/mapper/StIvtIostorinvOrderMapper.java @@ -0,0 +1,17 @@ +package org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.common.anno.Datazhuazhua; +import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.StIvtIostorinvOrder; + +/** + *

+ * 出入库顺序表 Mapper 接口 + *

+ * + * @author generator + * @since 2023-05-10 + */ +@Datazhuazhua +public interface StIvtIostorinvOrderMapper extends BaseMapper { +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/dao/mapper/xml/StIvtIostorinvOrderMapper.xml b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/dao/mapper/xml/StIvtIostorinvOrderMapper.xml new file mode 100644 index 00000000..29ec6dc7 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/dao/mapper/xml/StIvtIostorinvOrderMapper.xml @@ -0,0 +1,4 @@ + + + + diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/impl/StIvtIostorinvEmpBcpServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/impl/StIvtIostorinvEmpBcpServiceImpl.java new file mode 100644 index 00000000..13ad6406 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/impl/StIvtIostorinvEmpBcpServiceImpl.java @@ -0,0 +1,286 @@ +package org.nl.wms.storage_manage.semimanagehr.service.iostorInv.impl; + +import cn.hutool.core.map.MapUtil; +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; +import org.nl.common.enums.AcsTaskEnum; +import org.nl.common.publish.BussEventMulticaster; +import org.nl.common.publish.event.PointEvent; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.MapOf; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.ext_manage.acs.service.WmsToAcsService; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtSectattrService; +import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService; +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.scheduler_manage.service.extendtask.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.productmanage.util.DivRuleCpService; +import org.nl.wms.storage_manage.productmanage.util.RuleUtil; +import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvEmpBcpService; +import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.StIvtIostorinvHrBcp; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Map; +import java.util.function.Consumer; + +/** + *

+ * 半成品空载具 服务实现类 + *

+ * + * @author generator + * @since 2023-05-10 + */ +@Service +public class StIvtIostorinvEmpBcpServiceImpl implements IStIvtIostorinvEmpBcpService { + + @Autowired + private IStIvtSectattrService sectattrService; // 库区服务 + + @Autowired + protected IStIvtStructattrService iStIvtStructattrService; // 仓位属性服务 + + @Autowired + private DivRuleCpService divRuleCpService; // 分配规则服务 + + @Autowired + private ISchBaseTaskService iSchBaseTaskService; // 任务表服务 + + @Override + @Transactional + public void InEmp(JSONObject json) { + /* + * 1.找一个空货位 + * 2.生成任务 + * 3.下发任务 + * 4.锁住货位 + */ + String device_code = json.getString("device_code"); // 设备 + String barcode = json.getString("barcode"); // 条码 + + if (ObjectUtil.isEmpty(device_code)) throw new BadRequestException("设备不能为空!"); + if (ObjectUtil.isEmpty(barcode)) throw new BadRequestException("条码不能为空!"); + + // 1.找一个空货位 + StIvtSectattr sect = sectattrService.getOne( + new QueryWrapper().lambda() + .eq(StIvtSectattr::getSect_name, "海柔半成品库区") + ); + + JSONObject jo = new JSONObject(); + jo.put("sect_id", sect.getSect_id()); + jo.put("stor_id", sect.getStor_id()); + jo.put("rule_type", RuleUtil.PRODUCTION_IN_1); + + // 调用服务 + StIvtStructattr arrtDao = divRuleCpService.divRuleIn(jo); + + if (ObjectUtil.isEmpty(arrtDao)) { + throw new BadRequestException("无可分配货位"); + } + + // 2.生成任务 + SchBaseTask taskDao = new SchBaseTask(); + PointEvent event = PointEvent.builder() + .type(AcsTaskEnum.TASK_STRUCT_HR_EMP_IN) + .acs_task_type("7") + .task_group_id(IdUtil.getStringId()) + .point_code1(device_code) + .point_code3(barcode) + .vehicle_code(barcode) + .product_area("A3") + .callback((Consumer) taskDao::setTask_id) + .build(); + BussEventMulticaster.Publish(event); + + // 3.下发任务 + sendTask(taskDao.getTask_id()); + + // 4.锁定货位 + arrtDao.setLock_type(IOSEnum.LOCK_TYPE.code("其他锁")); + iStIvtStructattrService.updateById(arrtDao); + } + + @Override + @Transactional + public void taskOperateIn(JSONObject form) { + String task_id = form.getString("task_id"); + String status = form.getString("status"); + SchBaseTask taskDao = iSchBaseTaskService.getById(task_id); + + if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) { + /* 完成 */ + + // 1.更新任务为完成 + taskDao.setTask_status(TaskStatusEnum.FINISHED.getCode()); + iSchBaseTaskService.updateById(taskDao); + + // 2.更新仓位:解锁仓位、更新载具、更新是否是空载具 + iStIvtStructattrService.update( + new UpdateWrapper().lambda() + .set(StIvtStructattr::getStoragevehicle_code, taskDao.getVehicle_code()) + .set(StIvtStructattr::getLock_type,IOSEnum.LOCK_TYPE.code("未锁定")) + .set(StIvtStructattr::getIs_emptyvehicle, true) + .eq(StIvtStructattr::getStruct_code, taskDao.getPoint_code3()) + ); + + } else if (status.equals(AcsTaskEnum.STATUS_START.getCode())){ + /* 执行中 */ + + // 1.更新任务为执行中 + taskDao.setTask_status(TaskStatusEnum.EXECUTING.getCode()); + iSchBaseTaskService.updateById(taskDao); + + }else if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())){ + /* 取消 */ + + // 1.更新任务为取消 + taskDao.setTask_status(TaskStatusEnum.CANCEL.getCode()); + iSchBaseTaskService.updateById(taskDao); + + // 2.更新仓位:解锁仓位 + iStIvtStructattrService.update( + new UpdateWrapper().lambda() + .set(StIvtStructattr::getLock_type,IOSEnum.LOCK_TYPE.code("未锁定")) + .eq(StIvtStructattr::getStruct_code, taskDao.getPoint_code3()) + ); + + } + } + + @Override + @Transactional + public void OutEmp(JSONObject json) { + /* + * 1.找一个空载具的货位 + * 2.生成任务 + * 3.下发任务 + */ + String device_code = json.getString("device_code"); + + // 1.找一个空载具的货位 + StIvtSectattr sect = sectattrService.getOne( + new QueryWrapper().lambda() + .eq(StIvtSectattr::getSect_name, "海柔半成品库区") + ); + + JSONObject jo = new JSONObject(); + jo.put("sect_id", sect.getSect_id()); + jo.put("stor_id", sect.getStor_id()); + jo.put("rule_type", RuleUtil.PRODUCTION_EMP_OUT_1); + + // 调用服务 + StIvtStructattr arrtDao = divRuleCpService.divRuleIn(jo); + + if (ObjectUtil.isEmpty(arrtDao)) { + throw new BadRequestException("没有可用的空托盘!"); + } + + // 2.生成任务 + SchBaseTask taskDao = new SchBaseTask(); + PointEvent event = PointEvent.builder() + .type(AcsTaskEnum.TASK_STRUCT_HR_EMP_OUT) + .acs_task_type("7") + .task_group_id(IdUtil.getStringId()) + .point_code1(arrtDao.getStruct_code()) + .point_code3(device_code) + .vehicle_code(arrtDao.getStoragevehicle_code()) + .product_area("A3") + .callback((Consumer) taskDao::setTask_id) + .build(); + BussEventMulticaster.Publish(event); + + // 3.下发任务 + sendTask(taskDao.getTask_id()); + + // 4.锁定货位 + arrtDao.setLock_type(IOSEnum.LOCK_TYPE.code("其他锁")); + iStIvtStructattrService.updateById(arrtDao); + + } + + @Override + @Transactional + public void taskOperateOut(JSONObject form) { + String task_id = form.getString("task_id"); + String status = form.getString("status"); + SchBaseTask taskDao = iSchBaseTaskService.getById(task_id); + + if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) { + /* 完成 */ + + // 1.更新任务为完成 + taskDao.setTask_status(TaskStatusEnum.FINISHED.getCode()); + iSchBaseTaskService.updateById(taskDao); + + // 2.更新仓位:解锁仓位、更新载具、更新是否是空载具 + iStIvtStructattrService.update( + new UpdateWrapper().lambda() + .set(StIvtStructattr::getStoragevehicle_code, "") + .set(StIvtStructattr::getLock_type,IOSEnum.LOCK_TYPE.code("未锁定")) + .set(StIvtStructattr::getIs_emptyvehicle, false) + .eq(StIvtStructattr::getStruct_code, taskDao.getPoint_code1()) + ); + + } else if (status.equals(AcsTaskEnum.STATUS_START.getCode())){ + /* 执行中 */ + + // 1.更新任务为执行中 + taskDao.setTask_status(TaskStatusEnum.EXECUTING.getCode()); + iSchBaseTaskService.updateById(taskDao); + + }else if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())){ + /* 取消 */ + + // 1.更新任务为取消 + taskDao.setTask_status(TaskStatusEnum.CANCEL.getCode()); + iSchBaseTaskService.updateById(taskDao); + + // 2.更新仓位:解锁仓位 + iStIvtStructattrService.update( + new UpdateWrapper().lambda() + .set(StIvtStructattr::getLock_type,IOSEnum.LOCK_TYPE.code("未锁定")) + .eq(StIvtStructattr::getStruct_code, taskDao.getPoint_code3()) + ); + + } + } + + /** + * 下发任务 + * @param task_id / + */ + private 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); + Map result = bean.issueTaskToAcs3(param); + + // 反馈失败报错 + if (!ObjectUtil.equal(MapUtil.getStr(result, "status"),"200")) { + throw new BadRequestException("下发失败:"+MapUtil.getStr(result, "message")); + } + + // 2.更新任务状态 + taskDao.setTask_status(TaskStatusEnum.ISSUE.getCode()); + iSchBaseTaskService.updateById(taskDao); + } + + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/impl/StIvtIostorinvHrBcpInServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/impl/StIvtIostorinvHrBcpInServiceImpl.java index 575c8c64..3a1b69a3 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/impl/StIvtIostorinvHrBcpInServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/impl/StIvtIostorinvHrBcpInServiceImpl.java @@ -27,6 +27,8 @@ 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_manage.acs.service.WmsToAcsService; +import org.nl.wms.masterdata_manage.service.master.IMdPbMeasureunitService; +import org.nl.wms.masterdata_manage.service.master.dao.MdPbMeasureunit; import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService; import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase; import org.nl.wms.masterdata_manage.service.vehicle.IMdPbStoragevehicleextService; @@ -49,7 +51,9 @@ import org.nl.wms.storage_manage.productmanage.util.ChangeIvtUtil; import org.nl.wms.storage_manage.productmanage.util.DivRuleCpService; import org.nl.wms.storage_manage.productmanage.util.RuleUtil; import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvHrBcpInService; +import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvOrderService; import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.StIvtIostorinvHrBcp; +import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.StIvtIostorinvOrder; import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.mapper.StIvtIostorinvHrBcpMapper; import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dto.HrBcpIostorInvQuery; import org.nl.wms.storage_manage.semimanagehr.service.structIvt.IStIvtStructivtHrBcpService; @@ -104,6 +108,15 @@ public class StIvtIostorinvHrBcpInServiceImpl extends ServiceImpl page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize()); @@ -420,6 +433,66 @@ public class StIvtIostorinvHrBcpInServiceImpl extends ServiceImpl().lambda() + .eq(StIvtIostorinvOrder::getIn_device, device_code) + .eq(StIvtIostorinvOrder::getBar_code, barcode) + .eq(StIvtIostorinvOrder::getType, IOSEnum.IO_TYPE.code("入库")) + .orderByDesc(StIvtIostorinvOrder::getCreate_time) + , false + ); + + if (ObjectUtil.isEmpty(orderDao)) throw new BadRequestException("此条码在系统中不存在记录"); + + // 2.创建入库单 + JSONObject jsonMst = new JSONObject(); + jsonMst.put("biz_date", DateUtil.today()); + jsonMst.put("bill_type", IOSEnum.BILL_TYPE_HR.code("生产入库")); + jsonMst.put("remark", "" ); + jsonMst.put("product_code", "A3" ); + jsonMst.put("point_code", device_code ); + jsonMst.put("stor_id", IOSEnum.STOR_CODE.code("海柔半成品")); + jsonMst.put("auto_send", "1"); // 是否自动创建任务并下发 + + JSONArray tableData = new JSONArray(); + + JSONObject jsonDtl = new JSONObject(); + jsonDtl.put("material_id", orderDao.getMaterial_id()); + jsonDtl.put("pcsn", ""); + jsonDtl.put("plan_qty", orderDao.getWeight()); + jsonDtl.put("quality_scode", IVTEnum.QUALITY_SCODE.code("合格品")); + + 物料信息: + { + MdMeMaterialbase materDao = iMdMeMaterialbaseService.getById(orderDao.getMaterial_id()); + MdPbMeasureunit untiDao = iMdPbMeasureunitService.getById(materDao.getBase_unit_id()); + + jsonDtl.put("base_unit_id", untiDao.getMeasure_unit_id()); + jsonDtl.put("base_unit_name", untiDao.getUnit_name()); + jsonDtl.put("unit_weight", materDao.getNet_weight()); + jsonDtl.put("storagevehicle_code", barcode); + } + tableData.add(jsonDtl); + jsonMst.put("tableData",tableData); + + // 调用创建方法并自动创建任务下发 + create(jsonMst); + } + private void delTask(String task_id) { StIvtIostorinvHrBcp mstDao = this.getOne( diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/impl/StIvtIostorinvOrderServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/impl/StIvtIostorinvOrderServiceImpl.java new file mode 100644 index 00000000..1bf0b451 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/semimanagehr/service/iostorInv/impl/StIvtIostorinvOrderServiceImpl.java @@ -0,0 +1,19 @@ +package org.nl.wms.storage_manage.semimanagehr.service.iostorInv.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.IStIvtIostorinvOrderService; +import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.StIvtIostorinvOrder; +import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.mapper.StIvtIostorinvOrderMapper; +import org.springframework.stereotype.Service; + +/** + *

+ * 出入库顺序表 服务实现类 + *

+ * + * @author generator + * @since 2023-05-10 + */ +@Service +public class StIvtIostorinvOrderServiceImpl extends ServiceImpl implements IStIvtIostorinvOrderService { +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/stivt.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/stivt.xls index 620e21b7..ff359395 100644 Binary files a/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/stivt.xls and b/mes/hd/nladmin-system/src/main/java/org/nl/wms/storage_manage/stivt.xls differ diff --git a/mes/qd/src/views/wms/storage_manage/product/productIvt/index.vue b/mes/qd/src/views/wms/storage_manage/product/productIvt/index.vue index 54360580..b38e4a24 100644 --- a/mes/qd/src/views/wms/storage_manage/product/productIvt/index.vue +++ b/mes/qd/src/views/wms/storage_manage/product/productIvt/index.vue @@ -103,6 +103,7 @@ + @@ -140,6 +141,7 @@ export default { }, mixins: [presenter(), header(), crud()], // 数据字典 + dicts: ['ST_INV_CP_IN_TYPE'], data() { return { height: document.documentElement.clientHeight - 180 + 'px;', @@ -160,6 +162,9 @@ export default { }) }, methods: { + formatBillType(row, column) { + return this.dict.label.ST_INV_CP_IN_TYPE[row.bill_type] + } } } diff --git a/mes/qd/src/views/wms/storage_manage/semiproduct/semiproductIvt/index.vue b/mes/qd/src/views/wms/storage_manage/semiproduct/semiproductIvt/index.vue index 29f91a1d..ddfb78e1 100644 --- a/mes/qd/src/views/wms/storage_manage/semiproduct/semiproductIvt/index.vue +++ b/mes/qd/src/views/wms/storage_manage/semiproduct/semiproductIvt/index.vue @@ -88,6 +88,7 @@ + @@ -126,6 +127,7 @@ export default { }, mixins: [presenter(), header(), crud()], // 数据字典 + dicts: ['ST_INV_BCP_IN_TYPE'], data() { return { height: document.documentElement.clientHeight - 180 + 'px;', @@ -151,6 +153,9 @@ export default { this.crud.notify('导出成功', CRUD.NOTIFICATION_TYPE.SUCCESS) }) }, + formatBillType(row, column) { + return this.dict.label.ST_INV_BCP_IN_TYPE[row.bill_type] + } } }