Browse Source

烧制、分拣工序

master
李永德 3 years ago
parent
commit
b7598908f3
  1. 7
      lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java
  2. 7
      lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/WmsToAcsController.java
  3. 8
      lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java
  4. 7
      lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java
  5. 443
      lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java
  6. 6
      lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java
  7. 10
      lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/RegionEnum.java
  8. 5
      lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/RegionIOEnum.java
  9. 20
      lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java
  10. 36
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointUpdateUtil.java
  11. 87
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/RykCallMaterialTask.java
  12. 7
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/wql/QSCH_rykCallMaterial_01.wql
  13. 31
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/FjCallEmptyVehicleTask.java
  14. 10
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/HnCallEmptyVehicleTask.java
  15. 36
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YzjCallEmptyVehicleTask.java
  16. 4
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_fjCallEmptyVehicle_01.wql
  17. 66
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/FjCallMaterialTask.java
  18. 11
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java
  19. 5
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_cyCallMaterial_01.wql
  20. 23
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/DpSendEmpVehicleTask.java
  21. 41
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/FjSendEmpVehicleTask.java
  22. 10
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java
  23. 246
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/FjSendMaterialTask.java
  24. 11
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HnSendMaterialTask.java
  25. 81
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SzSendMaterialTask.java
  26. 18
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/YzjSendMaterialTask.java
  27. 20
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_fjSendMaterial_01.wql
  28. 5
      lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_szSendMaterial_01.wql
  29. BIN
      lms/nladmin-system/src/main/java/org/nl/wms/wms.xls
  30. 33
      lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue

7
lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/AcsToWmsController.java

@ -104,6 +104,13 @@ public class AcsToWmsController {
return new ResponseEntity<>(acsToWmsService.getDeviceCodeByVehicleType(whereJson), HttpStatus.OK);
}
@PostMapping("/getVehicleInfoBycode")
@Log("根据设备编码编码获取托盘信息")
@ApiOperation("根据设备编码编码获取托盘信息")
public ResponseEntity<Object> getVehicleInfoByDevice_code(@RequestBody Map whereJson) {
return new ResponseEntity<>(acsToWmsService.getVehicleInfoByDeviceCode(whereJson), HttpStatus.OK);
}
@PostMapping("/againApply")
@Log("二次申请任务")
@ApiOperation("二次申请任务")

7
lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/rest/WmsToAcsController.java

@ -79,5 +79,12 @@ public class WmsToAcsController {
return new ResponseEntity<>(wmsToAcsService.getPointStatus(whereJson), HttpStatus.OK);
}
@PostMapping("/queryTray")
@Log("WMS向acs发送获取载具")
@ApiOperation("WMS向acs发送获取载具")
public ResponseEntity<Object> getTray(@RequestBody JSONArray whereJson) {
return new ResponseEntity<>(wmsToAcsService.getTray(whereJson), HttpStatus.OK);
}
}

8
lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java

@ -92,4 +92,12 @@ public interface AcsToWmsService {
* @param whereJson
*/
void reverseGroup(JSONObject whereJson);
/**
* 根据设备编码获取托盘信息
*
* @param jsonObject 条件
* @return Map<String, Object>
*/
Map<String, Object> getVehicleInfoByDeviceCode(Map jsonObject);
}

7
lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/WmsToAcsService.java

@ -55,4 +55,11 @@ public interface WmsToAcsService {
* @return
*/
JSONObject getPointStatus(JSONArray whereJson);
/**
* 获取木托盘
* @param whereJson
* @return
*/
JSONObject getTray(JSONArray whereJson);
}

443
lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java

@ -22,11 +22,11 @@ import org.nl.wms.sch.manage.RegionEnum;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.manage.WorkOrderEnum;
import org.nl.wms.sch.service.TaskService;
import org.nl.wms.sch.tasks.PointUpdateUtil;
import org.nl.wms.sch.tasks.callEmpty.FjCallEmptyVehicleTask;
import org.nl.wms.sch.tasks.callEmpty.HnCallEmptyVehicleTask;
import org.nl.wms.sch.tasks.callEmpty.YzjCallEmptyVehicleTask;
import org.nl.wms.sch.tasks.callMaterial.FjCallMaterialTask;
import org.nl.wms.sch.tasks.callMaterial.SzCallMaterialTask;
import org.nl.wms.sch.tasks.callMaterial.YzjCallMaterialTask;
import org.nl.wms.sch.tasks.sendEmpty.DpSendEmpVehicleTask;
import org.nl.wms.sch.tasks.sendEmpty.FjSendEmpVehicleTask;
@ -185,62 +185,23 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
String weight = whereJson.getString("weight");
String qty = whereJson.getString("qty");
if (ObjectUtil.isEmpty(type)) throw new BadRequestException("类型不能为空");
if (ObjectUtil.isEmpty(point_code)) throw new BadRequestException("点位不能为空");
// 类型映射
/**
* 类型映射
* 1: 送料入库
* 2: 叫料出库
* 3: 送空托盘
* 4: 叫空托盘
*/
String regionId = WQLObject
.getWQLObject("sch_base_point")
.query("point_code = '" + point_code + "'")
.uniqueResult(0)
.getString("region_id");
switch (type) {
case "1":
// 设备送料入库
if (StrUtil.equals(regionId, RegionEnum.HNQ.getId())) {
type = "1";
} else if (StrUtil.equals(regionId, RegionEnum.YZQ.getId())) {
type = "5";
} else if (StrUtil.equals(regionId, RegionEnum.YQ.getId())) {
type = "8";
} else if (StrUtil.equals(regionId, RegionEnum.ZDCDX.getId())) {
type = "11";
}
break;
case "2":
// 设备叫料出库
if (StrUtil.equals(regionId, RegionEnum.YZQ.getId())) {
type = "3";
} else if (StrUtil.equals(regionId, RegionEnum.YQ.getId())) {
type = "7";
} else if (StrUtil.equals(regionId, RegionEnum.ZDCDX.getId())) {
type = "9";
}
break;
case "3":
// 设备送空托盘
if (StrUtil.equals(regionId, RegionEnum.YZQ.getId())) {
type = "4";
} else if (StrUtil.equals(regionId, RegionEnum.ZDCDX.getId())) {
type = "10";
} else if (StrUtil.equals(regionId, RegionEnum.KGTDPQ.getId())) {
type = "13";
}
break;
case "4":
// 设备叫空托盘
if (StrUtil.equals(regionId, RegionEnum.HNQ.getId())) {
type = "2";
} else if (StrUtil.equals(regionId, RegionEnum.YZQ.getId())) {
type = "6";
} else if (StrUtil.equals(regionId, RegionEnum.ZDCDX.getId())) {
type = "12";
}
break;
default:
throw new BadRequestException("ACS任务类型错误");
}
RegionEnum regionEnum = RegionEnum.get(regionId);
// 参数统一获取
JSONObject param = new JSONObject();
@ -257,7 +218,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
* 4.压制机上料位送空盅
* 5.压制机满料入库
* 6.压制机呼叫空钢托盘
* 7.烧制叫料出库
* 8.烧制送料入库
* 9.分拣叫料出库
* 10.分拣送空钢托盘
@ -267,76 +227,99 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
*/
switch (type) {
case "1":
// 1.混碾机送料入库:混碾机物料送到困料货架
// 创建任务
param.put("point_code1", point_code); // 起点
SpringContextHolder.getBean(HnSendMaterialTask.class).createTask(param);
switch (regionEnum) {
case HNQ:
// 1.混碾机送料入库:混碾机物料送到困料货架
// 创建任务
param.put("point_code1", point_code); // 起点
SpringContextHolder.getBean(HnSendMaterialTask.class).createTask(param);
break;
case YZQ:
// 5.压制机满料入库
param.put("point_code1", point_code); // 起点
param.put("group_id", whereJson.getString("group_id")); // 组盘标识 - 机械手过来的
// 创建任务
SpringContextHolder.getBean(YzjSendMaterialTask.class).createTask(param);
break;
case YQ:
// 8.烧制送料入库
param.put("point_code1", point_code); // 起点
SpringContextHolder.getBean(SzSendMaterialTask.class).createTask(param);
break;
case ZDCDX:
// 11.分拣送料入库
param.put("point_code1", point_code); // 起点
param.put("group_id", whereJson.getString("group_id")); // 组盘标识 - 机械手过来的
SpringContextHolder.getBean(FjSendMaterialTask.class).createTask(param);
break;
default:
throw new BadRequestException("ACS任务类型错误");
}
break;
case "2":
param.put("point_code2", point_code); // 终点
// 创建任务
SpringContextHolder.getBean(HnCallEmptyVehicleTask.class).createTask(param);
switch (regionEnum) {
case YZQ:
// 3.压制机叫料任务
param.put("point_code2", point_code); // 终点
// 创建任务
SpringContextHolder.getBean(YzjCallMaterialTask.class).createTask(param);
break;
case ZDCDX:
// 9.分拣叫料出库
param.put("point_code2", point_code); // 终点
SpringContextHolder.getBean(FjCallMaterialTask.class).createTask(param);
break;
default:
throw new BadRequestException("ACS任务类型错误");
}
break;
case "3":
// 压制机叫料任务
param.put("point_code2", point_code); // 终点
// 创建任务
SpringContextHolder.getBean(YzjCallMaterialTask.class).createTask(param);
switch (regionEnum) {
case YZQ:
// 4.压制机送空盅
param.put("point_code1", point_code); // 起点
// 创建任务
SpringContextHolder.getBean(YzjSendEmpVehicleTask.class).createTask(param);
break;
case ZDCDX:
// 10.分拣送钢托盘
param.put("point_code1", point_code); // 起点
SpringContextHolder.getBean(FjSendEmpVehicleTask.class).createTask(param);
break;
case KGTDPQ:
// 13.叠盘区送空钢托盘
param.put("point_code1", point_code); // 起点
SpringContextHolder.getBean(DpSendEmpVehicleTask.class).createTask(param);
break;
default:
throw new BadRequestException("ACS任务类型错误");
}
break;
case "4":
// 压制机送空盅
param.put("point_code1", point_code); // 起点
// 创建任务
SpringContextHolder.getBean(YzjSendEmpVehicleTask.class).createTask(param);
break;
case "5":
// 压制机满料入库
param.put("point_code1", point_code); // 起点
param.put("group_id", whereJson.getString("group_id")); // 组盘标识
// 创建任务
SpringContextHolder.getBean(YzjSendMaterialTask.class).createTask(param);
break;
case "6":
// 压制机呼叫空托盘
param.put("point_code2", point_code); // 终点
// 创建任务
SpringContextHolder.getBean(YzjCallEmptyVehicleTask.class).createTask(param);
break;
case "7":
// 烧制叫料出库
param.put("point_code2", point_code); // 终点
SpringContextHolder.getBean(SzCallMaterialTask.class).createTask(param);
break;
case "8":
// 烧制送料入库
param.put("point_code1", point_code); // 起点
SpringContextHolder.getBean(SzSendMaterialTask.class).createTask(param);
break;
case "9":
// 分拣叫料出库
param.put("point_code2", point_code); // 终点
SpringContextHolder.getBean(FjCallMaterialTask.class).createTask(param);
break;
case "10":
// 分拣送钢托盘
param.put("point_code1", point_code); // 起点
SpringContextHolder.getBean(FjSendEmpVehicleTask.class).createTask(param);
break;
case "11":
// 分拣送料入库
param.put("point_code1", point_code); // 起点
SpringContextHolder.getBean(FjSendMaterialTask.class).createTask(param);
break;
case "12":
// 分拣呼叫木托盘
param.put("point_code2", point_code); // 起点
SpringContextHolder.getBean(FjCallEmptyVehicleTask.class).createTask(param);
break;
case "13":
// 叠盘区送空钢托盘
param.put("point_code1", point_code); // 起点
SpringContextHolder.getBean(DpSendEmpVehicleTask.class).createTask(param);
switch (regionEnum) {
case HNQ:
// 2.混碾机呼叫空托盘
param.put("point_code2", point_code); // 终点
// 创建任务
SpringContextHolder.getBean(HnCallEmptyVehicleTask.class).createTask(param);
break;
case YZQ:
// 6.压制机呼叫空托盘
param.put("point_code2", point_code); // 终点
// 创建任务
SpringContextHolder.getBean(YzjCallEmptyVehicleTask.class).createTask(param);
break;
case ZDCDX:
// 12.分拣呼叫木托盘 -- xxx
param.put("point_code2", point_code); // 起点
SpringContextHolder.getBean(FjCallEmptyVehicleTask.class).createTask(param);
break;
default:
throw new BadRequestException("ACS任务类型错误");
}
break;
default:
throw new BadRequestException("ACS任务类型错误");
}
return null;
}
@ -349,6 +332,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
*/
@Override
public void manipulatorApply(JSONObject jsonObject) {
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup");
//组盘
JSONObject produceInfoByCode = new JSONObject();
String device_code = (String) jsonObject.get("device_code"); // 对接位
@ -358,99 +343,105 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
produceInfoByCode = this.getProduceInfoByCode(device_code); // 获取设备的
String material_id = (String) produceInfoByCode.get("material_id");
String cust_id = (String) produceInfoByCode.get("cust_id");
String producetask_id = (String) produceInfoByCode.get("producetask_id");
WQLObject.getWQLObject("st_buss_vehiclegroup").delete("vehicle_code ='" + vehicle_code + "'");
// // 如果上报不了,则去点位上取(木托盘情况)
// if (StrUtil.equals("0", vehicle_code)) {
// vehicle_code = produceInfoByCode.getString("vehicle_code");
// }
String producetask_id = (String) produceInfoByCode.get("workorder_id");
// 物料
JSONObject materialObj = WQLObject
.getWQLObject("MD_ME_MaterialBase")
.query("material_id='" + material_id + "'")
.query("material_id = '" + material_id + "'")
.uniqueResult(0);
JSONObject groubObj = new JSONObject();
long nextId = IdUtil.getSnowflake(1, 1).nextId();
groubObj.put("group_id", nextId);
groubObj.put("vehicle_code", vehicle_code);
groubObj.put("material_uuid", material_id);
groubObj.put("material_code", materialObj.getString("material_code"));
groubObj.put("material_name", materialObj.getString("material_name"));
groubObj.put("cust_id", cust_id);
groubObj.put("qty", qty);
groubObj.put("producetask_id", producetask_id);
// groubObj.put("AlongSide", jsonObject.get("AlongSide"));
// groubObj.put("BshortSide", jsonObject.get("BshortSide"));
// groubObj.put("Htrapezoidal", jsonObject.get("Htrapezoidal"));
// groubObj.put("Wthickness", jsonObject.get("Wthickness"));
groubObj.put("tray_qty", jsonObject.get("tray_qty"));
groubObj.put("crib_category", jsonObject.get("crib_category"));
groubObj.put("tray_high", jsonObject.get("tray_high"));
groubObj.put("palletX1_line", jsonObject.get("palletX1_line"));
groubObj.put("palletY1_row", jsonObject.get("palletY1_row"));
groubObj.put("palletA1_angle", jsonObject.get("palletA1_angle"));
groubObj.put("palletX2_line", jsonObject.get("palletX2_line"));
groubObj.put("palletY2_row", jsonObject.get("palletY2_row"));
groubObj.put("palletA2_angle", jsonObject.get("palletA2_angle"));
groubObj.put("palletX3_line", jsonObject.get("palletX3_line"));
groubObj.put("palletY3_row", jsonObject.get("palletY3_row"));
groubObj.put("pressCribX1_line", jsonObject.get("pressCribX1_line"));
groubObj.put("palletA3_angle", jsonObject.get("palletA3_angle"));
groubObj.put("pressCribY1_row", jsonObject.get("pressCribY1_row"));
groubObj.put("pressCribA1_angle", jsonObject.get("pressCribA1_angle"));
groubObj.put("pressCribX2_line", jsonObject.get("pressCribX2_line"));
groubObj.put("pressCribY2_row", jsonObject.get("pressCribY2_row"));
groubObj.put("pressCribA2_angle", jsonObject.get("pressCribA2_angle"));
groubObj.put("pressCribX3_line", jsonObject.get("pressCribX3_line"));
groubObj.put("pressCribY3_row", jsonObject.get("pressCribY3_row"));
groubObj.put("pressCribA3_angle", jsonObject.get("pressCribA3_angle"));
groubObj.put("Zoffset", jsonObject.get("Zoffset"));
groubObj.put("pallet_layerQty", jsonObject.get("pallet_layerQty"));
groubObj.put("pressCrib_layerQty", jsonObject.get("pressCrib_layerQty"));
groubObj.put("codeLayerX1_interval", jsonObject.get("codeLayerX1_interval"));
groubObj.put("codeLayerY1_interval", jsonObject.get("codeLayerY1_interval"));
groubObj.put("pressCrib_layerQty", jsonObject.get("pressCrib_layerQty"));
groubObj.put("codeLayerX2_interval", jsonObject.get("codeLayerX2_interval"));
groubObj.put("codeLayerY2_interval", jsonObject.get("codeLayerY2_interval"));
groubObj.put("codeLayerX3_interval", jsonObject.get("codeLayerX3_interval"));
groubObj.put("codeLayerY3_interval", jsonObject.get("codeLayerY3_interval"));
groubObj.put("codeLayerY1_offset", jsonObject.get("codeLayerY1_offset"));
groubObj.put("codeLayerX1_offset", jsonObject.get("codeLayerX1_offset"));
groubObj.put("codeLayerX3_interval", jsonObject.get("codeLayerX3_interval"));
groubObj.put("codeLayerX2_offset", jsonObject.get("codeLayerX2_offset"));
groubObj.put("codeLayerX3_offset", jsonObject.get("codeLayerX3_offset"));
groubObj.put("codeLayerY3_offset", jsonObject.get("codeLayerY3_offset"));
groubObj.put("pressLayerX1_interval", jsonObject.get("pressLayerX1_interval"));
groubObj.put("pressLayerY1_interval", jsonObject.get("pressLayerY1_interval"));
groubObj.put("pressLayerX2_interval", jsonObject.get("pressLayerX2_interval"));
groubObj.put("pressLayerY2_interval", jsonObject.get("pressLayerY2_interval"));
groubObj.put("pressLayerX3_interval", jsonObject.get("pressLayerX3_interval"));
groubObj.put("pressLayerY3_interval", jsonObject.get("pressLayerY3_interval"));
groubObj.put("pressLayerX1_offset", jsonObject.get("pressLayerX1_offset"));
groubObj.put("pressLayerY1_offset", jsonObject.get("pressLayerY1_offset"));
groubObj.put("pressLayerX2_offset", jsonObject.get("pressLayerX2_offset"));
groubObj.put("pressLayerY2_offset", jsonObject.get("pressLayerY2_offset"));
groubObj.put("pressLayerX3_offset", jsonObject.get("pressLayerX3_offset"));
groubObj.put("pressLayerY3_offset", jsonObject.get("pressLayerY3_offset"));
groubObj.put("one_cribTotal", jsonObject.get("one_cribTotal"));
groubObj.put("two_cribTotal", jsonObject.get("two_cribTotal"));
groubObj.put("one_qty", jsonObject.get("one_qty"));
groubObj.put("two_qty", jsonObject.get("two_qty"));
groubObj.put("tool_coordinate", jsonObject.get("tool_coordinate"));
groubObj.put("create_id", SecurityUtils.getCurrentUserId());
groubObj.put("create_name", SecurityUtils.getCurrentNickName());
groubObj.put("create_time", DateUtil.now());
WQLObject.getWQLObject("st_buss_vehiclegroup").insert(groubObj);
jsonObject.put("group_id", nextId); // 组盘标识
// 判断是分拣还是压制的送料入库
if (device_code.startsWith("FJCD")) {
jsonObject.put("type", "11");
// 机械手下料位
JSONObject pointObj = pointTab.query("point_code = '" + device_code + "'").uniqueResult(0);
JSONObject groupObj = new JSONObject();
if (ObjectUtil.isNotEmpty(pointObj.getString("group_id"))) { // 存在组盘id,表示是半托
// 半托只需要修改参数即可
groupObj = groupTab.query("group_id = '" + pointObj.getString("group_id") + "'").uniqueResult(0);
jsonObject.put("group_id", ObjectUtil.isNotEmpty(pointObj.getString("group_id"))); // 组盘标识
} else {
jsonObject.put("type", "5");
long nextId = IdUtil.getSnowflake(1, 1).nextId();
groupObj.put("group_id", nextId);
jsonObject.put("group_id", nextId); // 组盘标识
}
this.apply(jsonObject);
groupObj.put("vehicle_code", vehicle_code);
groupObj.put("material_uuid", material_id);
groupObj.put("material_code", materialObj.getString("material_code"));
groupObj.put("material_name", materialObj.getString("material_name"));
groupObj.put("cust_id", cust_id);
groupObj.put("qty", qty);
groupObj.put("producetask_id", producetask_id);
groupObj.put("tray_qty", jsonObject.get("tray_qty"));
groupObj.put("crib_category", jsonObject.get("crib_category"));
groupObj.put("tray_high", jsonObject.get("tray_high"));
groupObj.put("palletX1_line", jsonObject.get("palletX1_line"));
groupObj.put("palletY1_row", jsonObject.get("palletY1_row"));
groupObj.put("palletA1_angle", jsonObject.get("palletA1_angle"));
groupObj.put("palletX2_line", jsonObject.get("palletX2_line"));
groupObj.put("palletY2_row", jsonObject.get("palletY2_row"));
groupObj.put("palletA2_angle", jsonObject.get("palletA2_angle"));
groupObj.put("palletX3_line", jsonObject.get("palletX3_line"));
groupObj.put("palletY3_row", jsonObject.get("palletY3_row"));
groupObj.put("pressCribX1_line", jsonObject.get("pressCribX1_line"));
groupObj.put("palletA3_angle", jsonObject.get("palletA3_angle"));
groupObj.put("pressCribY1_row", jsonObject.get("pressCribY1_row"));
groupObj.put("pressCribA1_angle", jsonObject.get("pressCribA1_angle"));
groupObj.put("pressCribX2_line", jsonObject.get("pressCribX2_line"));
groupObj.put("pressCribY2_row", jsonObject.get("pressCribY2_row"));
groupObj.put("pressCribA2_angle", jsonObject.get("pressCribA2_angle"));
groupObj.put("pressCribX3_line", jsonObject.get("pressCribX3_line"));
groupObj.put("pressCribY3_row", jsonObject.get("pressCribY3_row"));
groupObj.put("pressCribA3_angle", jsonObject.get("pressCribA3_angle"));
groupObj.put("Zoffset", jsonObject.get("Zoffset"));
groupObj.put("pallet_layerQty", jsonObject.get("pallet_layerQty"));
groupObj.put("pressCrib_layerQty", jsonObject.get("pressCrib_layerQty"));
groupObj.put("codeLayerX1_interval", jsonObject.get("codeLayerX1_interval"));
groupObj.put("codeLayerY1_interval", jsonObject.get("codeLayerY1_interval"));
groupObj.put("pressCrib_layerQty", jsonObject.get("pressCrib_layerQty"));
groupObj.put("codeLayerX2_interval", jsonObject.get("codeLayerX2_interval"));
groupObj.put("codeLayerY2_interval", jsonObject.get("codeLayerY2_interval"));
groupObj.put("codeLayerX3_interval", jsonObject.get("codeLayerX3_interval"));
groupObj.put("codeLayerY3_interval", jsonObject.get("codeLayerY3_interval"));
groupObj.put("codeLayerY1_offset", jsonObject.get("codeLayerY1_offset"));
groupObj.put("codeLayerX1_offset", jsonObject.get("codeLayerX1_offset"));
groupObj.put("codeLayerX3_interval", jsonObject.get("codeLayerX3_interval"));
groupObj.put("codeLayerX2_offset", jsonObject.get("codeLayerX2_offset"));
groupObj.put("codeLayerX3_offset", jsonObject.get("codeLayerX3_offset"));
groupObj.put("codeLayerY3_offset", jsonObject.get("codeLayerY3_offset"));
groupObj.put("pressLayerX1_interval", jsonObject.get("pressLayerX1_interval"));
groupObj.put("pressLayerY1_interval", jsonObject.get("pressLayerY1_interval"));
groupObj.put("pressLayerX2_interval", jsonObject.get("pressLayerX2_interval"));
groupObj.put("pressLayerY2_interval", jsonObject.get("pressLayerY2_interval"));
groupObj.put("pressLayerX3_interval", jsonObject.get("pressLayerX3_interval"));
groupObj.put("pressLayerY3_interval", jsonObject.get("pressLayerY3_interval"));
groupObj.put("pressLayerX1_offset", jsonObject.get("pressLayerX1_offset"));
groupObj.put("pressLayerY1_offset", jsonObject.get("pressLayerY1_offset"));
groupObj.put("pressLayerX2_offset", jsonObject.get("pressLayerX2_offset"));
groupObj.put("pressLayerY2_offset", jsonObject.get("pressLayerY2_offset"));
groupObj.put("pressLayerX3_offset", jsonObject.get("pressLayerX3_offset"));
groupObj.put("pressLayerY3_offset", jsonObject.get("pressLayerY3_offset"));
groupObj.put("one_cribTotal", jsonObject.get("one_cribTotal"));
groupObj.put("two_cribTotal", jsonObject.get("two_cribTotal"));
groupObj.put("one_qty", jsonObject.get("one_qty"));
groupObj.put("two_qty", jsonObject.get("two_qty"));
groupObj.put("tool_coordinate", jsonObject.get("tool_coordinate"));
groupObj.put("create_id", SecurityUtils.getCurrentUserId());
groupObj.put("create_name", SecurityUtils.getCurrentNickName());
groupObj.put("create_time", DateUtil.now());
if (ObjectUtil.isNotEmpty(pointObj.getString("group_id"))) {
groupTab.update(groupObj);
// 清除对接位的组盘标识
pointObj.put("group_id", null);
pointTab.update(pointObj);
} else {
groupTab.insert(groupObj);
}
// 物料更新
materialObj.put("AlongSide", jsonObject.get("AlongSide"));
materialObj.put("BshortSide", jsonObject.get("BshortSide"));
materialObj.put("Htrapezoidal", jsonObject.get("Htrapezoidal"));
materialObj.put("Wthickness", jsonObject.get("Wthickness"));
WQLObject.getWQLObject("MD_ME_MaterialBase").insert(materialObj);
// 入库
jsonObject.put("type", "1");
this.apply((JSONObject) jsonObject);
this.apply(jsonObject);
}
/**
@ -466,21 +457,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
if (StrUtil.isEmpty(vehicle_code)) {
throw new BadRequestException("托盘条码不能为空!");
}
// 组盘表
JSONObject vehicleObj = WQLObject.getWQLObject("st_buss_vehiclegroup").query("vehicle_code='" + vehicle_code + "'").uniqueResult(0);
// 组盘表 - 对应的是钢托盘
JSONObject vehicleObj = WQLObject.getWQLObject("st_buss_vehiclegroup").query("vehicle_code = '" + vehicle_code + "'", "create_time desc").uniqueResult(0);
if (ObjectUtil.isEmpty(vehicleObj)) {
throw new BadRequestException("未找到托盘号为'" + vehicle_code + "'的组盘信息!");
}
// 获取工单
String workorder_id = vehicleObj.getString("producetask_id");
String workorder_id = vehicleObj.getString("producetask_id"); // workorder_id
JSONObject taskObj = WQLObject.getWQLObject("PDM_BD_WorkOrder").query("workorder_id='" + workorder_id + "'").uniqueResult(0);
//1代表去出窑,2 是优先包装
String is_package = "1";
if (StrUtil.equals(taskObj.getString("is_package"), "1")) {
is_package = "2";
}
JSONObject returnjo = new JSONObject();
returnjo.put("is_package", is_package);
returnjo.put("is_package", taskObj.getString("is_package"));
return returnjo;
}
@ -629,9 +616,49 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
String vehicle_code = whereJson.getString("vehicle_code");
JSONObject rywPoint = pointTab.query("point_code = 'RYW'").uniqueResult(0);
String group_id = rywPoint.getString("group_id");
if (ObjectUtil.isEmpty(group_id)) return;
JSONObject group = groupTab.query("group_id = '" + group_id + "'").uniqueResult(0);
group.put("vehicle_code", vehicle_code);
group.put("create_time", DateUtil.now());
groupTab.update(group);
// 清理点位
rywPoint.put("group_id", null);
pointTab.update(rywPoint);
}
/**
* 根据设备编码获取托盘信息
*
* @param jsonObject 条件
* @return Map<String, Object>
*/
@Override
public Map<String, Object> getVehicleInfoByDeviceCode(Map jsonObject) {
WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup");
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
WQLObject materialTab = WQLObject.getWQLObject("MD_ME_MaterialBase");
String point_code = (String) jsonObject.get("device_code");
JSONObject point = pointTab.query("point_code = '" + point_code + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(point)) throw new BadRequestException("未找到点位编码为'"+ point_code +"'的点位信息");
String group_id = point.getString("group_id");
JSONObject vehicleObj = groupTab.query("group_id = '" + group_id + "' AND is_delete='0'").uniqueResult(0);
if (ObjectUtil.isEmpty(vehicleObj)){
throw new BadRequestException("未找到组盘信息");
}
// 还需要返回砖型
String material_id = point.getString("material_id");
JSONObject materialObj = materialTab.query("material_id = '" + material_id + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(materialObj)) {
vehicleObj.put("AlongSide", materialObj.get("AlongSide"));
vehicleObj.put("BshortSide", materialObj.get("BshortSide"));
vehicleObj.put("Htrapezoidal", materialObj.get("Htrapezoidal"));
vehicleObj.put("Wthickness", materialObj.get("Wthickness"));
}
JSONObject result = new JSONObject();
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
result.put("data", vehicleObj);
return result;
}
private JSONObject getProduceInfoByCode(String code) { // 查找工单

6
lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java

@ -54,4 +54,10 @@ public class WmsToAcsServiceImpl implements WmsToAcsService {
return AcsUtil.notifyAcs(api, whereJson);
}
@Override
public JSONObject getTray(JSONArray whereJson) {
String api = "api/wms/queryTray";
return AcsUtil.notifyAcs(api, whereJson);
}
}

10
lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/RegionEnum.java

@ -1,5 +1,6 @@
package org.nl.wms.sch.manage;
import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;
@ -30,4 +31,13 @@ public enum RegionEnum {
private String id;
private String code;
private String name;
public static RegionEnum get(String id) {
for (RegionEnum regionEnum : RegionEnum.values()) {
if (StrUtil.equals(regionEnum.id, id)) {
return regionEnum;
}
}
return null;
}
}

5
lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/RegionIOEnum.java

@ -17,7 +17,10 @@ public enum RegionIOEnum {
CREATE_MODE_PC("1", "PC产生"),
CREATE_MODE_ACS("2", "ACS申请"),
CREATE_MODE_PDA("3", "手持创建"),
CREATE_MODE_INTERFACE("4", "外部接口产生");
CREATE_MODE_INTERFACE("4", "外部接口产生"),
// 计量单位
UNIT_ID_B("1", "块"),
UNIT_ID_T("2", "吨");
private final String code;
private final String name;

20
lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java

@ -19,6 +19,7 @@ import org.nl.wms.sch.service.PointService;
import org.nl.wms.sch.service.RegionService;
import org.nl.wms.sch.service.dto.PointDto;
import org.nl.wms.sch.service.dto.RegionDto;
import org.nl.wms.sch.tasks.PointUpdateUtil;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -167,15 +168,16 @@ public class PointServiceImpl implements PointService {
String pointStatus = dto.getPoint_status();
if (ObjectUtil.isNotEmpty(pointStatus) && pointStatus.equals("1")) { // 空位
dto.setMaterial_id("");
dto.setVehicle_type("");
dto.setVehicle_code("");
dto.setVehicle_qty("");
dto.setPcsn("");
dto.setTask_id(null);
dto.setIvt_qty(BigDecimal.valueOf(0));
dto.setInstorage_time(null);
dto.setStanding_time(BigDecimal.valueOf(0));
// dto.setMaterial_id("");
// dto.setVehicle_type("");
// dto.setVehicle_code("");
// dto.setVehicle_qty("");
// dto.setPcsn("");
// dto.setTask_id(null);
// dto.setIvt_qty(BigDecimal.valueOf(0));
// dto.setInstorage_time(null);
// dto.setStanding_time(BigDecimal.valueOf(0));
PointUpdateUtil.clearPoint(dto.getPoint_code());
} else if (pointStatus.equals("2")) { // 空载具
dto.setMaterial_id(null);
dto.setInstorage_time(now);

36
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/PointUpdateUtil.java

@ -1,8 +1,14 @@
package org.nl.wms.sch.tasks;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.ext.acs.service.impl.WmsToAcsServiceImpl;
import org.nl.wms.sch.manage.PointEnum;
/**
@ -11,7 +17,6 @@ import org.nl.wms.sch.manage.PointEnum;
* @Date: 2022/11/23
*/
public class PointUpdateUtil {
/**
* 清理点位
*/
@ -55,4 +60,33 @@ public class PointUpdateUtil {
pointObj.put("standing_time", "0");
pointTab.update(pointObj);
}
/**
* 访问acs获取点位数据更新点位信息
* 分拣呼叫空托盘空钢托盘叠盘架
* @param pointCodes
* @deprecated 只更新点位状态和载具类型
*/
public static void updatePoint(JSONArray pointCodes) {
WQLObject pointTable = WQLObject.getWQLObject("sch_base_point");
WmsToAcsServiceImpl wmsToAcsService = new WmsToAcsServiceImpl();
// 向ACS查询点位状态
JSONObject pointStatus = wmsToAcsService.getPointStatus(pointCodes);
// 找到对应的载具类型再去下发
JSONArray deviceDatas = pointStatus.getJSONArray("data");
for (int j = 0; j < deviceDatas.size(); j++) {
JSONObject pointObj = deviceDatas.getJSONObject(j);
String mode = pointObj.getString("mode"); // 工作状态:0脱机,其他正常
String error = pointObj.getString("error"); // 0是正常
if (mode.equals("0") || !error.equals("0")) continue; // 点位异常
String point_status = pointObj.getString("move"); // 点位状态:0无货,1有货(具体是空载具还是物料不知道)
String point_code = pointObj.getString("device_code");
//将托盘类型456....
String vehicle_type = pointObj.getString("container_type");
JSONObject pointObj2 = pointTable.query("point_code = '" + point_code + "'").uniqueResult(0);
pointObj2.put("point_status", Integer.parseInt(point_status) + 1); // 1空位, 2空载具
pointObj2.put("vehicle_type", vehicle_type);
pointTable.update(pointObj2);
}
}
}

87
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/SzCallMaterialTask.java → lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/RykCallMaterialTask.java

@ -1,4 +1,4 @@
package org.nl.wms.sch.tasks.callMaterial;
package org.nl.wms.sch.tasks.autoCallMaterial;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
@ -6,8 +6,6 @@ import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.common.utils.SecurityUtils;
import org.nl.modules.system.util.CodeUtil;
@ -18,21 +16,18 @@ import org.nl.wms.sch.manage.*;
import org.nl.wms.sch.tasks.AcsTaskDto;
import org.nl.wms.sch.tasks.PointUpdateUtil;
import org.nl.wms.util.IdUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
* @author: lyd
* @description: 烧制工序叫料 - 入窑位
* @Date: 2022/11/10
* @description: 入窑缓存自动送料
* @Date: 2022/11/24
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class SzCallMaterialTask extends AbstractAcsTask {
private final String THIS_CLASS = SzCallMaterialTask.class.getName();
public class RykCallMaterialTask extends AbstractAcsTask {
private final String THIS_CLASS = RykCallMaterialTask.class.getName();
/**
* 添加任务进行下发
*
@ -79,6 +74,7 @@ public class SzCallMaterialTask extends AbstractAcsTask {
String task_id = task.getString("task_id");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
String point_code2 = taskObj.getString("point_code2");
// 物料点
JSONObject material_point = pointTab.query("point_code = '" + taskObj.getString("point_code1") + "'").uniqueResult(0);
//任务取消
@ -112,7 +108,7 @@ public class SzCallMaterialTask extends AbstractAcsTask {
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
JSONObject requestObj = task.getJSONObject("request_param");
if (ObjectUtil.isEmpty(material_point)) return;
//区域出入表【st_ivt_regionIO】
WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO");
@ -126,10 +122,11 @@ public class SzCallMaterialTask extends AbstractAcsTask {
regionIoObj.put("region_name", material_point.getString("region_name"));
regionIoObj.put("material_id", taskObj.getString("material_id"));
regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code"));
regionIoObj.put("qty", requestObj.getString("qty"));
regionIoObj.put("qty", material_point.getString("qty"));
regionIoObj.put("ivt_weight", material_point.getString("weight"));
regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode());
regionIoObj.put("start_point_code", taskObj.getString("point_code1"));
regionIoObj.put("end_point_code", taskObj.getString("point_code2"));
regionIoObj.put("end_point_code", point_code2);
regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode());
regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd"));
regionIoObj.put("create_id", SecurityUtils.getCurrentUserId());
@ -137,12 +134,50 @@ public class SzCallMaterialTask extends AbstractAcsTask {
regionIoObj.put("create_time", DateUtil.now());
regionIoTab.insert(regionIoObj);
//完成后
/**
* 完成后将组盘id和任务id赋值到入窑口
*/
JSONObject uniqueResult = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
uniqueResult.put("group_id", material_point.getString("group_id"));
uniqueResult.put("task_id", material_point.getString("task_id"));
pointTab.update(uniqueResult);
// 物料点位解锁 并设置空位
PointUpdateUtil.clearPoint(material_point.getString("point_code"));
}
}
/**
* 自动生成任务
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void autoCreate() {
String point_code2 = "RYW";
//任务表【SCH_BASE_Task】
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
//点位基础表【SCH_BASE_Point】
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
//判断当前点是否有未完成的任务
JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + point_code2 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj)) return;
JSONObject object = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(object.getString("group_id"))) return;
// todo 判断是否有货
SchTaskDto dto = SchTaskDto.builder()
.task_id(IdUtil.getLongId())
.task_code(CodeUtil.getNewCode("TASK_CODE"))
.task_type("task_type")
.task_name("烧制出库")
.task_status(TaskStatusEnum.SURE_END.getCode())
.point_code2(point_code2)
.vehicle_type(PointEnum.VEHICLE_TYPE_STEEL_TRAY.getCode())
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
.build();
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
taskTab.insert(json);
}
/**
* @param form 创建任务需要的参数
* @return 返回任务标识
@ -150,9 +185,7 @@ public class SzCallMaterialTask extends AbstractAcsTask {
@Override
public String createTask(JSONObject form) {
String point_code2 = form.getString("point_code2");
String vehicle_type = form.getString("vehicle_type");
String vehicle_code = form.getString("vehicle_code");
String qty = form.getString("material_num");
String qty = form.getString("qty");
//生产工单表【PDM_BD_WorkOrder】
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
@ -175,10 +208,9 @@ public class SzCallMaterialTask extends AbstractAcsTask {
.material_qty(qty)
.task_status(TaskStatusEnum.SURE_END.getCode())
.point_code2(point_code2)
.vehicle_code(vehicle_code)
.workorder_id(workOrderObj.getLong("workorder_id"))
.material_id(workOrderObj.getLong("material_id"))
.vehicle_type(vehicle_type)
.vehicle_type(PointEnum.VEHICLE_TYPE_STEEL_TRAY.getCode())
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
.request_param(form.toJSONString())
@ -199,6 +231,7 @@ public class SzCallMaterialTask extends AbstractAcsTask {
*/
@Override
public void findStartPoint() {
// 到入窑缓存区找一托物料
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表
@ -206,14 +239,12 @@ public class SzCallMaterialTask extends AbstractAcsTask {
for (int i = 0; i < taskArr.size(); i++) {
JSONObject taskObj = taskArr.getJSONObject(i);
String material_id = taskObj.getString("material_id");
String vehicle_type = taskObj.getString("vehicle_type");
JSONObject queryParam = new JSONObject();
queryParam.put("flag", "1");
queryParam.put("material_id", material_id);
queryParam.put("region_code", "RYZCQ");
queryParam.put("vehicle_type", "%" + vehicle_type + "%");
// 到入窑暂存区找,优先找满拖的
JSONObject json1 = WQL.getWO("QSCH_szCallMaterial_01").addParamMap(queryParam).process().uniqueResult(0);
JSONObject json1 = WQL.getWO("QSCH_rykCallMaterial_01").addParamMap(queryParam).process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(json1)) {
// 拿到点位
JSONObject material_point = pointTab.query("point_id = '" + json1.getString("point_id") + "' and lock_type = '1'").uniqueResult(0);
@ -223,8 +254,9 @@ public class SzCallMaterialTask extends AbstractAcsTask {
pointTab.update(material_point);
taskObj.put("point_code1", material_point.getString("point_code"));
taskObj.put("material_id", material_point.getString("material_id"));
taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
taskObj.put("acs_task_type", "2");
taskObj.put("task_id", taskObj.getString("task_id"));
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
} else {
@ -247,11 +279,8 @@ public class SzCallMaterialTask extends AbstractAcsTask {
public void forceFinish(String task_id) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj))
this.updateTaskStatus(taskObj,"2");
else {
throw new BadRequestException("未找到该任务或者任务已完成!");
}
if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!");
this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.FORCEFINISH.getCode());
}
/**

7
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_szCallMaterial_01.wql → lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/autoCallMaterial/wql/QSCH_rykCallMaterial_01.wql

@ -1,5 +1,5 @@
[交易说明]
交易名: 烧制叫料
交易名: 入窑口自动任务 - 叫料
所属模块:
功能简述:
版权所有:
@ -56,16 +56,13 @@
AND is_delete = '0'
AND lock_type = '1'
AND point_status = '3'
AND is_full = '1'
OPTION 输入.material_id <> ""
p.material_id = 输入.material_id
ENDOPTION
OPTION 输入.region_code <> ""
p.region_code = 输入.region_code
ENDOPTION
OPTION 输入.vehicle_type <> ""
p.can_vehicle_type like 输入.vehicle_type
ENDOPTION
ORDER BY is_full desc
ENDSELECT
ENDQUERY
ENDIF

31
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/FjCallEmptyVehicleTask.java

@ -19,6 +19,7 @@ import org.nl.wms.sch.manage.RegionIOEnum;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.manage.UpdateTaskStatusEnum;
import org.nl.wms.sch.tasks.AcsTaskDto;
import org.nl.wms.sch.tasks.PointUpdateUtil;
import org.nl.wms.util.IdUtil;
import org.springframework.stereotype.Service;
@ -125,21 +126,9 @@ public class FjCallEmptyVehicleTask extends AbstractAcsTask {
regionIoObj.put("create_time", DateUtil.now());
regionIoTab.insert(regionIoObj);
// 点位更新,起点:空位,解锁;
startPoint.put("point_status", "1");
PointUpdateUtil.clearPoint(startPoint.getString("point_code"));
} else { // 钢托盘每次就一个
startPoint.put("lock_type", "1");
startPoint.put("task_id", "");
startPoint.put("pcsn", "");
startPoint.put("ivt_qty", "0");
startPoint.put("material_id", "");
startPoint.put("instorage_time", "");
startPoint.put("is_full", "2");
startPoint.put("standing_time", "0");
startPoint.put("vehicle_type", "");
startPoint.put("vehicle_code", "");
} else { // 钢托盘每次就一个 --- 如果是堆叠位5需要更新设备状态??
startPoint.put("point_status", "1");
startPoint.put("lock_type", "1");
startPoint.put("vehicle_qty", "0");
}
pointTab.update(startPoint);
}
@ -162,9 +151,7 @@ public class FjCallEmptyVehicleTask extends AbstractAcsTask {
String point_code2 = form.getString("point_code2");
String sub_device_code = point_code2.substring(0, point_code2.indexOf("_"));
String device_code = pointTab.query("point_code = '" + sub_device_code + "'").uniqueResult(0).getString("device_code");
String device_code = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0).getString("device_code");
JSONObject workOrderObj = workOrderTab.query("device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'").uniqueResult(0);
if (ObjectUtil.isEmpty(workOrderObj)) throw new BadRequestException("该设备当前未生产或者已删除");
@ -182,6 +169,7 @@ public class FjCallEmptyVehicleTask extends AbstractAcsTask {
.task_group_id(org.nl.wms.util.IdUtil.getLongId())
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
.request_param(form.toJSONString())
.build();
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
taskTab.insert(json);
@ -215,6 +203,7 @@ public class FjCallEmptyVehicleTask extends AbstractAcsTask {
if (ObjectUtil.isNotEmpty(noFullPoint)) { // 找到半满托盘,叫料出库
taskObj.put("update_time", DateUtil.now());
taskObj.put("point_code1", noFullPoint.getString("point_code"));
taskObj.put("group_id", noFullPoint.getString("group_id")); // 组盘信息挪到任务中
taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
taskTab.update(taskObj);
@ -223,6 +212,7 @@ public class FjCallEmptyVehicleTask extends AbstractAcsTask {
noFullPoint.put("lock_type", "2");
pointTab.update(noFullPoint);
} else { // 没有就呼叫空的木托盘
// todo
JSONObject param = new JSONObject();
param.put("flag", "2");
param.put("region_code", "BZZCQ");
@ -258,11 +248,8 @@ public class FjCallEmptyVehicleTask extends AbstractAcsTask {
public void forceFinish(String task_id) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj))
this.updateTaskStatus(taskObj,"2");
else {
throw new BadRequestException("未找到该任务或者任务已完成!");
}
if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!");
this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.FORCEFINISH.getCode());
}
/**

10
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/HnCallEmptyVehicleTask.java

@ -233,16 +233,10 @@ public class HnCallEmptyVehicleTask extends AbstractAcsTask {
*/
@Override
public void forceFinish(String task_id) {
/*
* 强制完成
*/
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj))
this.updateTaskStatus(taskObj,UpdateTaskStatusEnum.FORCEFINISH.getCode());
else {
throw new BadRequestException("未找到该任务或者任务已完成!");
}
if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!");
this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.FORCEFINISH.getCode());
}
/**

36
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/YzjCallEmptyVehicleTask.java

@ -85,6 +85,7 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask {
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
String point_code1 = task.getString("point_code1");
String point_code2 = task.getString("point_code2");
if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) {
/*
@ -97,7 +98,7 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask {
taskObj.put("update_time", DateUtil.now());
taskObj.put("remark", "已取消");
taskTab.update(taskObj);
if (ObjectUtil.isNotEmpty(point_code1) && !point_code1.equals("KGTDDW05")) {
if (ObjectUtil.isNotEmpty(point_code1)) {
JSONObject startPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);
startPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode());
pointTab.update(startPoint);
@ -121,9 +122,9 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask {
taskObj.put("update_optname", SecurityUtils.getCurrentUsername());
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
JSONObject startPoint = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);
if (point_code1.startsWith("R")) { // 入窑缓存位
if (ObjectUtil.isEmpty(startPoint)) return;
if (point_code1.startsWith("R")) { // 入窑缓存位 - 半托出库
// 插入出库单
JSONObject regionIoObj = new JSONObject();
regionIoObj.put("iostorinv_id", IdUtil.getLongId());
@ -136,6 +137,7 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask {
regionIoObj.put("material_id", taskObj.getString("material_id"));
regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code"));
regionIoObj.put("qty", requestObj.getString("qty"));
regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode());
regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode());
regionIoObj.put("start_point_code", taskObj.getString("point_code1"));
regionIoObj.put("end_point_code", taskObj.getString("point_code2"));
@ -147,7 +149,14 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask {
regionIoTab.insert(regionIoObj);
// 点位更新,起点:空位,解锁;
PointUpdateUtil.clearPoint(startPoint.getString("point_code"));
// 终点:压制机对接位,将半托的组盘id放进去
JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
endPoint.put("group_id", taskObj.getString("group_id"));
pointTab.update(endPoint);
}
// 起点解锁
startPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode());
pointTab.update(startPoint);
}
}
@ -224,6 +233,7 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask {
JSONObject noFullPoint = WQL.getWO("QSCH_yzjCallEmptyVehicle_01").addParamMap(noFull).process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(noFullPoint)) { // 找到半满托盘,叫料出库
taskObj.put("update_time", DateUtil.now());
taskObj.put("group_id", noFullPoint.getString("group_id")); // 组盘信息挪到任务中
taskObj.put("point_code1", noFullPoint.getString("point_code"));
taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
taskTab.update(taskObj);
@ -233,7 +243,13 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask {
noFullPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode());
pointTab.update(noFullPoint);
} else { // 到KGTDDW05找空钢托盘
// 访问acs更新点位状态
// 向ACS查询是否有空钢托盘
JSONArray params = new JSONArray();
JSONObject deviceCode = new JSONObject();
deviceCode.put("device_code", "KGTDDW05");
params.add(deviceCode);
PointUpdateUtil.updatePoint(params);
JSONObject param = new JSONObject();
param.put("flag", "2");
param.put("region_code", "KGTCPQ");
@ -269,11 +285,8 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask {
public void forceFinish(String task_id) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj))
this.updateTaskStatus(taskObj,"2");
else {
throw new BadRequestException("未找到该任务或者任务已完成!");
}
if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!");
this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.FORCEFINISH.getCode());
}
/**
@ -285,10 +298,7 @@ public class YzjCallEmptyVehicleTask extends AbstractAcsTask {
public void cancel(String task_id) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj))
this.updateTaskStatus(taskObj,"0");
else {
throw new BadRequestException("未找到该任务或者任务已完成!");
}
if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!");
this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.CANCEL.getCode());
}
}

4
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callEmpty/wql/QSCH_fjCallEmptyVehicle_01.wql

@ -52,13 +52,13 @@
lock_type = '1'
AND is_used = '1'
AND is_delete = '0'
AND is_full = '2'
AND is_full = '0'
AND point_status = '3'
AND point_type = '1'
OPTION 输入.region_code <> ""
p.region_code = 输入.region_code
ENDOPTION
ORDER BY col_num,row_num,layer_num
ORDER BY instorage_time desc
ENDSELECT
ENDQUERY
ENDIF

66
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/FjCallMaterialTask.java

@ -14,9 +14,9 @@ import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.sch.SchTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.manage.*;
import org.nl.wms.sch.tasks.AcsTaskDto;
import org.nl.wms.sch.tasks.PointUpdateUtil;
import org.nl.wms.util.IdUtil;
import org.springframework.stereotype.Service;
@ -82,7 +82,7 @@ public class FjCallMaterialTask extends AbstractAcsTask {
// 物料点
JSONObject material_point = pointTab.query("point_code = '" + taskObj.getString("point_code1") + "'").uniqueResult(0);
//任务取消
if (StrUtil.equals(status, "0")) {
if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) {
// 取消删除任务
if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) {
throw new BadRequestException("已完成不能取消!");
@ -93,12 +93,12 @@ public class FjCallMaterialTask extends AbstractAcsTask {
if (ObjectUtil.isNotEmpty(material_point)) {
// 点位解锁
material_point.put("lock_type", "1");
material_point.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode());
pointTab.update(material_point);
}
}
if ("1".equals(status)) {
if (UpdateTaskStatusEnum.EXECUTION.getCode().equals(status)) {
// 更新任务状态为执行中
taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode());
taskObj.put("update_time", DateUtil.now());
@ -106,7 +106,7 @@ public class FjCallMaterialTask extends AbstractAcsTask {
taskTab.update(taskObj);
}
if (StrUtil.equals(status, "2")) {
if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) {
// 更改任务状态为完成
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
taskObj.put("update_time", DateUtil.now());
@ -120,37 +120,28 @@ public class FjCallMaterialTask extends AbstractAcsTask {
regionIoObj.put("iostorinv_id", IdUtil.getLongId());
regionIoObj.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE"));
regionIoObj.put("buss_date", DateUtil.today());
regionIoObj.put("io_type", "2"); // 出库
regionIoObj.put("io_type", RegionIOEnum.IO_TYPE_OUT.getCode()); // 出库
regionIoObj.put("region_id", material_point.getString("region_id"));
regionIoObj.put("region_code", material_point.getString("region_code"));
regionIoObj.put("region_name", material_point.getString("region_name"));
regionIoObj.put("material_id", taskObj.getString("material_id"));
regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code"));
regionIoObj.put("qty", requestObj.getString("qty"));
regionIoObj.put("bill_status", "3");
regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode());
regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode());
regionIoObj.put("start_point_code", taskObj.getString("point_code1"));
regionIoObj.put("end_point_code", taskObj.getString("point_code2"));
regionIoObj.put("create_mode", "2");
regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode());
regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd"));
regionIoObj.put("create_id", SecurityUtils.getCurrentUserId());
regionIoObj.put("create_name", SecurityUtils.getCurrentNickName());
regionIoObj.put("create_time", DateUtil.now());
regionIoObj.put("task_id", taskObj.getString("task_id"));
regionIoTab.insert(regionIoObj);
//完成后
// 物料点位解锁 并设置空位
material_point.put("lock_type", "1");
material_point.put("point_status", "1");
material_point.put("task_id", "");
material_point.put("pcsn", "");
material_point.put("ivt_qty", "0");
material_point.put("material_id", "");
material_point.put("instorage_time", "");
material_point.put("is_full", "2");
material_point.put("standing_time", "0");
material_point.put("vehicle_type", "");
material_point.put("vehicle_code", "");
pointTab.update(material_point);
PointUpdateUtil.clearPoint(material_point.getString("point_code"));
}
}
@ -161,16 +152,14 @@ public class FjCallMaterialTask extends AbstractAcsTask {
@Override
public String createTask(JSONObject form) {
String point_code2 = form.getString("point_code2");
String vehicle_type = form.getString("vehicle_type");
String vehicle_code = form.getString("vehicle_code");
String qty = form.getString("material_num");
String qty = form.getString("qty");
//生产工单表【PDM_BD_WorkOrder】
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
//任务表【SCH_BASE_Task】
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
//判断当前点是否有未完成的任务
JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + point_code2 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
JSONObject taskObj = taskTab.query("is_delete = '0' and point_code2 = '" + point_code2 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code2 + "存在未完成的任务");
//点位基础表【SCH_BASE_Point】
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
@ -186,10 +175,9 @@ public class FjCallMaterialTask extends AbstractAcsTask {
.material_qty(qty)
.task_status(TaskStatusEnum.SURE_END.getCode())
.point_code2(point_code2)
.vehicle_code(vehicle_code)
.workorder_id(workOrderObj.getLong("workorder_id"))
.material_id(workOrderObj.getLong("material_id"))
.vehicle_type(vehicle_type)
.vehicle_type(PointEnum.VEHICLE_TYPE_STEEL_TRAY.getCode())
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
.request_param(form.toJSONString())
@ -213,16 +201,15 @@ public class FjCallMaterialTask extends AbstractAcsTask {
// 到出窑缓存区找一托物料
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表
WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup"); // 组盘表
JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '" + TaskStatusEnum.SURE_END.getCode() + "'").getResultJSONArray(0);
for (int i = 0; i < taskArr.size(); i++) {
JSONObject taskObj = taskArr.getJSONObject(i);
String material_id = taskObj.getString("material_id");
String vehicle_type = taskObj.getString("vehicle_type");
JSONObject queryParam = new JSONObject();
queryParam.put("flag", "1");
queryParam.put("material_id", material_id);
queryParam.put("region_code", "CYZCQ");
queryParam.put("vehicle_type", "%" + vehicle_type + "%");
// 到出窑暂存区找
JSONObject json1 = WQL.getWO("QSCH_cyCallMaterial_01").addParamMap(queryParam).process().uniqueResult(0);
if (ObjectUtil.isNotEmpty(json1)) {
@ -230,12 +217,16 @@ public class FjCallMaterialTask extends AbstractAcsTask {
JSONObject material_point = pointTab.query("point_id = '" + json1.getString("point_id") + "' and lock_type = '1'").uniqueResult(0);
if (ObjectUtil.isEmpty(material_point)) throw new BadRequestException("数据错误,请校验!");
// 物料点位上锁
material_point.put("lock_type", "2");
material_point.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode());
material_point.put("task_id", taskObj.getString("task_id"));
pointTab.update(material_point);
// 将组盘标识赋给任务
taskObj.put("group_id", material_point.getString("group_id"));
JSONObject object = groupTab.query("group_id = '" + material_point.getString("group_id") + "'").uniqueResult(0);
taskObj.put("vehicle_code", object.getString("vehicle_code"));
taskObj.put("point_code1", material_point.getString("point_code"));
taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
taskObj.put("acs_task_type", "2");
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
} else {
@ -256,7 +247,10 @@ public class FjCallMaterialTask extends AbstractAcsTask {
*/
@Override
public void forceFinish(String task_id) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!");
this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.FORCEFINISH.getCode());
}
/**
@ -266,6 +260,12 @@ public class FjCallMaterialTask extends AbstractAcsTask {
*/
@Override
public void cancel(String task_id) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj))
this.updateTaskStatus(taskObj,UpdateTaskStatusEnum.CANCEL.getCode());
else {
throw new BadRequestException("未找到该任务或者任务已完成!");
}
}
}

11
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/YzjCallMaterialTask.java

@ -126,6 +126,8 @@ public class YzjCallMaterialTask extends AbstractAcsTask {
regionIoObj.put("material_id", taskObj.getString("material_id"));
regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code"));
regionIoObj.put("qty", requestObj.getString("qty"));
regionIoObj.put("ivt_weight", requestObj.getString("weight"));
regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_T.getCode());
regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode());
regionIoObj.put("start_point_code", taskObj.getString("point_code1"));
regionIoObj.put("end_point_code", taskObj.getString("point_code2"));
@ -150,7 +152,7 @@ public class YzjCallMaterialTask extends AbstractAcsTask {
String point_code2 = form.getString("point_code2");
String vehicle_type = form.getString("vehicle_type");
String vehicle_code = form.getString("vehicle_code");
String qty = form.getString("material_num");
String qty = form.getString("qty");
//生产工单表【PDM_BD_WorkOrder】
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
@ -271,11 +273,8 @@ public class YzjCallMaterialTask extends AbstractAcsTask {
public void forceFinish(String task_id) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj))
this.updateTaskStatus(taskObj,"2");
else {
throw new BadRequestException("未找到该任务或者任务已完成!");
}
if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!");
this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.FORCEFINISH.getCode());
}
/**

5
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/callMaterial/wql/QSCH_cyCallMaterial_01.wql

@ -62,10 +62,7 @@
OPTION 输入.region_code <> ""
p.region_code = 输入.region_code
ENDOPTION
OPTION 输入.vehicle_type <> ""
p.can_vehicle_type like 输入.vehicle_type
ENDOPTION
ORDER BY col_num,row_num,layer_num
ORDER BY instorage_time
ENDSELECT
ENDQUERY
ENDIF

23
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/DpSendEmpVehicleTask.java

@ -15,9 +15,11 @@ import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.sch.SchTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.PointEnum;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.manage.UpdateTaskStatusEnum;
import org.nl.wms.sch.tasks.AcsTaskDto;
import org.nl.wms.sch.tasks.PointUpdateUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -109,7 +111,7 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask {
pointTab.update(point_2);
// 起点设置为空位
JSONObject point_1 = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);
point_1.put("point_status", "1");
point_1.put("point_status", PointEnum.POINT_STATUS_EMPTY_POSITION.getCode());
pointTab.update(point_1);
}
}
@ -126,15 +128,17 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
String point_code1 = form.getString("point_code1");
//判断当前点是否有未完成的任务
JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + point_code1 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code1 + "存在未完成的任务");
SchTaskDto dto = SchTaskDto.builder().task_id(org.nl.wms.util.IdUtil.getLongId())
.task_code(CodeUtil.getNewCode("TASK_CODE"))
.task_type("")
.task_name("叠盘空钢托盘入库")
.task_name("空钢托叠盘区->空钢托拆盘区")
.task_status(TaskStatusEnum.SURE_START.getCode())
.point_code1(point_code1)
.vehicle_code(form.getString("vehicle_code"))
.vehicle_type(form.getString("vehicle_type"))
.vehicle_type(PointEnum.VEHICLE_TYPE_STEEL_TRAY.getCode())
.vehicle_qty(form.getIntValue("qty"))
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
@ -160,8 +164,15 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask {
JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '2'").getResultJSONArray(0);
for (int i = 0; i < taskArr.size(); i++) {
JSONObject taskObj = taskArr.getJSONObject(i);
// 请求acs查看堆叠位是否可以搬运,修改对应点的点位
JSONArray params = new JSONArray();
JSONObject param = new JSONObject();
param.put("device_code", "KGTDDW01");
params.add(param);
PointUpdateUtil.updatePoint(params);
// 直接找
JSONObject endPoint = pointTab.query("point_code = 'KGTDDW01' AND lock_type = '1' AND is_used='1'").uniqueResult(0);
JSONObject endPoint = pointTab.query("point_code = 'KGTDDW01' AND lock_type = '1' AND is_used = '1' AND is_delete = '0'").uniqueResult(0);
if (ObjectUtil.isEmpty(endPoint)) {
taskObj.put("remark", "钢托盘堆叠位不可用!");
taskObj.put("task_status", TaskStatusEnum.SURE_START.getCode());
@ -175,7 +186,7 @@ public class DpSendEmpVehicleTask extends AbstractAcsTask {
//锁住终点
endPoint.put("task_id", taskObj.getString("task_id"));
endPoint.put("lock_type", "2");
endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode());
pointTab.update(endPoint);
}
}

41
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/FjSendEmpVehicleTask.java

@ -16,7 +16,9 @@ import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.sch.SchTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.PointEnum;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.manage.UpdateTaskStatusEnum;
import org.nl.wms.sch.tasks.AcsTaskDto;
import org.springframework.stereotype.Service;
@ -59,7 +61,7 @@ public class FjSendEmpVehicleTask extends AbstractAcsTask {
String point_code2 = taskObj.getString("point_code2");
JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
if (StrUtil.equals(status, "0")) {
if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) {
// 取消删除任务
if (StrUtil.equals(jsonTask.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) {
throw new BadRequestException("已完成不能取消!");
@ -67,7 +69,7 @@ public class FjSendEmpVehicleTask extends AbstractAcsTask {
// 解锁终点位置
if (ObjectUtil.isNotEmpty(point_code2)) { // 未找到终点的取消只需要完成任务就行
JSONObject point2 = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
point2.put("lock_type", "1");
point2.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode());
pointTab.update(point2);
}
// 任务设置为完成
@ -76,7 +78,7 @@ public class FjSendEmpVehicleTask extends AbstractAcsTask {
taskTab.update(jsonTask);
}
if ("1".equals(status)) {
if (UpdateTaskStatusEnum.EXECUTION.getCode().equals(status)) {
// 更新任务状态为执行中
jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode());
jsonTask.put("update_time", DateUtil.now());
@ -84,7 +86,7 @@ public class FjSendEmpVehicleTask extends AbstractAcsTask {
taskTab.update(jsonTask);
}
if (StrUtil.equals(status, "2")) {
if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) {
// 更改任务状态为完成
jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode());
jsonTask.put("update_optid", SecurityUtils.getCurrentUserId());
@ -94,16 +96,8 @@ public class FjSendEmpVehicleTask extends AbstractAcsTask {
// 释放点位
if (ObjectUtil.isNotEmpty(point_code2)) { // 防止只有确定起点的任务完成
JSONObject point_2 = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
point_2.put("lock_type", "1");
point_2.put("point_status", "2");
point_2.put("vehicle_code", jsonTask.getString("vehicle_code"));
point_2.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode());
point_2.put("vehicle_qty", NumberUtil.add(point_2.getString("vehicle_qty"), jsonTask.getString("vehicle_qty")));
point_2.put("instorage_time", DateUtil.now());
point_2.put("is_full", "1");
point_2.put("ivt_qty", "0");
point_2.put("pcsn", "");
point_2.put("material_id", "");
point_2.put("standing_time", "0");
pointTab.update(point_2);
}
}
@ -119,16 +113,19 @@ public class FjSendEmpVehicleTask extends AbstractAcsTask {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
String point_code1 = form.getString("point_code1");
//判断当前点是否有未完成的任务
JSONObject taskObj = taskTab.query("is_delete = '0' and point_code2 = '" + point_code1 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code1 + "存在未完成的任务");
SchTaskDto dto = SchTaskDto.builder().task_id(org.nl.wms.util.IdUtil.getLongId())
.task_code(CodeUtil.getNewCode("TASK_CODE"))
.task_type("")
.task_name("分拣空钢托盘入库")
.task_name("分拣空钢托盘")
.task_status(TaskStatusEnum.SURE_START.getCode())
.point_code1(point_code1)
.vehicle_code(form.getString("vehicle_code"))
.vehicle_type(form.getString("vehicle_type"))
.vehicle_qty(form.getIntValue("qty"))
.vehicle_qty(1)
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
.build();
@ -153,7 +150,7 @@ public class FjSendEmpVehicleTask extends AbstractAcsTask {
for (int i = 0; i < taskArr.size(); i++) {
JSONObject taskObj = taskArr.getJSONObject(i);
// 直接找
JSONObject endPoint = pointTab.query("point_code = 'KGTDTW01' AND lock_type = '1' AND is_used='1'").uniqueResult(0);
JSONObject endPoint = pointTab.query("point_code = 'KGTDTW01' AND lock_type = '1'").uniqueResult(0);
if (ObjectUtil.isEmpty(endPoint)) {
taskObj.put("remark", "钢托盘叠托位不可用!");
taskObj.put("task_status", TaskStatusEnum.SURE_START.getCode());
@ -167,7 +164,7 @@ public class FjSendEmpVehicleTask extends AbstractAcsTask {
//锁住终点
endPoint.put("task_id", taskObj.getString("task_id"));
endPoint.put("lock_type", "2");
endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode());
pointTab.update(endPoint);
}
}
@ -182,7 +179,10 @@ public class FjSendEmpVehicleTask extends AbstractAcsTask {
*/
@Override
public void forceFinish(String task_id) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!");
this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.FORCEFINISH.getCode());
}
/**
@ -192,6 +192,9 @@ public class FjSendEmpVehicleTask extends AbstractAcsTask {
*/
@Override
public void cancel(String task_id) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!");
this.updateTaskStatus(taskObj,UpdateTaskStatusEnum.CANCEL.getCode());
}
}

10
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendEmpty/YzjSendEmpVehicleTask.java

@ -210,16 +210,10 @@ public class YzjSendEmpVehicleTask extends AbstractAcsTask {
*/
@Override
public void forceFinish(String task_id) {
/*
* 强制完成
*/
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj))
this.updateTaskStatus(taskObj,UpdateTaskStatusEnum.FORCEFINISH.getCode());
else {
throw new BadRequestException("未找到该任务或者任务已完成!");
}
if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!");
this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.FORCEFINISH.getCode());
}
/**

246
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/FjSendMaterialTask.java

@ -13,14 +13,17 @@ import org.nl.modules.common.utils.SecurityUtils;
import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.sch.SchTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.manage.*;
import org.nl.wms.sch.tasks.AcsTaskDto;
import org.nl.wms.sch.tasks.PointUpdateUtil;
import org.nl.wms.sch.tasks.sendEmpty.FjSendEmpVehicleTask;
import org.nl.wms.util.IdUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
/**
@ -33,6 +36,8 @@ import java.util.List;
@Slf4j
public class FjSendMaterialTask extends AbstractAcsTask {
private final String THIS_CLASS = FjSendEmpVehicleTask.class.getName();
private final WmsToAcsService wmsToAcsService;
/**
* 添加任务进行下发
*
@ -40,11 +45,32 @@ public class FjSendMaterialTask extends AbstractAcsTask {
*/
@Override
public List<AcsTaskDto> addTask() {
return null;
/*
* 下发给ACS时需要特殊处理
*/
JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0);
ArrayList<AcsTaskDto> acsTaskArr = new ArrayList<>();
for (int i = 0; i < arr.size(); i++) { // 任务
JSONObject json = arr.getJSONObject(i);
AcsTaskDto dto = AcsTaskDto.builder()
.task_id(json.getString("task_id"))
.task_code(json.getString("task_code"))
.task_type(json.getString("acs_task_type"))
.start_device_code(json.getString("point_code1"))
.next_device_code(json.getString("point_code2"))
.vehicle_code(json.getString("vehicle_code"))
.vehicle_type(json.getString("vehicle_type"))
.priority(json.getString("priority"))
.remark(json.getString("remark"))
.build();
acsTaskArr.add(dto);
}
return acsTaskArr;
}
/**
* @param taskObj 代表一条任务对象
* @param task 代表一条任务对象
* @param status 代表wcs任务完成状态 //0:acs,取消,:执行中,2:完成
* @return
* @discription wcs请求wms任务完成状态反馈接口, 比如agv从a点往b点走生成任务的时候绑定b的物料信息任务完成的时候清除a的物料信息
@ -52,23 +78,26 @@ public class FjSendMaterialTask extends AbstractAcsTask {
* @created 2019年4月17日 下午8:51:50
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject task, String status) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO");
String task_id = task.getString("task_id");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
//任务取消
if (StrUtil.equals(status, "0")) {
if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) {
// 取消删除任务
if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) {
throw new BadRequestException("已完成不能取消!");
}
String point_code2 = taskObj.getString("point_code2");
if (ObjectUtil.isEmpty(point_code2)) {
if (ObjectUtil.isNotEmpty(point_code2)) {
JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
endPoint.put("lock_type", "1");
endPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode());
pointTab.update(endPoint);
}
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
@ -76,7 +105,7 @@ public class FjSendMaterialTask extends AbstractAcsTask {
taskTab.update(taskObj);
}
if ("1".equals(status)) {
if (UpdateTaskStatusEnum.EXECUTION.getCode().equals(status)) {
// 更新任务状态为执行中
taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode());
taskObj.put("update_time", DateUtil.now());
@ -84,7 +113,11 @@ public class FjSendMaterialTask extends AbstractAcsTask {
taskTab.update(taskObj);
}
if (StrUtil.equals(status, "2")) {
if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) {
/**
* 任务完成
* 取木托盘完成送物料完成
*/
// 更改任务状态为完成
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
taskObj.put("update_optid", SecurityUtils.getCurrentUserId());
@ -92,52 +125,95 @@ public class FjSendMaterialTask extends AbstractAcsTask {
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
String point_code1 = taskObj.getString("point_code1");
String point_code2 = taskObj.getString("point_code2");
JSONObject point1Obj = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);
JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
JSONObject requestObj = task.getJSONObject("request_param");
//工单标识
String workorder_id = requestObj.getString("workorder_id");
//生产工单表【PDM_BD_WorkOrder】
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
JSONObject workorderObj = workOrderTab.query("workorder_id", workorder_id).uniqueResult(0);
if (!point_code2.equals("BZX01")) { // 半满到包装暂存区,记录库存
//区域出入表【st_ivt_regionIO】
WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO");
String workorder_id = taskObj.getString("workorder_id");
JSONObject workorderObj = workOrderTab.query("workorder_id = '" + workorder_id + "'").uniqueResult(0);
String sort_seq = taskObj.getString("sort_seq");
if (sort_seq.equals("1")) { // 取空托盘任务
// 避免没有找到位置
if (ObjectUtil.isEmpty(point1Obj)) return;
// 需要判断取的是否为半满或者是控盘
// 半托
if (point1Obj.getString("region_code").equals(RegionEnum.BZZCQ.getCode())) {
// 物料出库
// 插入出库单
JSONObject regionIoObj = new JSONObject();
regionIoObj.put("iostorinv_id", IdUtil.getLongId());
regionIoObj.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE"));
regionIoObj.put("buss_date", DateUtil.today());
regionIoObj.put("io_type", RegionIOEnum.IO_TYPE_OUT.getCode()); // 出库
regionIoObj.put("region_id", point1Obj.getString("region_id"));
regionIoObj.put("region_code", point1Obj.getString("region_code"));
regionIoObj.put("region_name", point1Obj.getString("region_name"));
regionIoObj.put("material_id", taskObj.getString("material_id"));
regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code"));
regionIoObj.put("qty", requestObj.getString("qty"));
regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode());
regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode());
regionIoObj.put("start_point_code", taskObj.getString("point_code1"));
regionIoObj.put("end_point_code", taskObj.getString("point_code2"));
regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode());
regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd"));
regionIoObj.put("create_id", SecurityUtils.getCurrentUserId());
regionIoObj.put("create_name", SecurityUtils.getCurrentNickName());
regionIoObj.put("create_time", DateUtil.now());
regionIoTab.insert(regionIoObj);
// 点位更新,起点:空位,解锁;
PointUpdateUtil.clearPoint(point1Obj.getString("point_code"));
// 终点:码垛对接位,将半托的组盘id放进去
point2Obj.put("group_id", taskObj.getString("group_id"));
pointTab.update(point2Obj);
}
// 起点解锁
point1Obj.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode());
pointTab.update(point1Obj);
}
if (sort_seq.equals("2")) { // 送物料任务
// 避免没有找到位置
if (ObjectUtil.isEmpty(point2Obj)) return;
JSONObject regionIoObj = new JSONObject();
regionIoObj.put("iostorinv_id", IdUtil.getLongId());
regionIoObj.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE"));
regionIoObj.put("buss_date", DateUtil.today());
regionIoObj.put("io_type", "1");
regionIoObj.put("io_type", RegionIOEnum.IO_TYPE_IN.getCode());
regionIoObj.put("region_id", point2Obj.getString("region_id"));
regionIoObj.put("region_code", point2Obj.getString("region_code"));
regionIoObj.put("region_name", point2Obj.getString("region_name"));
regionIoObj.put("material_id", taskObj.getString("material_id"));
regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code"));
regionIoObj.put("qty", requestObj.getString("qty"));
regionIoObj.put("bill_status", "3");
regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode());
regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode());
regionIoObj.put("start_point_code", taskObj.getString("point_code1"));
regionIoObj.put("end_point_code", taskObj.getString("point_code3"));
regionIoObj.put("create_mode", "2");
regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode());
regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd"));
regionIoObj.put("create_id", SecurityUtils.getCurrentUserId());
regionIoObj.put("create_name", SecurityUtils.getCurrentNickName());
regionIoObj.put("create_time", DateUtil.now());
regionIoTab.insert(regionIoObj);
//完成后入库
point2Obj.put("instorage_time", DateUtil.now());
point2Obj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd"));
point2Obj.put("ivt_qty", requestObj.getString("qty"));
point2Obj.put("standing_time", workorderObj.getString("standing_time"));
point2Obj.put("material_id", workorderObj.getString("material_id"));
point2Obj.put("vehicle_type", workorderObj.getString("vehicle_type"));
point2Obj.put("vehicle_code", taskObj.getString("vehicle_code"));
point2Obj.put("is_full", requestObj.getString("is_full"));
point2Obj.put("point_status", "3");
if (!point_code2.equals("BZX01")) { // 半满到包装暂存区,记录库存
//完成后入库
point2Obj.put("instorage_time", DateUtil.now());
point2Obj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd"));
point2Obj.put("ivt_qty", requestObj.getString("qty"));
point2Obj.put("standing_time", workorderObj.getString("standing_time"));
point2Obj.put("material_id", workorderObj.getString("material_id"));
point2Obj.put("vehicle_type", workorderObj.getString("vehicle_type"));
point2Obj.put("vehicle_code", taskObj.getString("vehicle_code"));
point2Obj.put("group_id", taskObj.getString("group_id")); // 组盘标识
point2Obj.put("is_full", requestObj.getString("is_full"));
point2Obj.put("point_status", PointEnum.POINT_STATUS_HAVE_MATERIAL.getCode());
}
// 终点解锁
point2Obj.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode());
pointTab.update(point2Obj);
}
// 终点解锁
point2Obj.put("lock_type", "1");
pointTab.update(point2Obj);
}
}
@ -146,6 +222,7 @@ public class FjSendMaterialTask extends AbstractAcsTask {
* @return 返回任务标识
*/
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject form) {
String point_code1 = form.getString("point_code1");
String vehicle_code = form.getString("vehicle_code");
@ -180,8 +257,11 @@ public class FjSendMaterialTask extends AbstractAcsTask {
.workorder_id(workOrderObj.getLong("workorder_id"))
.material_id(workOrderObj.getLong("material_id"))
.handle_class(THIS_CLASS)
.group_id(form.getLong("group_id"))
.create_time(DateUtil.now())
.request_param(form.toJSONString())
.task_group_id(IdUtil.getLongId())
.sort_seq(2)
.build();
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
taskTab.insert(json);
@ -197,6 +277,7 @@ public class FjSendMaterialTask extends AbstractAcsTask {
* @created 2020年6月12日 下午6:01:06
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void findNextPoint() {
// 判断是否满拖:半满->包装暂存区,满->包装线
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
@ -207,27 +288,96 @@ public class FjSendMaterialTask extends AbstractAcsTask {
JSONObject requestObj = taskObj.getJSONObject("request_param");
if (requestObj.getString("is_full").equals("1")) {
JSONObject endPoint = pointTab.query("point_code = 'BZX01' AND lock_type = '1'").uniqueResult(0);
// 满拖就到包装线
// 满拖先生成叫半托,没有在呼叫空托盘的任务,在执行去到包装线
SchTaskDto dto = SchTaskDto.builder()
.task_id(IdUtil.getLongId())
.task_code(CodeUtil.getNewCode("TASK_CODE"))
.task_type("task_type")
.task_name("分拣呼叫空托盘")
.vehicle_type(taskObj.getString("vehicle_type")) // 与满拖的类型一致,因为工单未结束
.material_qty(taskObj.getString("material_qty"))
.task_status(TaskStatusEnum.SURE_END.getCode())
.point_code2(taskObj.getString("point_code2"))
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
.sort_seq(1)
.task_group_id(taskObj.getLong("task_group_id"))
.build();
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
taskTab.insert(json);
// 先呼叫半托
JSONObject halfTray = pointTab.query("region_code = 'BZZCQ' AND lock_type = '1' " +
"AND point_status = '2' AND is_used = '1' AND is_delete = '0'").uniqueResult(0);
// 获取任务
JSONObject taskEnt = taskTab.query("task_id = '" + dto.getTask_id() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(halfTray)) { // 半托
// 去搬运
taskEnt.put("point_code1", halfTray.getString("point_code"));
taskEnt.put("update_time", DateUtil.now());
taskEnt.put("group_id", halfTray.getString("group_id")); // 半托要把组盘标识记录起来
taskEnt.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
taskTab.update(taskEnt);
// 更新半托点位状态
halfTray.put("task_id", taskObj.getString("task_id"));
halfTray.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode());
pointTab.update(halfTray);
} else {
// 没有半托呼叫空木托盘
// 获取所有的托盘堆叠位
JSONArray pointCodes = WQL.getWO("QSCH_fjSendMaterial_01").addParam("flag", "2").process().getResultJSONArray(0);
// 更新点位
PointUpdateUtil.updatePoint(pointCodes);
// 找到载具类型符合的覆膜机位置:真正的位置在device_code
JSONObject emptyTray = pointTab.query("region_code = 'RGCPQ' AND vehicle_type = '" +
taskObj.getString("vehicle_type") + "' AND point_status = '2' " +
"AND is_used = '1' AND is_delete = '0' AND lock_type = '1'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(emptyTray)) {
// 向ACS申请传送一个空木托盘
JSONArray jsonArray = new JSONArray();
JSONObject data = new JSONObject();
data.put("device_code", emptyTray.getString("point_code"));
jsonArray.add(data);
wmsToAcsService.getTray(jsonArray);
// 去搬运
taskEnt.put("point_code1", emptyTray.getString("device_code"));
taskEnt.put("update_time", DateUtil.now());
taskEnt.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
taskTab.update(taskEnt);
// 更新空托盘点位状态
emptyTray.put("task_id", taskObj.getString("task_id"));
emptyTray.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode());
pointTab.update(emptyTray);
} else {
taskEnt.put("remark", "暂无空托盘");
taskEnt.put("update_time", DateUtil.now());
taskTab.update(taskEnt);
// 满拖搬运也不下发
taskObj.put("remark", "暂无空托盘");
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
return;
}
}
// 更新送料任务信息
taskObj.put("update_time", DateUtil.now());
taskObj.put("point_code2", endPoint.getString("point_code"));
taskObj.put("task_status", TaskStatusEnum.START_AND_POINT.getCode());
taskTab.update(taskObj);
//锁住终点
//锁住送料任务终点
endPoint.put("task_id", taskObj.getString("task_id"));
endPoint.put("lock_type", "2");
endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode());
pointTab.update(endPoint);
} else {
// 半满拖就去包装暂存区
String vehicle_type = taskObj.getString("vehicle_type");
JSONObject param1 = new JSONObject();
param1.put("flag", "1");
param1.put("region_code", "BZZCQ");
param1.put("vehicle_type", "%" + vehicle_type + "%");
//1、查找困料货架是否有响应的载具类型和对应的物料
JSONObject endPoint = WQL.getWO("QSCH_fjCallEmptyVehicle_01").addParamMap(param1).process().uniqueResult(0);
JSONObject endPoint = WQL.getWO("QSCH_fjSendMaterial_01").addParamMap(param1).process().uniqueResult(0);
if (ObjectUtil.isEmpty(endPoint)) {
taskObj.put("remark", "包装暂存区无可用货位!");
taskObj.put("remark", "包装暂存区无可用货位");
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
} else {
@ -238,7 +388,7 @@ public class FjSendMaterialTask extends AbstractAcsTask {
//锁住终点
endPoint.put("task_id", taskObj.getString("task_id"));
endPoint.put("lock_type", "2");
endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode());
pointTab.update(endPoint);
}
}
@ -256,11 +406,8 @@ public class FjSendMaterialTask extends AbstractAcsTask {
public void forceFinish(String task_id) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj))
this.updateTaskStatus(taskObj,"2");
else {
throw new BadRequestException("未找到该任务或者任务已完成!");
}
if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!");
this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.FORCEFINISH.getCode());
}
/**
@ -272,10 +419,7 @@ public class FjSendMaterialTask extends AbstractAcsTask {
public void cancel(String task_id) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj))
this.updateTaskStatus(taskObj,"0");
else {
throw new BadRequestException("未找到该任务或者任务已完成!");
}
if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!");
this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.CANCEL.getCode());
}
}

11
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/HnSendMaterialTask.java

@ -146,6 +146,7 @@ public class HnSendMaterialTask extends AbstractAcsTask {
regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code"));
regionIoObj.put("qty", requestObj.getString("qty"));
regionIoObj.put("ivt_weight", requestObj.getString("weight"));
regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_T.getCode());
regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode());
regionIoObj.put("start_point_code", taskObj.getString("point_code1"));
regionIoObj.put("end_point_code", taskObj.getString("point_code2"));
@ -314,16 +315,10 @@ public class HnSendMaterialTask extends AbstractAcsTask {
*/
@Override
public void forceFinish(String task_id) {
/*
* 强制完成
*/
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj))
this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.FORCEFINISH.getCode());
else {
throw new BadRequestException("未找到该任务或者任务已完成!");
}
if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!");
this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.FORCEFINISH.getCode());
}
/**

81
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/SzSendMaterialTask.java

@ -14,11 +14,11 @@ import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.sch.SchTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.manage.*;
import org.nl.wms.sch.tasks.AcsTaskDto;
import org.nl.wms.util.IdUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@ -73,23 +73,25 @@ public class SzSendMaterialTask extends AbstractAcsTask {
* @created 2019年4月17日 下午8:51:50
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject task, String status) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup");
String task_id = task.getString("task_id");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
//任务取消
if (StrUtil.equals(status, "0")) {
if (StrUtil.equals(status, UpdateTaskStatusEnum.CANCEL.getCode())) {
// 取消删除任务
if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) {
throw new BadRequestException("已完成不能取消!");
}
String point_code2 = taskObj.getString("point_code2");
if (ObjectUtil.isEmpty(point_code2)) {
if (ObjectUtil.isNotEmpty(point_code2)) {
JSONObject endPoint = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
endPoint.put("lock_type", "1");
endPoint.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode());
pointTab.update(endPoint);
}
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
@ -97,7 +99,7 @@ public class SzSendMaterialTask extends AbstractAcsTask {
taskTab.update(taskObj);
}
if ("1".equals(status)) {
if (UpdateTaskStatusEnum.EXECUTION.getCode().equals(status)) {
// 更新任务状态为执行中
taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode());
taskObj.put("update_time", DateUtil.now());
@ -105,7 +107,8 @@ public class SzSendMaterialTask extends AbstractAcsTask {
taskTab.update(taskObj);
}
if (StrUtil.equals(status, "2")) {
if (StrUtil.equals(status, UpdateTaskStatusEnum.FORCEFINISH.getCode())) {
String vehicle_code = taskObj.getString("vehicle_code");
// 更改任务状态为完成
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
taskObj.put("update_optid", SecurityUtils.getCurrentUserId());
@ -114,31 +117,28 @@ public class SzSendMaterialTask extends AbstractAcsTask {
taskTab.update(taskObj);
String point_code2 = taskObj.getString("point_code2");
if (ObjectUtil.isEmpty(point_code2)) return;
JSONObject point2Obj = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
JSONObject requestObj = task.getJSONObject("request_param");
//工单标识
String workorder_id = requestObj.getString("workorder_id");
//生产工单表【PDM_BD_WorkOrder】
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
JSONObject workorderObj = workOrderTab.query("workorder_id", workorder_id).uniqueResult(0);
JSONObject groupObj = groupTab.query("group_id = '" + taskObj.getString("group_id") + "'").uniqueResult(0);
//区域出入表【st_ivt_regionIO】
WQLObject regionIoTab = WQLObject.getWQLObject("st_ivt_regionIO");
JSONObject regionIoObj = new JSONObject();
regionIoObj.put("iostorinv_id", IdUtil.getLongId());
regionIoObj.put("bill_code", CodeUtil.getNewCode("IN_STORE_CODE"));
regionIoObj.put("buss_date", DateUtil.today());
regionIoObj.put("io_type", "1"); // 入库
regionIoObj.put("io_type", RegionIOEnum.IO_TYPE_IN.getCode()); // 入库
regionIoObj.put("region_id", point2Obj.getString("region_id"));
regionIoObj.put("region_code", point2Obj.getString("region_code"));
regionIoObj.put("region_name", point2Obj.getString("region_name"));
regionIoObj.put("material_id", taskObj.getString("material_id"));
regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code"));
regionIoObj.put("vehicle_code", vehicle_code);
regionIoObj.put("qty", requestObj.getString("qty"));
regionIoObj.put("bill_status", "3");
regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode());
regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode());
regionIoObj.put("start_point_code", taskObj.getString("point_code1"));
regionIoObj.put("end_point_code", taskObj.getString("point_code3"));
regionIoObj.put("create_mode", "2");
regionIoObj.put("create_mode", RegionIOEnum.CREATE_MODE_ACS.getCode());
regionIoObj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd"));
regionIoObj.put("create_id", SecurityUtils.getCurrentUserId());
regionIoObj.put("create_name", SecurityUtils.getCurrentNickName());
@ -149,15 +149,16 @@ public class SzSendMaterialTask extends AbstractAcsTask {
point2Obj.put("instorage_time", DateUtil.now());
point2Obj.put("pcsn", DateUtil.format(DateUtil.parse(DateUtil.today()), "yyyyMMdd"));
point2Obj.put("ivt_qty", requestObj.getString("qty"));
point2Obj.put("standing_time", workorderObj.getString("standing_time"));
point2Obj.put("material_id", workorderObj.getString("material_id"));
point2Obj.put("vehicle_type", workorderObj.getString("vehicle_type"));
point2Obj.put("material_id", taskObj.getString("material_id"));
point2Obj.put("vehicle_type", taskObj.getString("vehicle_type"));
point2Obj.put("vehicle_code", taskObj.getString("vehicle_code"));
point2Obj.put("is_full", requestObj.getString("is_full"));
point2Obj.put("vehicle_qty", "1"); // 入库为1个载具
point2Obj.put("is_full", groupObj.getString("is_full"));
point2Obj.put("group_id", groupObj.getString("group_id"));
// 终点解锁
point2Obj.put("lock_type", "1");
point2Obj.put("point_status", "3");
point2Obj.put("lock_type", PointEnum.LOCK_TYPE_FALSE.getCode());
point2Obj.put("point_status", PointEnum.POINT_STATUS_HAVE_MATERIAL.getCode());
pointTab.update(point2Obj);
}
}
@ -171,36 +172,28 @@ public class SzSendMaterialTask extends AbstractAcsTask {
public String createTask(JSONObject form) {
String point_code1 = form.getString("point_code1");
String vehicle_code = form.getString("vehicle_code");
WQLObject groupTab = WQLObject.getWQLObject("st_buss_vehiclegroup");
String qty = form.getString("qty");
String is_full = form.getString("is_full");
String weight = form.getString("weight");
//任务表【SCH_BASE_Task】
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
//判断当前点是否有未完成的任务
JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + point_code1 + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj)) throw new BadRequestException("当前点位" + point_code1 + "存在未完成的任务");
//生产工单表【PDM_BD_WorkOrder】
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_BD_WorkOrder");
//点位基础表【SCH_BASE_Point】
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
// 压制机设备编码
String device_code = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0).getString("device_code");
JSONObject workOrderObj = workOrderTab.query("device_code = '" + device_code + "' and order_status = '3' and is_delete ='0'").uniqueResult(0);
if (ObjectUtil.isEmpty(workOrderObj)) throw new BadRequestException("该设备当前未生产或者已删除");
// 获取到组盘
JSONObject groupObj = groupTab.query("vehicle_code = '" + vehicle_code + "'", "create_time desc").uniqueResult(0);
SchTaskDto dto = SchTaskDto.builder()
.task_id(IdUtil.getLongId())
.task_code(CodeUtil.getNewCode("TASK_CODE"))
.task_type("task_type")
.task_name("烧制入库")
.material_id(groupObj.getLong("material_uuid"))
.group_id(groupObj.getLong("group_id"))
.material_qty(qty)
.task_status(TaskStatusEnum.SURE_START.getCode())
.point_code1(point_code1)
.vehicle_code(vehicle_code)
.vehicle_type(workOrderObj.getString("vehicle_type"))
.workorder_id(workOrderObj.getLong("workorder_id"))
.material_id(workOrderObj.getLong("material_id"))
.vehicle_type(PointEnum.VEHICLE_TYPE_STEEL_TRAY.getCode())
.handle_class(THIS_CLASS)
.create_time(DateUtil.now())
.request_param(form.toJSONString())
@ -226,11 +219,9 @@ public class SzSendMaterialTask extends AbstractAcsTask {
JSONArray taskArr = taskTab.query("handle_class = '" + THIS_CLASS + "'and is_delete = '0' and task_status = '2'").getResultJSONArray(0);
for (int i = 0; i < taskArr.size(); i++) {
JSONObject taskObj = taskArr.getJSONObject(i);
String vehicle_type = taskObj.getString("vehicle_type");
JSONObject param1 = new JSONObject();
param1.put("flag", "1");
param1.put("region_code", "CYZCQ");
param1.put("vehicle_type", "%" + vehicle_type + "%");
//1、查找出窑缓存区的空位
JSONObject endPoint = WQL.getWO("QSCH_szSendMaterial_01").addParamMap(param1).process().uniqueResult(0);
if (ObjectUtil.isEmpty(endPoint)) {
@ -245,7 +236,7 @@ public class SzSendMaterialTask extends AbstractAcsTask {
//锁住终点
endPoint.put("task_id", taskObj.getString("task_id"));
endPoint.put("lock_type", "2");
endPoint.put("lock_type", PointEnum.LOCK_TYPE_TRUE.getCode());
pointTab.update(endPoint);
}
}
@ -260,16 +251,10 @@ public class SzSendMaterialTask extends AbstractAcsTask {
*/
@Override
public void forceFinish(String task_id) {
/*
* 强制完成
*/
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj))
this.updateTaskStatus(taskObj,"2");
else {
throw new BadRequestException("未找到该任务或者任务已完成!");
}
if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!");
this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.FORCEFINISH.getCode());
}
/**

18
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/YzjSendMaterialTask.java

@ -136,6 +136,7 @@ public class YzjSendMaterialTask extends AbstractAcsTask {
regionIoObj.put("vehicle_code", taskObj.getString("vehicle_code"));
regionIoObj.put("qty", requestObj.getString("qty"));
regionIoObj.put("ivt_weight", requestObj.getString("weight"));
regionIoObj.put("weight_unit_id", RegionIOEnum.UNIT_ID_B.getCode());
regionIoObj.put("bill_status", RegionIOEnum.BILL_STATUS_FINISH.getCode());
regionIoObj.put("start_point_code", taskObj.getString("point_code1"));
regionIoObj.put("end_point_code", taskObj.getString("point_code3"));
@ -267,16 +268,10 @@ public class YzjSendMaterialTask extends AbstractAcsTask {
*/
@Override
public void forceFinish(String task_id) {
/*
* 强制完成
*/
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj))
this.updateTaskStatus(taskObj,UpdateTaskStatusEnum.FORCEFINISH.getCode());
else {
throw new BadRequestException("未找到该任务或者任务已完成!");
}
if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!");
this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.FORCEFINISH.getCode());
}
/**
@ -288,10 +283,7 @@ public class YzjSendMaterialTask extends AbstractAcsTask {
public void cancel(String task_id) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj))
this.updateTaskStatus(taskObj,UpdateTaskStatusEnum.CANCEL.getCode());
else {
throw new BadRequestException("未找到该任务或者任务已完成!");
}
if (ObjectUtil.isEmpty(taskObj))throw new BadRequestException("未找到该任务或者任务已完成!");
this.updateTaskStatus(taskObj, UpdateTaskStatusEnum.CANCEL.getCode());
}
}

20
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_fjCallEmptyVehicle_01.wql → lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_fjSendMaterial_01.wql

@ -40,7 +40,7 @@
##########################################
# 3、业务主过程 #
##########################################
IF 输入.flag = "1"
IF 输入.flag = "1"
QUERY
SELECT
p.point_id,
@ -54,13 +54,23 @@ IF 输入.flag = "1"
AND is_delete = '0'
AND point_status = '1'
AND point_type = '1'
OPTION 输入.vehicle_type <> ""
p.can_vehicle_type like 输入.vehicle_type
ENDOPTION
OPTION 输入.region_code <> ""
p.region_code = 输入.region_code
ENDOPTION
ORDER BY col_num,row_num,layer_num
ORDER BY p.instorage_time
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "2"
QUERY
SELECT
p.point_code AS device_code
FROM
SCH_BASE_Point p
WHERE
region_code = 'RGCPQ'
AND point_type = '2'
ENDSELECT
ENDQUERY
ENDIF

5
lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/sendMaterial/wql/QSCH_szSendMaterial_01.wql

@ -40,7 +40,7 @@
##########################################
# 3、业务主过程 #
##########################################
IF 输入.flag = "1"
IF 输入.flag = "1"
QUERY
SELECT
p.point_id,
@ -53,9 +53,6 @@ IF 输入.flag = "1"
AND is_used = '1'
AND is_delete = '0'
AND point_status = '1'
OPTION 输入.vehicle_type <> ""
p.can_vehicle_type like 输入.vehicle_type
ENDOPTION
OPTION 输入.region_code <> ""
p.region_code = 输入.region_code
ENDOPTION

BIN
lms/nladmin-system/src/main/java/org/nl/wms/wms.xls

Binary file not shown.

33
lms/nladmin-ui/src/views/wms/pdm/workerorder/index.vue

@ -159,7 +159,22 @@
<el-form-item label="计划数量" prop="plan_qty">
<el-input v-model="form.plan_qty" style="width: 200px;" />
</el-form-item>
<el-form-item label="物料类型" prop="vehicle_type">
<el-form-item v-if="form.workorder_procedure == 1" label="阈值">
<el-input v-model="form.warn_time" style="width: 200px;" />
</el-form-item>
<el-form-item v-if="form.workorder_procedure == 1" label="静置时间">
<el-input v-model="form.standing_time" style="width: 200px;" />
</el-form-item>
<el-form-item v-if="form.workorder_procedure != 1" label="载具类型" prop="vehicle_type">
<el-select v-model="form.vehicle_type" style="width: 200px" filterable placeholder="请选择">
<el-option
v-for="item in dict.vehicle_type"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item v-if="form.workorder_procedure == 1" label="物料类型" prop="vehicle_type">
<el-select v-model="form.is_new" style="width: 200px" filterable placeholder="请选择">
<el-option
v-for="item in dict.material_type"
@ -168,6 +183,15 @@
/>
</el-select>
</el-form-item>
<el-form-item v-if="form.workorder_procedure == 2" label="优先去向" prop="vehicle_type">
<el-select v-model="form.is_package" style="width: 200px" filterable placeholder="请选择">
<el-option
v-for="item in dict.priority_direction"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="工单状态">
<el-select
v-model="form.order_status"
@ -348,13 +372,16 @@ const defaultForm = {
is_canupdate_update: '1',
material_spec: null,
sale_id: null,
is_new: '1'
is_new: '1',
is_package: '1',
warn_time: '0',
standing_time: '0'
}
export default {
name: 'Produceshiftorder',
components: { pagination, crudOperation, rrOperation, udOperation, MaterDtl, ViewDialog, DeviceDialog },
mixins: [presenter(), header(), form(defaultForm), crud()],
dicts: ['pdm_workorder_status', 'is_used', 'is_or_not', 'material_type', 'vehicle_type', 'workorder_procedure'],
dicts: ['pdm_workorder_status', 'priority_direction', 'is_used', 'is_or_not', 'material_type', 'vehicle_type', 'workorder_procedure'],
cruds() {
return CRUD({
title: '工单', url: 'api/workorder', idField: 'workorder_id', sort: 'workorder_id,desc',

Loading…
Cancel
Save