rev:1.海柔半成品acs与mes接口 2.半成品、成品库存增加单据类型字段
This commit is contained in:
@@ -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","清洗机-满料请求自动"),//去半成品入库:参数不全也去异常处理位
|
||||
|
||||
@@ -120,6 +120,14 @@ public class AcsToWmsController {
|
||||
return new ResponseEntity<>( HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/deviceApply")
|
||||
@Log("海柔半成品任务申请")
|
||||
//("海柔半成品任务申请")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> deviceApply(@RequestBody JSONObject string) {
|
||||
return new ResponseEntity<>(acsToWmsService.deviceApply(string),HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/taskPublish")
|
||||
@Log("taskPublish")
|
||||
|
||||
@@ -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<String, Object> deviceApply(JSONObject json);
|
||||
}
|
||||
|
||||
@@ -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<String, Object> 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<String, Object> deviceApply(JSONObject json) {
|
||||
/*
|
||||
* 1.申请入满箱任务
|
||||
* 2.申请入空箱任务
|
||||
* 3.申请出满箱任务
|
||||
* 4.申请出空箱任务
|
||||
*/
|
||||
HashMap<String, Object> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String, String> code;
|
||||
|
||||
|
||||
@@ -121,5 +121,10 @@ public class StIvtStructivtCp implements Serializable {
|
||||
*/
|
||||
private BigDecimal unit_weight;
|
||||
|
||||
/**
|
||||
* 单据类型
|
||||
*/
|
||||
private String bill_type;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -187,6 +187,7 @@ public class StIvtStructivtCpServiceImpl extends ServiceImpl<StIvtStructivtCpMap
|
||||
dao.setProduct_area(json.getString("product_area"));
|
||||
dao.setStor_id(json.getString("stor_id"));
|
||||
dao.setUnit_weight(materDao.getNet_weight());
|
||||
dao.setBill_type(json.getString("bill_type_scode"));
|
||||
this.save(dao);
|
||||
|
||||
// 插入库存变动记录
|
||||
|
||||
@@ -26,5 +26,11 @@ public class RuleUtil {
|
||||
*/
|
||||
public static final String PRODUCTION_OUT_2 = "out_2";
|
||||
|
||||
/*
|
||||
* 空托盘出库分配:
|
||||
* 根据 仓库、库区、找仓位上的空载具
|
||||
*/
|
||||
public static final String PRODUCTION_EMP_OUT_1 = "emp_out_1";
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -81,6 +81,21 @@ public class DivRuleCpServiceImpl implements DivRuleCpService {
|
||||
.eq(StIvtStructattr::getStruct_id, attrDao.getControl_code())
|
||||
);
|
||||
break;
|
||||
case RuleUtil.PRODUCTION_EMP_OUT_1 :
|
||||
attrDao = iStIvtStructattrService.getOne(
|
||||
new QueryWrapper<StIvtStructattr>().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;
|
||||
}
|
||||
|
||||
@@ -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<String, JSONObject> {
|
||||
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);
|
||||
}),
|
||||
|
||||
;
|
||||
|
||||
|
||||
@@ -264,6 +264,7 @@ public class StIvtIostorinvBcpServiceImpl extends ServiceImpl<StIvtIostorinvBcpM
|
||||
.canuse_qty(mst.getPlan_qty())
|
||||
.workshop_id(mst.getWorkshop_id())
|
||||
.unit_weight(mst.getUnit_weight())
|
||||
.bill_type(mst.getBill_type())
|
||||
.build();
|
||||
structivtBcpService.save(ivtDao);
|
||||
|
||||
|
||||
@@ -103,5 +103,10 @@ public class StIvtStructivtBcp implements Serializable {
|
||||
*/
|
||||
private BigDecimal unit_weight;
|
||||
|
||||
/**
|
||||
* 入库类型
|
||||
*/
|
||||
private String bill_type;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package org.nl.wms.storage_manage.semimanagehr.service.iostorInv;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.StIvtIostorinvOrder;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 半成品空载具服务 服务类
|
||||
* </p>
|
||||
*
|
||||
* @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);
|
||||
|
||||
}
|
||||
@@ -59,4 +59,14 @@ public interface IStIvtIostorinvHrBcpInService extends IService<StIvtIostorinvHr
|
||||
|
||||
List<Map> getPdaAll(JSONObject form);
|
||||
|
||||
/**
|
||||
* acs 申请入满箱任务
|
||||
* @param /
|
||||
* {
|
||||
* device_code : 设备
|
||||
* barcode : 条码
|
||||
* }
|
||||
*/
|
||||
void fullIn(JSONObject json);
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 出入库顺序表 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author generator
|
||||
* @since 2023-08-01
|
||||
*/
|
||||
public interface IStIvtIostorinvOrderService extends IService<StIvtIostorinvOrder> {
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 出入库顺序表
|
||||
* </p>
|
||||
*
|
||||
* @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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 出入库顺序表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author generator
|
||||
* @since 2023-05-10
|
||||
*/
|
||||
@Datazhuazhua
|
||||
public interface StIvtIostorinvOrderMapper extends BaseMapper<StIvtIostorinvOrder> {
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.wms.storage_manage.semimanagehr.service.iostorInv.dao.mapper.StIvtIostorinvOrderMapper">
|
||||
</mapper>
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 半成品空载具 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @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<StIvtSectattr>().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<String>) 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<StIvtStructattr>().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<StIvtStructattr>().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<StIvtSectattr>().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<String>) 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<StIvtStructattr>().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<StIvtStructattr>().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<String, Object> 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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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<StIvtIostorinv
|
||||
@Autowired
|
||||
protected IMdPbStoragevehicleextService iMdPbStoragevehicleextService; // 载具扩展属性信息表服务
|
||||
|
||||
@Autowired
|
||||
protected IStIvtIostorinvOrderService iStIvtIostorinvOrderService; // 出入顺序服务
|
||||
|
||||
@Autowired
|
||||
protected IMdMeMaterialbaseService iMdMeMaterialbaseService; // 物料服务
|
||||
|
||||
@Autowired
|
||||
protected IMdPbMeasureunitService iMdPbMeasureunitService; // 计量单位服务
|
||||
|
||||
@Override
|
||||
public Object queryDtl(HrBcpIostorInvQuery query, PageQuery pageQuery) {
|
||||
Page<Object> page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize());
|
||||
@@ -420,6 +433,66 @@ public class StIvtIostorinvHrBcpInServiceImpl extends ServiceImpl<StIvtIostorinv
|
||||
return this.baseMapper.getPdaAll(form);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void fullIn(JSONObject json) {
|
||||
/*
|
||||
* 1.从出入顺序表中找到对应数据
|
||||
* 2.创建入库单
|
||||
* 3.生成任务
|
||||
* 4.下发任务
|
||||
*/
|
||||
|
||||
String device_code = json.getString("device_code"); // 设备
|
||||
String barcode = json.getString("barcode"); // 载具号
|
||||
|
||||
// 1.从出入顺序表中找到对应数据: 根据来源设备和条码找到最近的一条
|
||||
StIvtIostorinvOrder orderDao = iStIvtIostorinvOrderService.getOne(
|
||||
new QueryWrapper<StIvtIostorinvOrder>().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(
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 出入库顺序表 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author generator
|
||||
* @since 2023-05-10
|
||||
*/
|
||||
@Service
|
||||
public class StIvtIostorinvOrderServiceImpl extends ServiceImpl<StIvtIostorinvOrderMapper, StIvtIostorinvOrder> implements IStIvtIostorinvOrderService {
|
||||
}
|
||||
Binary file not shown.
@@ -103,6 +103,7 @@
|
||||
<el-table-column show-overflow-tooltip prop="storagevehicle_code" label="载具号" />
|
||||
<el-table-column show-overflow-tooltip prop="sale_code" label="销售单号" />
|
||||
<el-table-column show-overflow-tooltip min-width="110" prop="seq_no" label="销售单行号" />
|
||||
<el-table-column show-overflow-tooltip prop="bill_type" label="单据类型" :formatter="formatBillType" />
|
||||
<el-table-column show-overflow-tooltip prop="canuse_qty" label="可用数量" :formatter="crud.formatNum3" />
|
||||
<el-table-column show-overflow-tooltip prop="frozen_qty" label="冻结数量" :formatter="crud.formatNum3" />
|
||||
<el-table-column show-overflow-tooltip prop="ivt_qty" label="库存数量" :formatter="crud.formatNum3" />
|
||||
@@ -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]
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -88,6 +88,7 @@
|
||||
<el-table-column show-overflow-tooltip prop="sect_name" label="库区名称" />
|
||||
<el-table-column show-overflow-tooltip prop="struct_code" label="仓位编码" />
|
||||
<el-table-column show-overflow-tooltip prop="struct_name" label="仓位名称" />
|
||||
<el-table-column show-overflow-tooltip prop="bill_type" label="单据类型" :formatter="formatBillType" />
|
||||
<el-table-column show-overflow-tooltip min-width="120" prop="material_code" label="物料编码" />
|
||||
<el-table-column show-overflow-tooltip min-width="120" prop="material_name" label="物料名称" />
|
||||
<el-table-column show-overflow-tooltip min-width="120" prop="material_spec" label="物料规格" />
|
||||
@@ -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]
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user