rev:工单一体机功能
This commit is contained in:
@@ -35,8 +35,6 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
})
|
||||
@ServletComponentScan
|
||||
@EnableTransactionManagement
|
||||
@EnableJpaAuditing(auditorAwareRef = "auditorAware")
|
||||
|
||||
@EnableMethodCache(basePackages = "org.nl")
|
||||
@EnableCreateCacheAnnotation
|
||||
@MapperScan("org.nl.**.mapper")
|
||||
|
||||
@@ -24,10 +24,10 @@ public enum AcsTaskEnum {
|
||||
TASK_PRODUCT_MAC("1","专机-专机满料任务"),
|
||||
//3个点,任务编号,缓存线空载具列表
|
||||
TASK_PRODUCT_CACHE("2","专机-缓存线满料任务"),
|
||||
//3个点,任务编号,缓存线满料载具列表
|
||||
TASK_CACHELINE_OUT("3","缓存线-专机出库任务"),
|
||||
//专机到深坑任务:深坑业务单独处理
|
||||
TASK_PRODUCT_WASH("4","专机-深坑任务"),
|
||||
TASK_PRODUCT_WASH("3","专机-深坑任务"),
|
||||
//3个点,任务编号,缓存线满料载具列表
|
||||
TASK_CACHELINE_OUT("4","缓存线-专机出库任务"),
|
||||
TASK_PLOTTER_MAC("5","刻字机-满料入库"),
|
||||
TASK_PLOTTER_EMPTY("6","刻字机-呼叫空框"),
|
||||
TASK_WARP_MAC("7","包装机-叫料出库"),
|
||||
@@ -56,8 +56,8 @@ public enum AcsTaskEnum {
|
||||
|
||||
ACS_TASK_TYPE_NOBLE_DOUBLE_TASK("1","诺宝双工任务"),
|
||||
ACS_TASK_TYPE_NOBLE_SINGLE_TASK("2","诺宝单工任务"),
|
||||
ACS_TASK_TYPE_NOBLE_SINGLE_ENTRY_TASK("3","诺宝单入-单任务"),
|
||||
ACS_TASK_TYPE_NOBLE_DOUBLE_ENTRY_TASK("4","诺宝双入-双任务"),
|
||||
ACS_TASK_TYPE_NOBLE_DOUBLE_ENTRY_TASK("3","诺宝双入-双任务"),
|
||||
ACS_TASK_TYPE_NOBLE_SINGLE_ENTRY_TASK("4","诺宝单入-单任务"),
|
||||
ACS_TASK_TYPE_NOBLE_POINT_POINT_TASK("5","诺宝点对点任务"),
|
||||
ACS_TASK_TYPE_WEIGHING_TASK_OF_PS20("6","PS20称重任务(刻字-包装)"),
|
||||
ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20("7","PS20不称重任务(刻字-包装)"),
|
||||
|
||||
@@ -15,65 +15,66 @@ import java.util.Arrays;
|
||||
@AllArgsConstructor
|
||||
public enum StatusEnum {
|
||||
//枚举状态
|
||||
STATUS_TRUE("1","是",""),
|
||||
STATUS_FLASE("0","否",""),
|
||||
STATUS_TRUE("1","是","",null),
|
||||
STATUS_FLASE("0","否","",null),
|
||||
//锁状态
|
||||
LOCK_OFF("0","否",""),
|
||||
LOCK_ON("1","是",""),
|
||||
LOCK_OFF("0","否","",null),
|
||||
LOCK_ON("1","是","",null),
|
||||
//缓存线点位异常情况
|
||||
CACHE_POINT_NORMAL("0","正常",""),
|
||||
CACHE_POINT_ERROR("1","异常盘点",""),
|
||||
CACHE_POINT_SCAN_ERROR("2","异常扫码",""),
|
||||
CACHE_POINT_NORMAL("0","正常","",null),
|
||||
CACHE_POINT_ERROR("1","异常盘点","",null),
|
||||
CACHE_POINT_SCAN_ERROR("2","异常扫码","",null),
|
||||
//缓存线载具状态 1-空位、2-绿色空箱、3-黄色满箱、4-红色异常、5不显示
|
||||
CACHE_VEL_NORMAL("0","正常",""),
|
||||
CACHE_VEL_NULL("1","空位",""),
|
||||
CACHE_VEL_EMT("2","绿色空箱",""),
|
||||
CACHE_VEL_FULL("3","黄色满箱",""),
|
||||
CACHE_VEL_ERR("4","红色异常",""),
|
||||
CACHE_VEL_DIS("5","不显示",""),
|
||||
CACHE_VEL_NORMAL("0","正常","",null),
|
||||
CACHE_VEL_NULL("1","空位","",null),
|
||||
CACHE_VEL_EMT("2","绿色空箱","",null),
|
||||
CACHE_VEL_FULL("3","黄色满箱","",null),
|
||||
CACHE_VEL_ERR("4","红色异常","",null),
|
||||
CACHE_VEL_DIS("5","不显示","",null),
|
||||
//任务状态
|
||||
TASK_CREATE("1","生成",""),
|
||||
TASK_START_ERROR("2","点位确认异常",""),
|
||||
TASK_CREATE("1","生成","",1),
|
||||
TASK_START_ERROR("2","点位确认异常","",1<<2),
|
||||
//TASK_END_P("3","确定终点",""),
|
||||
TASK_START_END_P("4","起点和终点确认",""),
|
||||
TASK_PUBLISH("5","下发",""),
|
||||
TASK_RUNNING("6","运行",""),
|
||||
TASK_FINISH("7","完成",""),
|
||||
TASK_CANNEL("8","取消",""),
|
||||
TASK_START_END_P("4","起点和终点确认","",1<<3),
|
||||
TASK_PUBLISH("5","下发","",1<<4),
|
||||
TASK_RUNNING("6","运行","",1<<5),
|
||||
TASK_FINISH("7","完成","",1<<6),
|
||||
TASK_CANNEL("8","取消","",1<<7),
|
||||
//点位表位置状态
|
||||
POINT_LOCATION_EMP("1","空料位",""),
|
||||
POINT_LOCATION_REC("2","接料位",""),
|
||||
POINT_LOCATION_FULL("3","满料位",""),
|
||||
POINT_LOCATION_IN("4","上料位",""),
|
||||
POINT_LOCATION_EMP("1","空料位","",null),
|
||||
POINT_LOCATION_REC("2","接料位","",null),
|
||||
POINT_LOCATION_FULL("3","满料位","",null),
|
||||
POINT_LOCATION_IN("4","上料位","",null),
|
||||
//出入料箱
|
||||
IN_VEHICLE("1","入箱",""),
|
||||
OUT_VEHICLE("2","出箱",""),
|
||||
IN_VEHICLE("1","入箱","",null),
|
||||
OUT_VEHICLE("2","出箱","",null),
|
||||
//出入料箱
|
||||
PAUSE_CACHELINE("1","暂停",""),
|
||||
START_CACHELINE("2","启动",""),
|
||||
PAUSE_CACHELINE("1","暂停","",null),
|
||||
START_CACHELINE("2","启动","",null),
|
||||
|
||||
//设备状态枚举1-关机、2-开机、3-生产中、4-待机、5-故障
|
||||
DEVICE_STATUS_OFF("1","关机",""),
|
||||
DEVICE_STATUS_ON("2","开机",""),
|
||||
DEVICE_STATUS_RUNING("3","生产中",""),
|
||||
DEVICE_STATUS_WAITING("4","待机",""),
|
||||
DEVICE_STATUS_ERROR("5","故障",""),
|
||||
DEVICE_STATUS_OFF("1","关机","",null),
|
||||
DEVICE_STATUS_ON("2","开机","",null),
|
||||
DEVICE_STATUS_RUNING("3","生产中","",null),
|
||||
DEVICE_STATUS_WAITING("4","待机","",null),
|
||||
DEVICE_STATUS_ERROR("5","故障","",null),
|
||||
|
||||
// 点位表点位状态
|
||||
POINT_STATUS_EMPTY("1", "空位", ""),
|
||||
POINT_STATUS_FULL("2", "有料", ""),
|
||||
POINT_STATUS_EMPTY_VEHICLE("3", "空载具", ""),
|
||||
POINT_STATUS_EMPTY("1", "空位", "",null),
|
||||
POINT_STATUS_FULL("2", "有料", "",null),
|
||||
POINT_STATUS_EMPTY_VEHICLE("3", "空载具", "",null),
|
||||
|
||||
// 出入库分配明细状态
|
||||
IOS_NOCREATE("00","未生成",""),
|
||||
IOS_CREATE("01","生成",""),
|
||||
IOS_RUNNING("02","执行中",""),
|
||||
IOS_FINISH("99","完成",""),
|
||||
IOS_NOCREATE("00","未生成","",null),
|
||||
IOS_CREATE("01","生成","",null),
|
||||
IOS_RUNNING("02","执行中","",null),
|
||||
IOS_FINISH("99","完成","",null),
|
||||
;
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
private String ext;
|
||||
private Integer bit;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -80,10 +80,12 @@ public class AgvInstService {
|
||||
if (next.getName().equals("深坑清洗")){
|
||||
query.put("material_id",task.getString("material_id"));
|
||||
// query.put("qty",quantity) 深坑物料需要转重量
|
||||
task.put("task_type",AcsTaskEnum.TASK_PRODUCT_WASH.getCode());
|
||||
}
|
||||
|
||||
List<Map<String,String>> list = deviceService.workproceduceDevices(query);
|
||||
|
||||
task.put("acs_task_type",AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_TASK.getCode());
|
||||
task.put("is_send","1");
|
||||
String nextPoint = null;
|
||||
String cacheVehile = "";
|
||||
if (!CollectionUtils.isEmpty(list)){
|
||||
@@ -93,7 +95,8 @@ public class AgvInstService {
|
||||
throw new BadRequestException("当前任务下一道工序无可用设备");
|
||||
}
|
||||
nextPoint = getParamByXml(workprodure, currentFlow, nextPoint);
|
||||
task.put("acs_task_type",AcsTaskEnum.ACS_TASK_TYPE_NOBLE_DOUBLE_ENTRY_TASK.getCode());
|
||||
task.put("task_type",AcsTaskEnum.TASK_PRODUCT_CACHE.getCode());
|
||||
task.put("acs_task_type",AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_ENTRY_TASK.getCode());
|
||||
cacheVehile = getCacheVehile(nextPoint, null);
|
||||
}
|
||||
|
||||
@@ -102,8 +105,8 @@ public class AgvInstService {
|
||||
throw new BadRequestException("逻辑非配错误,请检查代码");
|
||||
}
|
||||
}
|
||||
basePointService.update(new UpdateWrapper<SchBasePoint>()
|
||||
.set("lock_type",StatusEnum.LOCK_ON.getCode()).set("task_id",task.getString("task_id")).eq("point_code",nextPoint));
|
||||
// basePointService.update(new UpdateWrapper<SchBasePoint>()
|
||||
// .set("lock_type",StatusEnum.LOCK_ON.getCode()).set("task_id",task.getString("task_id")).eq("point_code",nextPoint));
|
||||
|
||||
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
|
||||
schBaseTask.setBarcodeArr(cacheVehile);
|
||||
@@ -168,7 +171,8 @@ public class AgvInstService {
|
||||
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
|
||||
schBaseTask.setBarcodeArr(cacheVehile);
|
||||
schBaseTask.setPoint_code1(startPoint);
|
||||
schBaseTask.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_TASK.getCode());
|
||||
schBaseTask.setIs_send(true);
|
||||
schBaseTask.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_ENTRY_TASK.getCode());
|
||||
schBaseTask.setPoint_code3(startPoint);
|
||||
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
|
||||
schBaseTask.setUpdate_time(new Date());
|
||||
|
||||
@@ -34,6 +34,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{
|
||||
, "priority", task.getString("priority")
|
||||
, "is_send", task.getBoolean("is_send")?"1":"0"
|
||||
, "vehicle_code", task.getString("vehicle_code")
|
||||
, "quantity", task.getString("material_qty")
|
||||
, "barcodeArr", task.getString("barcodeArr")
|
||||
, "proprity_floor", "2"
|
||||
, "agv_system_type", task.getString("agv_system_type")
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package org.nl.wms.product_manage;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2023/5/4 20:11
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum ReportEnum {
|
||||
//出入库类型
|
||||
REPORT_STATUS(MapOf.of("生成", "1", "报工", "2","报工审核","3")),
|
||||
;
|
||||
private Map<String, String> code;
|
||||
|
||||
public String code(String desc) {
|
||||
String code = this.getCode().get(desc);
|
||||
if (StringUtils.isNotEmpty(code)) {
|
||||
return code;
|
||||
}
|
||||
throw new BadRequestException(this.name() + "对应类型" + desc + "未定义");
|
||||
}
|
||||
|
||||
public String check(String code) {
|
||||
for (Map.Entry<String, String> entry : this.getCode().entrySet()) {
|
||||
if (entry.getValue().equals("code")) {
|
||||
return entry.getValue();
|
||||
}
|
||||
}
|
||||
throw new BadRequestException(this.name() + "对应类型" + code + "未定义");
|
||||
}
|
||||
}
|
||||
@@ -50,11 +50,11 @@ public class PdmBiDeviceController {
|
||||
return new ResponseEntity<>(TableDataInfo.build(result),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
@PostMapping("/list")
|
||||
@Log("查询生产设备列表")
|
||||
@ApiOperation("查询生产设备列表")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryList(DeviceQuery query){
|
||||
public ResponseEntity<Object> queryList(@RequestBody DeviceQuery query){
|
||||
List<Map<String, Object>> list = iDeviceService.listMaps(query.build().select("device_code", "device_name"));
|
||||
return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.nl.wms.product_manage.controller.workorder;
|
||||
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
@@ -93,9 +94,6 @@ public class PdmProduceWorkorderController {
|
||||
if (ids != null && ids.length > 0){
|
||||
iPdmProduceWorkorderService.update(new UpdateWrapper<PdmProduceWorkorder>()
|
||||
.set("is_delete",true)
|
||||
.set("update_id", SecurityUtils.getCurrentUserId())
|
||||
.set("update_name",SecurityUtils.getCurrentNickName())
|
||||
.set("update_time",new Date())
|
||||
.in("workorder_id", Arrays.asList(ids)));
|
||||
}
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
@@ -146,14 +144,18 @@ public class PdmProduceWorkorderController {
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/reportQuery")
|
||||
@Log("报工查询")
|
||||
@ApiOperation("报工查询")
|
||||
public ResponseEntity<Object> reportQuery(ReportQuery query) {
|
||||
return new ResponseEntity<>(TableDataInfo.build(iPdmProduceWorkorderService.reportQuery(query)),HttpStatus.OK);
|
||||
|
||||
|
||||
@PostMapping("/reportQuery")
|
||||
@Log("报工数修改")
|
||||
@ApiOperation("报工数修改")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> reportQuery(@RequestBody ReportQuery param) {
|
||||
return new ResponseEntity<>(TableDataInfo.build(iPdmProduceWorkorderService.reportQuery(param)),HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -2,9 +2,11 @@ package org.nl.wms.product_manage.controller.workorder;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaIgnore;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.anno.Log;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.utils.api.ResultCode;
|
||||
@@ -13,6 +15,9 @@ import org.nl.wms.mps.service.ProduceshiftorderService;
|
||||
import org.nl.wms.mps.service.dto.DeviceDto;
|
||||
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
|
||||
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
|
||||
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderrecordService;
|
||||
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord;
|
||||
import org.nl.wms.product_manage.service.workorder.impl.PdmProduceWorkorderrecordServiceImpl;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
@@ -33,8 +38,10 @@ import java.util.Map;
|
||||
@Slf4j
|
||||
public class ProduceshiftorderController{
|
||||
private final ProduceshiftorderService produceshiftorderService;
|
||||
|
||||
private final IPdmProduceWorkorderService iPdmProduceWorkorderService;
|
||||
private final IPdmBiDeviceService pdmBiDeviceService;
|
||||
|
||||
private final IPdmProduceWorkorderrecordService workorderrecordService;
|
||||
|
||||
|
||||
@PostMapping("/getDevice")
|
||||
@@ -69,7 +76,8 @@ public class ProduceshiftorderController{
|
||||
if(null == param) {
|
||||
throw new BizCoreException(ResultCode.VALIDATE_FAILED);
|
||||
}
|
||||
return new ResponseEntity<>(produceshiftorderService.getOrderList(param, page), HttpStatus.OK);
|
||||
List<Map> list = iPdmProduceWorkorderService.getOrderList(param, page);
|
||||
return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/openStart")
|
||||
@@ -93,6 +101,23 @@ public class ProduceshiftorderController{
|
||||
iPdmProduceWorkorderService.finish(param);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/deleteReport")
|
||||
@Log("deleteReport")
|
||||
@ApiOperation("deleteReport")
|
||||
public ResponseEntity<Object> deleteReport(@RequestBody JSONObject param) {
|
||||
workorderrecordService.removeById(param.getString("macoperate_id"));
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/updateReport")
|
||||
@Log("报工数修改")
|
||||
@ApiOperation("报工数修改")
|
||||
public ResponseEntity<Object> updateReport(@RequestBody JSONObject param) {
|
||||
iPdmProduceWorkorderService.updateReport(param);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/getReportWork")
|
||||
@Log("获取当前报工记录")
|
||||
@@ -118,6 +143,7 @@ public class ProduceshiftorderController{
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/getUser")
|
||||
@Log("查询操作人员")
|
||||
@ApiOperation("查询操作人员")
|
||||
|
||||
@@ -4,6 +4,10 @@ package org.nl.wms.product_manage.sch.manage;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
@@ -25,14 +29,16 @@ public abstract class AbstractAcsTask {
|
||||
|
||||
public abstract String createTask(JSONObject param);
|
||||
|
||||
|
||||
public abstract void cancel(String task_id);
|
||||
|
||||
|
||||
public abstract void pointConfirm(JSONObject param);
|
||||
|
||||
public void notifyAcs(JSONArray param){};
|
||||
|
||||
public List<SchBaseTask> schedulerTask(List<SchBaseTask> tasks){
|
||||
return new ArrayList<>();
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,114 +0,0 @@
|
||||
|
||||
package org.nl.wms.product_manage.sch.rest;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.anno.Log;
|
||||
import org.nl.wms.product_manage.sch.service.PointService;
|
||||
import org.nl.wms.product_manage.sch.service.dto.PointDto;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author ldjun
|
||||
* @date 2021-08-19
|
||||
**/
|
||||
//@RestController
|
||||
@RequiredArgsConstructor
|
||||
//@Api(tags = "点位管理")
|
||||
//@RequestMapping("/api/point")
|
||||
//@Slf4j
|
||||
public class PointController {
|
||||
|
||||
private final PointService pointService;
|
||||
|
||||
@GetMapping
|
||||
@Log("查询点位")
|
||||
@ApiOperation("查询点位")
|
||||
//@SaCheckPermission("point:list")
|
||||
public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page) {
|
||||
return new ResponseEntity<>(pointService.queryAll(whereJson, page), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@Log("新增点位")
|
||||
@ApiOperation("新增点位")
|
||||
//@SaCheckPermission("point:add")
|
||||
public ResponseEntity<Object> create(@Validated @RequestBody PointDto dto) {
|
||||
pointService.create(dto);
|
||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
@Log("修改点位")
|
||||
@ApiOperation("修改点位")
|
||||
//@SaCheckPermission("point:edit")
|
||||
public ResponseEntity<Object> update(@Validated @RequestBody PointDto dto) {
|
||||
pointService.update(dto);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@Log("删除点位")
|
||||
@ApiOperation("删除点位")
|
||||
//@SaCheckPermission("point:del")
|
||||
@DeleteMapping
|
||||
public ResponseEntity<Object> delete(@RequestBody Long[] ids) {
|
||||
pointService.deleteAll(ids);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
@PutMapping("/changeActive")
|
||||
@Log("修改点位启用状态")
|
||||
@ApiOperation("修改点位启用状态")
|
||||
//@SaCheckPermission("store:edit")
|
||||
public ResponseEntity<Object> update(@RequestBody JSONObject json) {
|
||||
pointService.changeActive(json);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@PostMapping("/getPoint")
|
||||
@Log("查询点位下拉框")
|
||||
@ApiOperation("查询点位下拉框")
|
||||
//@SaCheckPermission("materialtype:list")
|
||||
public ResponseEntity<Object> queryPoint(@RequestBody Map whereJson) {
|
||||
return new ResponseEntity<>(pointService.getPoint(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/selectPoint")
|
||||
@Log("查询点位管理")
|
||||
@ApiOperation("查询点位管理")
|
||||
//@SaCheckPermission("Point:list")
|
||||
public ResponseEntity<Object> selectPoint(@RequestParam Map whereJson, Pageable page){
|
||||
return new ResponseEntity<>(pointService.selectPoint(whereJson,page),HttpStatus.OK);
|
||||
}
|
||||
@GetMapping("/getRegion")
|
||||
@Log("获取区域")
|
||||
@ApiOperation("获取区域")
|
||||
public ResponseEntity<Object> getRegion(){
|
||||
return new ResponseEntity<>(pointService.getRegion(),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@Log("启动与禁用")
|
||||
@PostMapping("/changeUsed")
|
||||
@ApiOperation("启动与禁用")
|
||||
public ResponseEntity<Object> changeUsedOn(@RequestBody JSONObject jsonObject) {
|
||||
pointService.changeUsed(jsonObject);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@Log("锁定与解锁")
|
||||
@PostMapping("/changeLock")
|
||||
@ApiOperation("锁定与解锁")
|
||||
public ResponseEntity<Object> changeLock(@RequestBody JSONObject jsonObject) {
|
||||
pointService.changeLock(jsonObject);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
}
|
||||
@@ -1,99 +0,0 @@
|
||||
package org.nl.wms.product_manage.sch.rest;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.anno.Log;
|
||||
import org.nl.wms.product_manage.sch.service.RegionService;
|
||||
import org.nl.wms.product_manage.sch.service.dto.RegionDto;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author lyd
|
||||
* @date 2023-03-17
|
||||
**/
|
||||
//@RestController
|
||||
@RequiredArgsConstructor
|
||||
//@Api(tags = "区域管理管理")
|
||||
//@RequestMapping("/api/region")
|
||||
//@Slf4j
|
||||
public class RegionController {
|
||||
|
||||
private final RegionService regionService;
|
||||
|
||||
@GetMapping
|
||||
@Log("查询区域管理")
|
||||
@ApiOperation("查询区域管理")
|
||||
//@SaCheckPermission("region:list")
|
||||
public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page) {
|
||||
return new ResponseEntity<>(regionService.queryAll(whereJson, page), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/getPointQuery")
|
||||
@Log("获取可用点位")
|
||||
@ApiOperation("获取可用点位")
|
||||
//@SaCheckPermission("region:list")
|
||||
public ResponseEntity<Object> getPointQuery(@RequestParam Map whereJson, Pageable page) {
|
||||
return new ResponseEntity<>(regionService.getPointQuery(whereJson, page), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@Log("新增区域管理")
|
||||
@ApiOperation("新增区域管理")
|
||||
//@SaCheckPermission("region:add")
|
||||
public ResponseEntity<Object> create(@Validated @RequestBody RegionDto dto) {
|
||||
regionService.create(dto);
|
||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
@Log("修改区域管理")
|
||||
@ApiOperation("修改区域管理")
|
||||
//@SaCheckPermission("region:edit")
|
||||
public ResponseEntity<Object> update(@Validated @RequestBody RegionDto dto) {
|
||||
regionService.update(dto);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@Log("删除区域管理")
|
||||
@ApiOperation("删除区域管理")
|
||||
//@SaCheckPermission("region:del")
|
||||
@DeleteMapping
|
||||
public ResponseEntity<Object> delete(@RequestBody String[] codes) {
|
||||
regionService.deleteAll(codes);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getPointStatusSelectByCode")
|
||||
@Log("获取点位状态下拉框")
|
||||
@ApiOperation("获取点位状态下拉框")
|
||||
//@SaCheckPermission("region:add")
|
||||
public ResponseEntity<Object> getPointStatusSelectByCode(@RequestBody String region_code) {
|
||||
return new ResponseEntity<>(regionService.getPointStatusSelectByCode(region_code), HttpStatus.CREATED);
|
||||
}
|
||||
|
||||
@PostMapping("/getPointTypeSelectByCode")
|
||||
@Log("获取点位类型下拉框")
|
||||
@ApiOperation("获取点位类型下拉框")
|
||||
//@SaCheckPermission("region:add")
|
||||
public ResponseEntity<Object> getPointTypeSelectByCode(@RequestBody String region_code) {
|
||||
return new ResponseEntity<>(regionService.getPointTypeSelectByCode(region_code), HttpStatus.CREATED);
|
||||
}
|
||||
|
||||
@PostMapping("/getRegionSelect")
|
||||
@Log("获取区域下拉框")
|
||||
@ApiOperation("获取区域下拉框")
|
||||
public ResponseEntity<Object> getRegionSelect(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(regionService.getRegionSelect(whereJson), HttpStatus.CREATED);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
|
||||
package org.nl.wms.product_manage.sch.rest;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.nl.common.anno.Log;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.wms.system_manage.service.dict.ISysDictService;
|
||||
import org.nl.wms.system_manage.service.dict.dao.Dict;
|
||||
import org.nl.wms.product_manage.sch.manage.FinishTypeEnum;
|
||||
import org.nl.wms.product_manage.sch.service.TaskService;
|
||||
import org.nl.wms.product_manage.sch.service.dto.TaskDto;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author ldjun
|
||||
* @date 2021-08-19
|
||||
**/
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@Api(tags = "任务管理")
|
||||
@RequestMapping("/api/task")
|
||||
@Slf4j
|
||||
public class TaskController {
|
||||
|
||||
private final TaskService taskService;
|
||||
private final ISysDictService dictService;
|
||||
|
||||
@GetMapping
|
||||
@Log("查询任务")
|
||||
@ApiOperation("查询任务")
|
||||
//@PreAuthorize("@el.check('task:list')")
|
||||
public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page) {
|
||||
return new ResponseEntity<>(taskService.queryAll(whereJson, page), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@Log("新增任务")
|
||||
@ApiOperation("新增任务")
|
||||
//@PreAuthorize("@el.check('task:add')")
|
||||
public ResponseEntity<Object> create(@Validated @RequestBody TaskDto dto) {
|
||||
taskService.create(dto);
|
||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
@Log("修改任务")
|
||||
@ApiOperation("修改任务")
|
||||
//@PreAuthorize("@el.check('task:edit')")
|
||||
public ResponseEntity<Object> update(@Validated @RequestBody TaskDto dto) {
|
||||
taskService.update(dto);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@Log("删除任务")
|
||||
@ApiOperation("删除任务")
|
||||
//@PreAuthorize("@el.check('task:del')")
|
||||
@DeleteMapping
|
||||
public ResponseEntity<Object> delete(@RequestBody String[] ids) {
|
||||
taskService.deleteAll(ids);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/taskStatus")
|
||||
@Log("获取任务状态列表")
|
||||
@ApiOperation("获取任务状态列表")
|
||||
public ResponseEntity<Object> getTaskStatus() {
|
||||
return new ResponseEntity<>(dictService.list(new LambdaQueryWrapper<Dict>()
|
||||
.eq(Dict::getCode, "task_status")), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/taskType")
|
||||
@Log("获取任务类型列表")
|
||||
@ApiOperation("获取任务类型列表")
|
||||
public ResponseEntity<Object> getTaskType() {
|
||||
return new ResponseEntity<>(taskService.getTaskTypes(), HttpStatus.OK);
|
||||
}
|
||||
@GetMapping("/acsTaskType")
|
||||
@Log("获取acs任务类型列表")
|
||||
@ApiOperation("获取acs任务类型列表")
|
||||
public ResponseEntity<Object> getAcsTaskType() {
|
||||
return new ResponseEntity<>(taskService.getAcsTaskType(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/finishType")
|
||||
@Log("获取任务类型列表")
|
||||
@ApiOperation("获取任务类型列表")
|
||||
public ResponseEntity<Object> getFinishType() {
|
||||
FinishTypeEnum[] values = FinishTypeEnum.values();
|
||||
JSONArray arr = new JSONArray();
|
||||
for (FinishTypeEnum value : values) {
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("code", value.getCode());
|
||||
json.put("name", value.getName());
|
||||
arr.add(json);
|
||||
}
|
||||
return new ResponseEntity<>(arr, HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PutMapping("/operation")
|
||||
@Log("任务操作")
|
||||
@ApiOperation("任务操作")
|
||||
//@PreAuthorize("@el.check('task:edit')")
|
||||
public ResponseEntity<Object> update(@RequestBody Map<String, Object> map) {
|
||||
taskService.operation(map);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
}
|
||||
@@ -207,6 +207,14 @@ public class TaskServiceImpl implements TaskService {
|
||||
cancel.add(res2);
|
||||
acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(cancel));
|
||||
break;
|
||||
case "delete":
|
||||
JSONArray delete = new JSONArray();
|
||||
JSONObject res3 = new JSONObject();
|
||||
res3.put("task_id", task_id);
|
||||
res3.put("status", AcsTaskEnum.STATUS_CANNEL.getCode());
|
||||
delete.add(res3);
|
||||
acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(delete));
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.product_manage.sch.tasks.SpeMachinery;
|
||||
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
@@ -17,6 +18,7 @@ import org.nl.common.utils.MapOf;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.system.util.CodeUtil;
|
||||
import org.nl.modules.wql.WQL;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.wms.ext.acs.service.impl.AgvInstService;
|
||||
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
|
||||
@@ -36,9 +38,8 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 专机任务
|
||||
@@ -151,7 +152,7 @@ public class SpeEmpTask extends AbstractAcsTask {
|
||||
private JSONObject packageParam(JSONObject form, String task_id) {
|
||||
JSONObject task = new JSONObject();
|
||||
参数封装:{
|
||||
AcsTaskEnum taskEnum = AcsTaskEnum.getType(form.getString("type"), "REQUEST_");
|
||||
AcsTaskEnum taskEnum = AcsTaskEnum.getType(form.getString("type"), "TASK_");
|
||||
task.put("task_id", task_id);
|
||||
task.put("task_name", taskEnum.getDesc());
|
||||
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
|
||||
@@ -227,4 +228,114 @@ public class SpeEmpTask extends AbstractAcsTask {
|
||||
public void pointConfirm(JSONObject param) {
|
||||
agvInstService.empMatter(param);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<SchBaseTask> schedulerTask(List<SchBaseTask> array) {
|
||||
ArrayList<SchBaseTask> Merge = new ArrayList<>();
|
||||
if (!CollectionUtils.isEmpty(array)){
|
||||
String pointCollect = array.stream().map(a->a.getPoint_code1() + "','" + a.getPoint_code2()).collect(Collectors.joining("','"));
|
||||
JSONArray needMergeCollect = WQL.getWO("sch_point").addParamMap(MapOf.of("flag", "5", "point_codes", "'" + pointCollect + "'")).process().getResultJSONArray(0);
|
||||
//区域编号对应point_code
|
||||
Map<String, List<Object>> pointRegionCollent = needMergeCollect.stream().collect(Collectors.groupingBy(o -> ((JSONObject) o).getString("point_code")));
|
||||
Set<String> mergePointCollent = needMergeCollect.stream().map(item -> ((JSONObject) item).getString("point_code")).collect(Collectors.toSet());
|
||||
//合并下发的任务
|
||||
List<SchBaseTask> notMerge = new ArrayList<>();//单独下发的任务
|
||||
List<SchBaseTask> waitingTask = new ArrayList<>();//可合并,但是只有单条任务
|
||||
Map<String, String> taskGroupMap = new HashMap<>();
|
||||
for (SchBaseTask task : array) {
|
||||
String taskGroupId = org.nl.common.utils.IdUtil.getStringId();
|
||||
String taskId = task.getTask_id();
|
||||
task.setIs_send(true);
|
||||
if (taskGroupMap.get(taskId) != null){
|
||||
task.setTask_group_id(taskGroupMap.get(taskId));
|
||||
task.setIs_send(false);
|
||||
Merge.add(task);
|
||||
continue;
|
||||
}
|
||||
String start = task.getPoint_code1();
|
||||
String end = task.getPoint_code2();
|
||||
taskGroupMap.put(taskId,taskGroupId);
|
||||
task.setTask_group_id(taskGroupId);
|
||||
//如果点位不属于查询出来可以合并点位集合:则单独下发集合
|
||||
if (!mergePointCollent.contains(start) && !mergePointCollent.contains(end)){
|
||||
notMerge.add(task);
|
||||
continue;
|
||||
}
|
||||
//起点点位是否有多个合并任务点,如果没有则判断终点是否有多个合并任务点;都没有则说明当前起点终点对应区域只有一个任务:放入等待下发集合中
|
||||
List<String> collect = taskGroupMap.keySet().stream().collect(Collectors.toList());
|
||||
collect.add(taskId);
|
||||
String mergeTargetId = getMergePoint(pointRegionCollent, start,end,array,collect);
|
||||
if (mergeTargetId == null){
|
||||
waitingTask.add(task);
|
||||
continue;
|
||||
}
|
||||
//查询到相同区域可以合并的点位集合
|
||||
taskGroupMap.put(mergeTargetId,taskGroupId);
|
||||
Merge.add(task);
|
||||
}
|
||||
//开始下发:处理waitingTask:如果创建时间>2分钟:则改单独下发
|
||||
if (waitingTask.size()>0){
|
||||
List<SchBaseTask> needPublish = waitingTask.stream().filter(a -> DateUtil.between(new Date(),a.getCreate_time(), DateUnit.MINUTE) >1 ).collect(Collectors.toList());
|
||||
notMerge.addAll(needPublish);
|
||||
}
|
||||
String notMergeID = notMerge.stream().map(a -> a.getTask_id()).collect(Collectors.joining(","));
|
||||
String waitingTaskId = waitingTask.stream().map(a -> a.getTask_id()).collect(Collectors.joining(","));
|
||||
String MergeId = Merge.stream().map(a -> a.getTask_id()).collect(Collectors.joining(","));
|
||||
log.info("TaskScheduleService#taskPublish notMerge:{},waitingTask:{},merge:{}",notMergeID,waitingTaskId,MergeId);
|
||||
notMerge.forEach(a->{
|
||||
a.setIs_send(true);
|
||||
});
|
||||
Merge.addAll(notMerge);
|
||||
}
|
||||
Map<String, List<SchBaseTask>> collect = Merge.stream().collect(Collectors.groupingBy(SchBaseTask::getTask_group_id));
|
||||
ArrayList<SchBaseTask> result = new ArrayList<>();
|
||||
for (List<SchBaseTask> value : collect.values()) {
|
||||
updateAcsTaskType(value);
|
||||
result.addAll(value);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private void updateAcsTaskType(List<SchBaseTask> value) {
|
||||
if (value.size() > 1){
|
||||
boolean tag = true;
|
||||
for (SchBaseTask task : value) {
|
||||
if (task.getAcs_task_type().equals(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_ENTRY_TASK.getCode())){
|
||||
task.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_DOUBLE_ENTRY_TASK.getCode());
|
||||
}
|
||||
if (task.getAcs_task_type().equals(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_TASK.getCode())){
|
||||
task.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_DOUBLE_TASK.getCode());
|
||||
}
|
||||
if (tag){task.setIs_send(true);tag = false;}else {task.setIs_send(false); }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private String getMergePoint(Map<String, List<Object>> pointRegionCollent, String start,String end,List<SchBaseTask> tasks,List<String> taskIds) {
|
||||
String findpoint = findpoint(pointRegionCollent, start, tasks, taskIds);
|
||||
if (findpoint == null){
|
||||
findpoint = findpoint(pointRegionCollent, end, tasks, taskIds);
|
||||
}
|
||||
return findpoint;
|
||||
}
|
||||
|
||||
private String findpoint(Map<String, List<Object>> pointRegionCollent, String start, List<SchBaseTask> tasks, List<String> taskIds) {
|
||||
List<Object> objects = pointRegionCollent.get(start);
|
||||
if (CollectionUtils.isEmpty(objects)){
|
||||
return null;
|
||||
}
|
||||
JSONObject startPointInfo = (JSONObject) objects.get(0);
|
||||
String startPointCollent = startPointInfo.getString("pointcollent");
|
||||
String[] split = startPointCollent.split(",");
|
||||
for (String s : split) {
|
||||
Optional<SchBaseTask> any = tasks.stream().filter(a -> a.getPoint_code1().equals(s) && !taskIds.contains((a.getTask_id()))).findAny();
|
||||
if (any.isPresent()){
|
||||
return any.get().getTask_id();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package org.nl.wms.product_manage.sch.tasks.SpeMachinery;
|
||||
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
@@ -19,12 +21,12 @@ import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.wms.ext.acs.service.impl.AgvInstService;
|
||||
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
|
||||
import org.nl.wms.product_manage.sch.manage.TaskStatusEnum;
|
||||
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
|
||||
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
|
||||
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
|
||||
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
|
||||
import org.nl.wms.scheduler_manage.service.cacheline.ISchCachelineVehilematerialService;
|
||||
import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial;
|
||||
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
|
||||
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
|
||||
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
|
||||
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -32,9 +34,8 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 专机任务
|
||||
@@ -47,7 +48,7 @@ public class SpeFullTask extends AbstractAcsTask {
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
private IPdmBiDeviceService deviceService;
|
||||
@Autowired
|
||||
private ISchCachelineVehilematerialService cacheLineVechileService;
|
||||
@Autowired
|
||||
@@ -60,6 +61,7 @@ public class SpeFullTask extends AbstractAcsTask {
|
||||
public SpeFullTask() {
|
||||
SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_MAC.name() ,new Spe2Spe());
|
||||
SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_CACHE.name() ,new Spe2Cache());
|
||||
SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_WASH.name() ,new Spe2Wash());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -69,7 +71,10 @@ public class SpeFullTask extends AbstractAcsTask {
|
||||
// 指令执行中
|
||||
SchBaseTask task = taskService.getById(param.getString("task_id"));
|
||||
AcsTaskEnum taskType = AcsTaskEnum.getType(task.getTask_type(),"TASK_");
|
||||
pointService.update(new UpdateWrapper<SchBasePoint>().set("lock_type","0").in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3()));
|
||||
taskService.update(new UpdateWrapper<SchBaseTask>()
|
||||
.set("task_status",status)
|
||||
.set("update_name","acs")
|
||||
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
|
||||
try {
|
||||
SpeHandles.get(taskType.name()).handle(param,status,task);
|
||||
}catch (Exception ex){
|
||||
@@ -83,7 +88,6 @@ public class SpeFullTask extends AbstractAcsTask {
|
||||
public String createTask(JSONObject param) {
|
||||
String point_code = param.getString("device_code");
|
||||
String quantity = param.getString("quantity");
|
||||
String type = param.getString("type");
|
||||
PdmProduceWorkorder order = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>()
|
||||
.eq("workorder_code", param.getString("workorder_code"))
|
||||
.eq("is_delete", false)
|
||||
@@ -98,7 +102,7 @@ public class SpeFullTask extends AbstractAcsTask {
|
||||
JSONObject empPoint = WQL.getWO("sch_point").addParamMap(MapOf.of("flag", "2", "point_code", point_code, "point_type", StatusEnum.POINT_LOCATION_EMP.getCode())).process().uniqueResult(0);
|
||||
JSONObject form = new JSONObject(MapOf.of("start_point_code",point_code,
|
||||
"next_point_code","","return_point_code", empPoint.getString("point_code"),"vehicle_code",
|
||||
"","product_area",order.getProduct_area(),"quantity", quantity,"type",type,"material_id", order.getMaterial_id()));
|
||||
"","product_area",order.getProduct_area(),"quantity", quantity,"type",AcsTaskEnum.TASK_PRODUCT_MAC.getCode(),"material_id", order.getMaterial_id()));
|
||||
|
||||
String taskId = IdUtil.getStringId();
|
||||
JSONObject task = packageParam(form, taskId);
|
||||
@@ -117,7 +121,7 @@ public class SpeFullTask extends AbstractAcsTask {
|
||||
private JSONObject packageParam(JSONObject form, String task_id) {
|
||||
JSONObject task = new JSONObject();
|
||||
参数封装:{
|
||||
AcsTaskEnum taskEnum = AcsTaskEnum.getType(form.getString("type"), "REQUEST_");
|
||||
AcsTaskEnum taskEnum = AcsTaskEnum.getType(form.getString("type"), "TASK_");
|
||||
task.put("task_id", task_id);
|
||||
task.put("task_name", taskEnum.getDesc());
|
||||
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
|
||||
@@ -145,15 +149,8 @@ public class SpeFullTask extends AbstractAcsTask {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cancel(String taskId) {
|
||||
log.info(OPT_NAME+"cancel taskID:{}",taskId);
|
||||
WQLObject taskTable = WQLObject.getWQLObject("sch_base_task");
|
||||
//专机-专机
|
||||
//专机-缓存线
|
||||
//缓存线出库
|
||||
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_CANNEL.getCode()),"task_id = '"+taskId+"'");
|
||||
public void cancel(String taskId) { }
|
||||
|
||||
}
|
||||
interface SpeStatusHandler{
|
||||
void handle(JSONObject param,String status,SchBaseTask task);
|
||||
}
|
||||
@@ -163,30 +160,22 @@ public class SpeFullTask extends AbstractAcsTask {
|
||||
AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_");
|
||||
switch (status){
|
||||
case STATUS_START:
|
||||
taskService.update(new UpdateWrapper<SchBaseTask>()
|
||||
.set("task_status",StatusEnum.TASK_RUNNING.getCode())
|
||||
.set("update_name","acs")
|
||||
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
|
||||
Map<String, String> extParam = (Map)param.get("ext_param");
|
||||
if (extParam.get("put_finish") != null){
|
||||
pointService.update(new UpdateWrapper<SchBasePoint>()
|
||||
.set("vehicle_code",task.getVehicle_code2())
|
||||
.eq("point_code",task.getPoint_code3()));
|
||||
}
|
||||
if (extParam.get("take_finish") != null){
|
||||
pointService.update(new UpdateWrapper<SchBasePoint>()
|
||||
.set("vehicle_code","")
|
||||
.eq("point_code",task.getPoint_code3()));
|
||||
pointService.update(new UpdateWrapper<SchBasePoint>()
|
||||
.set("vehicle_code",task.getVehicle_code2())
|
||||
.eq("point_code",task.getPoint_code1()));
|
||||
}
|
||||
// if (extParam.get("put_finish") != null){
|
||||
// pointService.update(new UpdateWrapper<SchBasePoint>()
|
||||
// .set("vehicle_code",task.getVehicle_code2())
|
||||
// .eq("point_code",task.getPoint_code3()));
|
||||
// }
|
||||
// if (extParam.get("take_finish") != null){
|
||||
// pointService.update(new UpdateWrapper<SchBasePoint>()
|
||||
// .set("vehicle_code","")
|
||||
// .eq("point_code",task.getPoint_code3()));
|
||||
// pointService.update(new UpdateWrapper<SchBasePoint>()
|
||||
// .set("vehicle_code",task.getVehicle_code2())
|
||||
// .eq("point_code",task.getPoint_code1()));
|
||||
// }
|
||||
break;
|
||||
case STATUS_FINISH:
|
||||
taskService.update(new UpdateWrapper<SchBaseTask>()
|
||||
.set("task_status",StatusEnum.TASK_FINISH.getCode())
|
||||
.set("update_name","acs")
|
||||
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
|
||||
break;
|
||||
case STATUS_CANNEL:
|
||||
cancel(param.getString("task_id"));
|
||||
@@ -203,15 +192,8 @@ public class SpeFullTask extends AbstractAcsTask {
|
||||
AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_");
|
||||
switch (status){
|
||||
case STATUS_START:
|
||||
Map<String, String> extParam = (Map)param.get("ext_param");
|
||||
UpdateWrapper<SchBaseTask> wrapper = new UpdateWrapper<SchBaseTask>()
|
||||
.set("task_status", StatusEnum.TASK_RUNNING.getCode())
|
||||
.set("update_name", "acs")
|
||||
.set("update_time", DateUtil.now()).eq("task_id", task.getTask_id());
|
||||
|
||||
if (extParam.get("outboxt")!= null){ wrapper.set("vehicle_code2",extParam.get("outboxt")); }
|
||||
taskService.update(wrapper);
|
||||
|
||||
Map<String, String> extParam = (Map)param.get("ext_param");//outboxt inboxt
|
||||
//outboxt箱子更新到任务表vechile_code2?
|
||||
if (extParam.get("inboxt") != null){
|
||||
SchCachelineVehilematerial vehilematerial = new SchCachelineVehilematerial();
|
||||
vehilematerial.setVehmaterial_id(IdUtil.getStringId());
|
||||
@@ -222,13 +204,8 @@ public class SpeFullTask extends AbstractAcsTask {
|
||||
vehilematerial.setQuantity(task.getMaterial_qty());
|
||||
cacheLineVechileService.save(vehilematerial);
|
||||
}
|
||||
|
||||
break;
|
||||
case STATUS_FINISH:
|
||||
taskService.update(new UpdateWrapper<SchBaseTask>()
|
||||
.set("task_status",StatusEnum.TASK_FINISH.getCode())
|
||||
.set("update_name","acs")
|
||||
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
|
||||
break;
|
||||
case STATUS_CANNEL:
|
||||
cancel(param.getString("task_id"));
|
||||
@@ -238,9 +215,138 @@ public class SpeFullTask extends AbstractAcsTask {
|
||||
}
|
||||
}
|
||||
}
|
||||
class Spe2Wash implements SpeStatusHandler{
|
||||
@Override
|
||||
public void handle(JSONObject param, String sta,SchBaseTask task) {
|
||||
AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_");
|
||||
switch (status){
|
||||
case STATUS_START:
|
||||
Map<String, String> extParam = (Map)param.get("ext_param");
|
||||
log.info("生坑到料完成:"+param.toString());
|
||||
if (extParam.get("fall_finish") != null){
|
||||
PdmBiDevice one = deviceService.getOne(new QueryWrapper<PdmBiDevice>().eq("device_code", task.getPoint_code2()));
|
||||
deviceService.update(new UpdateWrapper<PdmBiDevice>()
|
||||
.set("material_id", task.getMaterial_id())
|
||||
.set("deviceinstor_qty",one.getDeviceinstor_qty().add(task.getMaterial_qty()))
|
||||
.eq("device_code", task.getPoint_code2()));
|
||||
}
|
||||
break;
|
||||
case STATUS_FINISH:
|
||||
break;
|
||||
case STATUS_CANNEL:
|
||||
break;
|
||||
default:
|
||||
throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void pointConfirm(JSONObject param) {
|
||||
agvInstService.fullMaster(param);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SchBaseTask> schedulerTask(List<SchBaseTask> array) {
|
||||
ArrayList<SchBaseTask> Merge = new ArrayList<>();
|
||||
if (!CollectionUtils.isEmpty(array)){
|
||||
String pointCollect = array.stream().map(a->a.getPoint_code1() + "','" + a.getPoint_code2()).collect(Collectors.joining("','"));
|
||||
JSONArray needMergeCollect = WQL.getWO("sch_point").addParamMap(MapOf.of("flag", "5", "point_codes", "'" + pointCollect + "'")).process().getResultJSONArray(0);
|
||||
//区域编号对应point_code
|
||||
Map<String, List<Object>> pointRegionCollent = needMergeCollect.stream().collect(Collectors.groupingBy(o -> ((JSONObject) o).getString("point_code")));
|
||||
Set<String> mergePointCollent = needMergeCollect.stream().map(item -> ((JSONObject) item).getString("point_code")).collect(Collectors.toSet());
|
||||
//合并下发的任务
|
||||
List<SchBaseTask> notMerge = new ArrayList<>();//单独下发的任务
|
||||
List<SchBaseTask> waitingTask = new ArrayList<>();//可合并,但是只有单条任务
|
||||
Map<String, String> taskGroupMap = new HashMap<>();
|
||||
for (SchBaseTask task : array) {
|
||||
String taskGroupId = IdUtil.getStringId();
|
||||
String taskId = task.getTask_id();
|
||||
if (taskGroupMap.get(taskId) != null){
|
||||
task.setTask_group_id(taskGroupMap.get(taskId));
|
||||
Merge.add(task);
|
||||
continue;
|
||||
}
|
||||
String start = task.getPoint_code1();
|
||||
String end = task.getPoint_code2();
|
||||
taskGroupMap.put(taskId,taskGroupId);
|
||||
task.setTask_group_id(taskGroupId);
|
||||
//如果点位不属于查询出来可以合并点位集合:则单独下发集合
|
||||
if (!mergePointCollent.contains(start) && !mergePointCollent.contains(end)){
|
||||
notMerge.add(task);
|
||||
continue;
|
||||
}
|
||||
//起点点位是否有多个合并任务点,如果没有则判断终点是否有多个合并任务点;都没有则说明当前起点终点对应区域只有一个任务:放入等待下发集合中
|
||||
List<String> collect = taskGroupMap.keySet().stream().collect(Collectors.toList());
|
||||
collect.add(taskId);
|
||||
String mergeTargetId = getMergePoint(pointRegionCollent, start,end,array,collect);
|
||||
if (mergeTargetId == null){
|
||||
waitingTask.add(task);
|
||||
continue;
|
||||
}
|
||||
//查询到相同区域可以合并的点位集合
|
||||
taskGroupMap.put(mergeTargetId,taskGroupId);
|
||||
Merge.add(task);
|
||||
}
|
||||
//开始下发:处理waitingTask:如果创建时间>2分钟:则改单独下发
|
||||
if (waitingTask.size()>0){
|
||||
List<SchBaseTask> needPublish = waitingTask.stream().filter(a -> DateUtil.between(new Date(),a.getCreate_time(), DateUnit.MINUTE) >1 ).collect(Collectors.toList());
|
||||
notMerge.addAll(needPublish);
|
||||
}
|
||||
String notMergeID = notMerge.stream().map(a -> a.getTask_id()).collect(Collectors.joining(","));
|
||||
String waitingTaskId = waitingTask.stream().map(a -> a.getTask_id()).collect(Collectors.joining(","));
|
||||
String MergeId = Merge.stream().map(a -> a.getTask_id()).collect(Collectors.joining(","));
|
||||
log.info("TaskScheduleService#taskPublish notMerge:{},waitingTask:{},merge:{}",notMergeID,waitingTaskId,MergeId);
|
||||
Merge.addAll(notMerge);
|
||||
}
|
||||
Map<String, List<SchBaseTask>> collect = Merge.stream().collect(Collectors.groupingBy(SchBaseTask::getTask_group_id));
|
||||
|
||||
ArrayList<SchBaseTask> result = new ArrayList<>();
|
||||
for (List<SchBaseTask> value : collect.values()) {
|
||||
updateAcsTaskType(value);
|
||||
result.addAll(value);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private void updateAcsTaskType(List<SchBaseTask> value) {
|
||||
if (value.size() > 1){
|
||||
boolean tag = true;
|
||||
for (SchBaseTask task : value) {
|
||||
if (task.getAcs_task_type().equals(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_ENTRY_TASK.getCode())){
|
||||
task.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_DOUBLE_ENTRY_TASK.getCode());
|
||||
}
|
||||
if (task.getAcs_task_type().equals(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_TASK.getCode())){
|
||||
task.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_DOUBLE_TASK.getCode());
|
||||
}
|
||||
if (tag){task.setIs_send(true);tag = false;}else {task.setIs_send(false); }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String getMergePoint(Map<String, List<Object>> pointRegionCollent, String start,String end,List<SchBaseTask> tasks,List<String> taskIds) {
|
||||
String findpoint = findpoint(pointRegionCollent, start, tasks, taskIds);
|
||||
if (findpoint == null){
|
||||
findpoint = findpoint(pointRegionCollent, end, tasks, taskIds);
|
||||
}
|
||||
return findpoint;
|
||||
}
|
||||
|
||||
private String findpoint(Map<String, List<Object>> pointRegionCollent, String start, List<SchBaseTask> tasks, List<String> taskIds) {
|
||||
List<Object> objects = pointRegionCollent.get(start);
|
||||
if (CollectionUtils.isEmpty(objects)){
|
||||
return null;
|
||||
}
|
||||
JSONObject startPointInfo = (JSONObject) objects.get(0);
|
||||
String startPointCollent = startPointInfo.getString("pointcollent");
|
||||
String[] split = startPointCollent.split(",");
|
||||
for (String s : split) {
|
||||
Optional<SchBaseTask> any = tasks.stream().filter(a -> a.getPoint_code1().equals(s) && !taskIds.contains((a.getTask_id()))).findAny();
|
||||
if (any.isPresent()){
|
||||
return any.get().getTask_id();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.enums.AcsTaskEnum;
|
||||
@@ -17,6 +18,7 @@ import org.nl.modules.wql.WQL;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.modules.wql.util.SpringContextHolder;
|
||||
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
||||
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
|
||||
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
|
||||
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@@ -43,120 +45,52 @@ public class TaskScheduleService {
|
||||
private final WmsToAcsService wmsToAcsService;
|
||||
private final ISchBaseTaskService taskService;
|
||||
|
||||
@SneakyThrows
|
||||
@Scheduled(cron = "0/30 * * * * ?")
|
||||
public void taskPublish(){
|
||||
boolean islock = lock.tryLock();
|
||||
try {
|
||||
if (islock){
|
||||
WQLObject taskTable = WQLObject.getWQLObject("sch_base_task");
|
||||
//查询所有自动下发的任务
|
||||
List<SchBaseTask> all = taskService.list(new QueryWrapper<SchBaseTask>().eq("is_auto_issue", "1").lt("task_status", StatusEnum.TASK_PUBLISH.getCode()));
|
||||
List<SchBaseTask> pointConfirmList = taskService.list(new QueryWrapper<SchBaseTask>().eq("is_auto_issue", "1").eq("is_delete",false).lt("task_status", StatusEnum.TASK_START_END_P.getCode()));
|
||||
//进行起点终点确认:
|
||||
if (all.size() == 0){
|
||||
return;
|
||||
}
|
||||
log.info("TaskScheduleService#taskPublish all_task:{}",all.size());
|
||||
Iterator<SchBaseTask> iterator = all.iterator();
|
||||
while (iterator.hasNext()){
|
||||
SchBaseTask task =iterator.next();
|
||||
if (task.getTask_status().equals(StatusEnum.TASK_START_END_P.getCode())){
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
Object obj = SpringContextHolder.getBean(Class.forName(task.getHandle_class()));
|
||||
// 调用每个任务类的forceFinishInst()强制结束方法
|
||||
Method m = obj.getClass().getDeclaredMethod("pointConfirm", JSONObject.class, String.class);
|
||||
m.invoke(obj,task);
|
||||
task.setTask_type(StatusEnum.TASK_START_END_P.getCode());
|
||||
}catch (Exception ex){
|
||||
task.setTask_type(StatusEnum.TASK_START_ERROR.getCode());
|
||||
task.setRemark(ex.getMessage());
|
||||
task.setUpdate_time(new Date());
|
||||
taskService.updateById(task);
|
||||
iterator.remove();
|
||||
if (pointConfirmList.size() > 0){
|
||||
Iterator<SchBaseTask> iterator = pointConfirmList.iterator();
|
||||
while (iterator.hasNext()){
|
||||
SchBaseTask task =iterator.next();
|
||||
try {
|
||||
Object obj = SpringContextHolder.getBean(Class.forName(task.getHandle_class()));
|
||||
// 调用每个任务类的forceFinishInst()强制结束方法
|
||||
Method m = obj.getClass().getDeclaredMethod("pointConfirm", JSONObject.class);
|
||||
m.invoke(obj,JSONObject.toJSON(task));
|
||||
task.setTask_type(StatusEnum.TASK_START_END_P.getCode());
|
||||
}catch (Exception ex){
|
||||
task.setTask_type(StatusEnum.TASK_START_ERROR.getCode());
|
||||
task.setRemark(ex.getMessage());
|
||||
task.setUpdate_time(new Date());
|
||||
taskService.updateById(task);
|
||||
}
|
||||
}
|
||||
}
|
||||
List<SchBaseTask> all = taskService.list(new QueryWrapper<SchBaseTask>().eq("is_auto_issue", "1").eq("is_delete",false).eq("task_status", StatusEnum.TASK_START_END_P.getCode()));
|
||||
//分区域:不同区域调用不同acs接口
|
||||
Map<String, List<SchBaseTask>> areaCollent = all.stream().collect(Collectors.groupingBy(SchBaseTask::getProduct_area));
|
||||
for (String area : areaCollent.keySet()) {
|
||||
List<SchBaseTask> array = areaCollent.get(area);
|
||||
if (array.size()>0){
|
||||
String pointCollect = array.stream().map(a->a.getPoint_code1() + "','" + a.getPoint_code2()).collect(Collectors.joining("','"));
|
||||
JSONArray needMergeCollect = WQL.getWO("sch_point").addParamMap(MapOf.of("flag", "5", "point_codes", "'" + pointCollect + "'")).process().getResultJSONArray(0);
|
||||
//区域编号对应point_code
|
||||
Map<String, List<Object>> pointRegionCollent = needMergeCollect.stream().collect(Collectors.groupingBy(o -> ((JSONObject) o).getString("point_code")));
|
||||
Set<String> mergePointCollent = needMergeCollect.stream().map(item -> ((JSONObject) item).getString("point_code")).collect(Collectors.toSet());
|
||||
//合并下发的任务
|
||||
List<SchBaseTask> notMerge = new ArrayList<>();//单独下发的任务
|
||||
List<SchBaseTask> Merge = new ArrayList<>();//单独下发的任务
|
||||
List<SchBaseTask> waitingTask = new ArrayList<>();//可合并,但是只有单条任务
|
||||
//Map<String, String> taskGroupMap = array.stream().filter(a-> StringUtils.isNotEmpty(a.getTask_group_id())).collect(HashMap::new, (k, v) -> k.put(v.getTask_id(), v.getTask_group_id()), HashMap::putAll);
|
||||
Map<String, String> taskGroupMap = new HashMap<>();
|
||||
for (SchBaseTask task : array) {
|
||||
String taskGroupId = IdUtil.getStringId();
|
||||
String taskId = task.getTask_id();
|
||||
task.setIs_send(true);
|
||||
if (taskGroupMap.get(taskId) != null){
|
||||
task.setTask_group_id(taskGroupMap.get(taskId));
|
||||
task.setIs_send(false);
|
||||
Merge.add(task);
|
||||
continue;
|
||||
}
|
||||
String start = task.getPoint_code1();
|
||||
String end = task.getPoint_code2();
|
||||
taskGroupMap.put(taskId,taskGroupId);
|
||||
task.setTask_group_id(taskGroupId);
|
||||
//如果点位不属于查询出来可以合并点位集合:则单独下发集合
|
||||
if (!mergePointCollent.contains(start) && !mergePointCollent.contains(end)){
|
||||
notMerge.add(task);
|
||||
continue;
|
||||
}
|
||||
//起点点位是否有多个合并任务点,如果没有则判断终点是否有多个合并任务点;都没有则说明当前起点终点对应区域只有一个任务:放入等待下发集合中
|
||||
List<String> collect = taskGroupMap.keySet().stream().collect(Collectors.toList());
|
||||
collect.add(taskId);
|
||||
String mergeTargetId = getMergePoint(pointRegionCollent, start,end,array,collect);
|
||||
if (mergeTargetId == null){
|
||||
waitingTask.add(task);
|
||||
continue;
|
||||
}
|
||||
//查询到相同区域可以合并的点位集合
|
||||
taskGroupMap.put(mergeTargetId,taskGroupId);
|
||||
Merge.add(task);
|
||||
}
|
||||
//开始下发:处理waitingTask:如果创建时间>2分钟:则改单独下发
|
||||
if (waitingTask.size()>0){
|
||||
List<SchBaseTask> needPublish = waitingTask.stream().filter(a -> DateUtil.between(new Date(),a.getCreate_time(), DateUnit.MINUTE) >2 ).collect(Collectors.toList());
|
||||
notMerge.addAll(needPublish);
|
||||
}
|
||||
String notMergeID = notMerge.stream().map(a -> a.getTask_id()).collect(Collectors.joining(","));
|
||||
String waitingTaskId = waitingTask.stream().map(a -> a.getTask_id()).collect(Collectors.joining(","));
|
||||
String MergeId = Merge.stream().map(a -> a.getTask_id()).collect(Collectors.joining(","));
|
||||
log.info("TaskScheduleService#taskPublish notMerge:{},waitingTask:{},merge:{}",notMergeID,waitingTaskId,MergeId);
|
||||
notMerge.forEach(a->{
|
||||
a.setIs_send(true);
|
||||
if (a.getAcs_task_type().equals(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_DOUBLE_TASK.getCode())){
|
||||
a.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_TASK.getCode());
|
||||
}
|
||||
if (a.getAcs_task_type().equals(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_DOUBLE_ENTRY_TASK.getCode())){
|
||||
a.setAcs_task_type(AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_ENTRY_TASK.getCode());
|
||||
}
|
||||
});
|
||||
Merge.addAll(notMerge);
|
||||
//批量更新任务状态,is_send,task_group_id
|
||||
JSONArray arr = new JSONArray();
|
||||
for (SchBaseTask task : Merge) {
|
||||
task.setUpdate_name("schedule");
|
||||
task.setUpdate_time(new Date());
|
||||
taskService.updateById(task);
|
||||
arr.add(JSONObject.toJSON(task));
|
||||
}
|
||||
//缓存线任务待确认是否生成多个
|
||||
Map<String, Object> resp = wmsToAcsService.issueTaskToAcs(arr);
|
||||
// if (((int)resp.get("status")) == (HttpStatus.BAD_REQUEST.value())){
|
||||
// Object errArr = resp.get("errArr");
|
||||
// throw new BadRequestException(String.valueOf(resp.get("message")));
|
||||
// }
|
||||
Map<String, List<SchBaseTask>> listMap = areaCollent.get(area).stream().collect(Collectors.groupingBy(SchBaseTask::getHandle_class));
|
||||
List<SchBaseTask> Merge = new ArrayList<>();
|
||||
for (Map.Entry<String, List<SchBaseTask>> array : listMap.entrySet()) {
|
||||
//调用不同实现
|
||||
AbstractAcsTask taskHandler = (AbstractAcsTask)SpringContextHolder.getBean(Class.forName(array.getKey()));
|
||||
Merge.addAll(taskHandler.schedulerTask(array.getValue()));
|
||||
}
|
||||
JSONArray arr = new JSONArray();
|
||||
for (SchBaseTask task : Merge) {
|
||||
task.setUpdate_name("schedule");
|
||||
task.setUpdate_time(new Date());
|
||||
taskService.updateById(task);
|
||||
arr.add(JSONObject.toJSON(task));
|
||||
}
|
||||
Map<String, Object> resp = wmsToAcsService.issueTaskToAcs(arr);
|
||||
}
|
||||
}
|
||||
}finally {
|
||||
@@ -167,30 +101,4 @@ public class TaskScheduleService {
|
||||
}
|
||||
|
||||
|
||||
private String getMergePoint(Map<String, List<Object>> pointRegionCollent, String start,String end,List<SchBaseTask> tasks,List<String> taskIds) {
|
||||
String findpoint = findpoint(pointRegionCollent, start, tasks, taskIds);
|
||||
if (findpoint == null){
|
||||
findpoint = findpoint(pointRegionCollent, end, tasks, taskIds);
|
||||
}
|
||||
return findpoint;
|
||||
}
|
||||
|
||||
private String findpoint(Map<String, List<Object>> pointRegionCollent, String start, List<SchBaseTask> tasks, List<String> taskIds) {
|
||||
List<Object> objects = pointRegionCollent.get(start);
|
||||
if (CollectionUtils.isEmpty(objects)){
|
||||
return null;
|
||||
}
|
||||
JSONObject startPointInfo = (JSONObject) objects.get(0);
|
||||
String startPointCollent = startPointInfo.getString("pointcollent");
|
||||
String[] split = startPointCollent.split(",");
|
||||
for (String s : split) {
|
||||
Optional<SchBaseTask> any = tasks.stream().filter(a -> a.getPoint_code1().equals(s) && !taskIds.contains((a.getTask_id()))).findAny();
|
||||
if (any.isPresent()){
|
||||
return any.get().getTask_id();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -7,10 +7,10 @@ import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
|
||||
import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
|
||||
import org.nl.wms.product_manage.service.workorder.dto.WorkorderQuery;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -90,6 +90,15 @@ public interface IPdmProduceWorkorderService extends IService<PdmProduceWorkorde
|
||||
void excelImport(MultipartFile file, HttpServletRequest request);
|
||||
|
||||
|
||||
/*----一体及接口---*/
|
||||
|
||||
/**
|
||||
* 一体机工单列表
|
||||
* @param param
|
||||
* @param page
|
||||
* @return
|
||||
*/
|
||||
List<Map> getOrderList(Map<String,String> param, Pageable page);
|
||||
/**
|
||||
* 开工操作
|
||||
*
|
||||
@@ -107,6 +116,9 @@ public interface IPdmProduceWorkorderService extends IService<PdmProduceWorkorde
|
||||
Object report(JSONObject param);
|
||||
|
||||
void reportApprove(JSONArray param);
|
||||
void updateReport(JSONObject param);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 工单更换设备
|
||||
@@ -117,4 +129,5 @@ public interface IPdmProduceWorkorderService extends IService<PdmProduceWorkorde
|
||||
|
||||
List<Map> reportQuery(ReportQuery query);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -17,5 +17,5 @@ import java.util.Map;
|
||||
*/
|
||||
public interface IPdmProduceWorkorderrecordService extends IService<PdmProduceWorkorderrecord> {
|
||||
|
||||
List<Map> getWorkorderRecordDtl(ReportQuery query);
|
||||
List<Map> reportQuery(ReportQuery query);
|
||||
}
|
||||
|
||||
@@ -25,4 +25,6 @@ public interface PdmProduceWorkorderMapper extends BaseMapper<PdmProduceWorkorde
|
||||
|
||||
int batchUpdateByParam(@Param("event") List<Map> event, @Param("workorder_id")String workorder_id);
|
||||
|
||||
List<Map> orderList(Map qeury);
|
||||
|
||||
}
|
||||
|
||||
@@ -71,6 +71,37 @@
|
||||
</where>
|
||||
order by record.seq_number
|
||||
</select>
|
||||
<select id="orderList" resultType="java.util.Map">
|
||||
SELECT
|
||||
mater.material_name,
|
||||
mater.material_code,
|
||||
mater.material_spec,
|
||||
workorder.*,
|
||||
workprocedure.workprocedure_name
|
||||
FROM
|
||||
pdm_produce_workorder workorder
|
||||
LEFT JOIN md_me_materialbase mater ON workorder.material_id = mater.material_id
|
||||
LEFT JOIN pdm_bi_workprocedure workprocedure ON workorder.workprocedure_id = workprocedure.workprocedure_id
|
||||
WHERE
|
||||
workorder.is_delete = false and workorder.workorder_status > 1
|
||||
<if test="device_code != null and device_code != ''">
|
||||
and workorder.device_code = #{device_code}
|
||||
</if>
|
||||
<if test="key_value != null and key_value != ''">
|
||||
and (
|
||||
workorder.workorder_code like %${key_value}% or
|
||||
mater.material_name like%${key_value}% or
|
||||
mater.material_code like %${key_value}%
|
||||
)
|
||||
</if>
|
||||
<if test="realproducestart_date != null and realproducestart_date != ''">
|
||||
and workorder.realproducestart_date >= #{realproducestart_date}
|
||||
</if>
|
||||
<if test="realproduceend_date != null and realproduceend_date != ''">
|
||||
and #{realproduceend_date} >= workorder.realproducestart_date
|
||||
</if>
|
||||
order by workorder_code desc
|
||||
</select>
|
||||
|
||||
<update id="batchUpdateByParam">
|
||||
update PDM_produce_workOrder set
|
||||
|
||||
@@ -18,5 +18,5 @@ import java.util.Map;
|
||||
*/
|
||||
public interface PdmProduceWorkorderrecordMapper extends BaseMapper<PdmProduceWorkorderrecord> {
|
||||
|
||||
List<Map> getWorkorderRecordDtl(@Param("query")ReportQuery query);
|
||||
List<Map> reportQuery(@Param("query")ReportQuery query);
|
||||
}
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.wms.product_manage.service.workorder.dao.mapper.PdmProduceWorkorderrecordMapper">
|
||||
|
||||
<select id="getWorkorderRecordDtl" resultType="java.util.Map">
|
||||
<select id="reportQuery" resultType="java.util.Map">
|
||||
SELECT
|
||||
wr.workorder_code,
|
||||
sys_user.username as produce_person_name,
|
||||
wr.device_code,
|
||||
mb.material_name,
|
||||
mb.material_spec,
|
||||
@@ -13,12 +14,13 @@
|
||||
FROM pdm_produce_workorderrecord re
|
||||
INNER JOIN pdm_produce_workorder wr on re.workorder_id = wr.workorder_id
|
||||
LEFT JOIN md_me_materialbase mb on mb.material_id = wr.material_id
|
||||
where wr.is_delete = true
|
||||
LEFT JOIN sys_user on re.produce_person_id = sys_user.user_id
|
||||
where wr.is_delete = false
|
||||
<if test="query.device_code != null and query.device_code != ''">
|
||||
and wr.device_code = #{device_code}
|
||||
and wr.device_code = #{query.device_code}
|
||||
</if>
|
||||
<if test="query.workorder_code != null and query.workorder_code != ''">
|
||||
and wr.workorder_code = #{workorder_code}
|
||||
and wr.workorder_code = #{query.workorder_code}
|
||||
</if>
|
||||
<if test="query.start_time != null and query.start_time != ''">
|
||||
and wr.realproducestart_date >= #{query.start_time}
|
||||
@@ -26,5 +28,6 @@
|
||||
<if test="query.end_time != null and query.end_time != ''">
|
||||
and #{query.end_time} >= wr.realproducestart_date
|
||||
</if>
|
||||
order by workorder_code desc,seq_number asc
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -7,15 +7,19 @@ import org.nl.common.enums.QueryTEnum;
|
||||
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
|
||||
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2023/4/26 11:05
|
||||
*/
|
||||
@Data
|
||||
public class ReportQuery extends BaseQuery<PdmProduceWorkorderrecord> {
|
||||
public class ReportQuery {
|
||||
|
||||
private String device_code;
|
||||
private String workorder_code;
|
||||
private String report;
|
||||
private String start_time;
|
||||
private String end_time;
|
||||
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService;
|
||||
import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.mps.service.WorkOrderImportEnum;
|
||||
import org.nl.wms.mps.service.dto.ProduceshiftorderDto;
|
||||
import org.nl.wms.product_manage.ReportEnum;
|
||||
import org.nl.wms.product_manage.ReportRecordStatus;
|
||||
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
|
||||
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
|
||||
@@ -43,7 +44,9 @@ import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
|
||||
import org.nl.wms.product_manage.service.workorder.dto.WorkorderQuery;
|
||||
import org.nl.wms.system_manage.service.user.ISysUserService;
|
||||
import org.nl.wms.system_manage.service.user.dao.SysUser;
|
||||
import org.redisson.misc.Hash;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -522,18 +525,38 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
|
||||
JSONObject order = packageForm(param);
|
||||
array.add(order);
|
||||
//下发acs
|
||||
Map<String, Object> resp = wmsToAcsService.order(array);
|
||||
|
||||
PdmProduceWorkorder workOrder = this.getOne(new QueryWrapper<PdmProduceWorkorder>().eq("workorder_id", param.getString("workorder_id")));
|
||||
workOrder.setWorkorder_status(WorkerOrderEnum.PRODUCTING.getCode());
|
||||
if (((int) resp.get("status")) == (HttpStatus.BAD_REQUEST.value())) {
|
||||
throw new BadRequestException(resp.get("message")!=null?String.valueOf(resp.get("message")):"acs反馈异常");
|
||||
}
|
||||
workOrder.setRealproducestart_date(DateUtil.now());
|
||||
workOrder.setReal_qty(null);
|
||||
this.update(workOrder, new QueryWrapper<PdmProduceWorkorder>().eq("workorder_id", param.getString("workorder_id")));
|
||||
PdmProduceWorkorderrecord workorderrecord = packageRecordForm(workOrder);
|
||||
reportRecordService.save(workorderrecord);
|
||||
|
||||
Map<String, Object> resp = wmsToAcsService.order(array);
|
||||
if (HttpStatus.BAD_REQUEST.equals(resp.get("status"))) {
|
||||
throw new BadRequestException(resp.get("message")!=null?String.valueOf(resp.get("message")):"acs反馈异常");
|
||||
}
|
||||
|
||||
return RestBusinessTemplate.execute(() -> resp);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private PdmProduceWorkorderrecord packageRecordForm(PdmProduceWorkorder workOrder) {
|
||||
PdmProduceWorkorderrecord workorderrecord = new PdmProduceWorkorderrecord();
|
||||
workorderrecord.setMacoperate_id(IdUtil.getStringId());
|
||||
workorderrecord.setWorkorder_id(workOrder.getWorkorder_id());
|
||||
workorderrecord.setWorkprocedure_id(workOrder.getWorkprocedure_id());
|
||||
workorderrecord.setDevice_code(workOrder.getDevice_code());
|
||||
workorderrecord.setProduct_area(workOrder.getProduct_area());
|
||||
workorderrecord.setReport_status(ReportEnum.REPORT_STATUS.code("生成"));
|
||||
workorderrecord.setProduce_person_id(SecurityUtils.getCurrentUserId());
|
||||
workorderrecord.setOperatetime_start(DateUtil.now());
|
||||
workorderrecord.setShift_type_scode(workOrder.getShift_type_scode());
|
||||
return workorderrecord;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private JSONObject packageForm(JSONObject param) {
|
||||
PdmProduceWorkorder workOrder = this.getOne(new QueryWrapper<PdmProduceWorkorder>().eq("workorder_id", param.getString("workorder_id")));
|
||||
@@ -576,13 +599,14 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
|
||||
if (workorder.getPlan_qty().doubleValue() <= workorder.getReport_qty().doubleValue()) {
|
||||
workorder.setWorkorder_status(WorkerOrderEnum.COMPLETE.getCode());
|
||||
}
|
||||
workorder.setReal_qty(null);
|
||||
this.updateById(workorder);
|
||||
|
||||
reportRecordService.update(new UpdateWrapper<PdmProduceWorkorderrecord>()
|
||||
.set("report_qty", param.getBigDecimal("report_qty"))
|
||||
.set("nok_qty", param.getBigDecimal("nok_qty"))
|
||||
.set("repare_qty", param.getBigDecimal("repare_qty"))
|
||||
.set("needproduct_qty", workorder.getPlan_qty().doubleValue() - workorder.getReport_qty().doubleValue())
|
||||
.set("needproduct_qty", Math.max(0,workorder.getPlan_qty().intValue() - workorder.getReport_qty().intValue()))
|
||||
.eq("macoperate_id", one.getMacoperate_id()));
|
||||
return one.getMacoperate_id();
|
||||
}
|
||||
@@ -672,6 +696,41 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
|
||||
|
||||
@Override
|
||||
public List<Map> reportQuery(ReportQuery query) {
|
||||
return reportRecordService.getWorkorderRecordDtl(query);
|
||||
List<Map> list = reportRecordService.reportQuery(query);
|
||||
Map<String, String> hashMap = new HashMap<>();
|
||||
int i =0;
|
||||
for (Map map : list) {
|
||||
String code = (String)map.get("workorder_code");
|
||||
if (hashMap.get(code)==null){
|
||||
hashMap.put(code,code);
|
||||
i =0;
|
||||
}
|
||||
i++;
|
||||
map.put("seq_number",i);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<Map> getOrderList(Map<String, String> param, Pageable page) {
|
||||
return this.baseMapper.orderList(param);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateReport(JSONObject param) {
|
||||
Assert.notNull(param,"参数不能为空");
|
||||
PdmProduceWorkorderrecord record = reportRecordService.getOne(new QueryWrapper<PdmProduceWorkorderrecord>()
|
||||
.eq("macoperate_id", param.getString("macoperate_id")));
|
||||
PdmProduceWorkorder workorder = this.getOne(new QueryWrapper<PdmProduceWorkorder>()
|
||||
.eq("workorder_id", record.getWorkorder_id()));
|
||||
if (!workorder.getIs_canupdate_update()){
|
||||
throw new BadRequestException("当前工单设置为不允许修改报工记录");
|
||||
}
|
||||
reportRecordService.update(new UpdateWrapper<PdmProduceWorkorderrecord>()
|
||||
.set("nok_qty",param.getBigDecimal("nok_qty"))
|
||||
.set("repare_qty",param.getBigDecimal("repare_qty"))
|
||||
.set("report_qty",param.getBigDecimal("report_qty"))
|
||||
.eq("macoperate_id", param.getString("macoperate_id")));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.product_manage.service.workorder.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.var;
|
||||
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord;
|
||||
import org.nl.wms.product_manage.service.workorder.dao.mapper.PdmProduceWorkorderrecordMapper;
|
||||
@@ -23,7 +24,7 @@ import java.util.Map;
|
||||
public class PdmProduceWorkorderrecordServiceImpl extends ServiceImpl<PdmProduceWorkorderrecordMapper, PdmProduceWorkorderrecord> implements IPdmProduceWorkorderrecordService {
|
||||
|
||||
@Override
|
||||
public List<Map> getWorkorderRecordDtl(ReportQuery query) {
|
||||
return this.baseMapper.getWorkorderRecordDtl(query);
|
||||
public List<Map> reportQuery(ReportQuery query) {
|
||||
return this.baseMapper.reportQuery(query);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +1,121 @@
|
||||
package org.nl.wms.scheduler_manage.controller.task;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.nl.common.anno.Log;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
|
||||
import org.nl.wms.system_manage.service.dict.ISysDictService;
|
||||
import org.nl.wms.system_manage.service.dict.dao.Dict;
|
||||
import org.nl.wms.product_manage.sch.manage.FinishTypeEnum;
|
||||
import org.nl.wms.product_manage.sch.service.TaskService;
|
||||
import org.nl.wms.product_manage.sch.service.dto.TaskDto;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Map;
|
||||
/**
|
||||
* <p>
|
||||
* 任务表 前端控制器
|
||||
* </p>
|
||||
*
|
||||
* @author generator
|
||||
* @since 2023-05-11
|
||||
*/
|
||||
* @author ldjun
|
||||
* @date 2021-08-19
|
||||
**/
|
||||
@RestController
|
||||
@RequestMapping("/schBaseTask")
|
||||
@RequiredArgsConstructor
|
||||
@Api(tags = "任务管理")
|
||||
@RequestMapping("/api/task")
|
||||
@Slf4j
|
||||
public class SchBaseTaskController {
|
||||
|
||||
private final TaskService taskService;
|
||||
private final ISysDictService dictService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService baseTaskService;
|
||||
|
||||
@GetMapping
|
||||
@Log("查询任务")
|
||||
@ApiOperation("查询任务")
|
||||
//@PreAuthorize("@el.check('task:list')")
|
||||
public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page) {
|
||||
return new ResponseEntity<>(taskService.queryAll(whereJson, page), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@Log("新增任务")
|
||||
@ApiOperation("新增任务")
|
||||
//@PreAuthorize("@el.check('task:add')")
|
||||
public ResponseEntity<Object> create(@Validated @RequestBody TaskDto dto) {
|
||||
taskService.create(dto);
|
||||
return new ResponseEntity<>(HttpStatus.CREATED);
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
@Log("修改任务")
|
||||
@ApiOperation("修改任务")
|
||||
//@PreAuthorize("@el.check('task:edit')")
|
||||
public ResponseEntity<Object> update(@Validated @RequestBody TaskDto dto) {
|
||||
taskService.update(dto);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@Log("删除任务")
|
||||
@ApiOperation("删除任务")
|
||||
//@PreAuthorize("@el.check('task:del')")
|
||||
@DeleteMapping
|
||||
public ResponseEntity<Object> delete(@RequestBody String[] ids) {
|
||||
taskService.deleteAll(ids);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/taskStatus")
|
||||
@Log("获取任务状态列表")
|
||||
@ApiOperation("获取任务状态列表")
|
||||
public ResponseEntity<Object> getTaskStatus() {
|
||||
return new ResponseEntity<>(dictService.list(new LambdaQueryWrapper<Dict>()
|
||||
.eq(Dict::getCode, "task_status")), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/taskType")
|
||||
@Log("获取任务类型列表")
|
||||
@ApiOperation("获取任务类型列表")
|
||||
public ResponseEntity<Object> getTaskType() {
|
||||
return new ResponseEntity<>(taskService.getTaskTypes(), HttpStatus.OK);
|
||||
}
|
||||
@GetMapping("/acsTaskType")
|
||||
@Log("获取acs任务类型列表")
|
||||
@ApiOperation("获取acs任务类型列表")
|
||||
public ResponseEntity<Object> getAcsTaskType() {
|
||||
return new ResponseEntity<>(taskService.getAcsTaskType(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@GetMapping("/finishType")
|
||||
@Log("获取任务类型列表")
|
||||
@ApiOperation("获取任务类型列表")
|
||||
public ResponseEntity<Object> getFinishType() {
|
||||
FinishTypeEnum[] values = FinishTypeEnum.values();
|
||||
JSONArray arr = new JSONArray();
|
||||
for (FinishTypeEnum value : values) {
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("code", value.getCode());
|
||||
json.put("name", value.getName());
|
||||
arr.add(json);
|
||||
}
|
||||
return new ResponseEntity<>(arr, HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PutMapping("/operation")
|
||||
@Log("任务操作")
|
||||
@ApiOperation("任务操作")
|
||||
//@PreAuthorize("@el.check('task:edit')")
|
||||
public ResponseEntity<Object> update(@RequestBody Map<String, Object> map) {
|
||||
baseTaskService.operation(map);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,8 @@ package org.nl.wms.scheduler_manage.service.task;
|
||||
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 任务表 服务类
|
||||
@@ -13,4 +15,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
*/
|
||||
public interface ISchBaseTaskService extends IService<SchBaseTask> {
|
||||
|
||||
/**
|
||||
* 任务操作
|
||||
*
|
||||
* @param param
|
||||
*/
|
||||
void operation(Map<String, Object> param);
|
||||
}
|
||||
|
||||
@@ -1,11 +1,29 @@
|
||||
package org.nl.wms.scheduler_manage.service.task.impl;
|
||||
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.nl.common.enums.AcsTaskEnum;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.wql.core.bean.WQLObject;
|
||||
import org.nl.wms.ext.acs.service.AcsToWmsService;
|
||||
import org.nl.wms.ext.acs.service.impl.WmsToAcsServiceImpl;
|
||||
import org.nl.wms.product_manage.sch.manage.TaskStatusEnum;
|
||||
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
|
||||
import org.nl.wms.scheduler_manage.service.task.dao.mapper.SchBaseTaskMapper;
|
||||
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.nl.wms.storage_manage.CHANGE_BILL_TYPE_ENUM;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 任务表 服务实现类
|
||||
@@ -17,4 +35,58 @@ import org.springframework.stereotype.Service;
|
||||
@Service
|
||||
public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBaseTask> implements ISchBaseTaskService {
|
||||
|
||||
@Autowired
|
||||
@Lazy
|
||||
private AcsToWmsService acsToWmsService;
|
||||
|
||||
@Override
|
||||
public void operation(Map<String, Object> map) {
|
||||
WmsToAcsServiceImpl wms = new WmsToAcsServiceImpl();
|
||||
String task_id = MapUtil.getStr(map, "task_id");
|
||||
String method_name = MapUtil.getStr(map, "method_name");
|
||||
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
|
||||
if (taskObj.getString("task_status").equals(TaskStatusEnum.FINISHED.getCode())) throw new BadRequestException("任务已完成!");
|
||||
|
||||
switch (method_name) { // forceFinish, cancel
|
||||
case "immediateNotifyAcs":
|
||||
JSONArray array = new JSONArray();
|
||||
array.add(taskObj);
|
||||
wms.issueTaskToAcs(array);
|
||||
break;
|
||||
case "forceFinish":
|
||||
JSONArray finish = new JSONArray();
|
||||
JSONObject res = new JSONObject();
|
||||
res.put("task_id", task_id);
|
||||
res.put("status", AcsTaskEnum.STATUS_FINISH.getCode());
|
||||
res.put("finished_type", AcsTaskEnum.MANUAL_TASK_FINISHED_TYPE.getCode()); // 手动完成
|
||||
finish.add(res);
|
||||
acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(finish));
|
||||
break;
|
||||
case "cancel":
|
||||
JSONArray cancel = new JSONArray();
|
||||
JSONObject res2 = new JSONObject();
|
||||
res2.put("task_id", task_id);
|
||||
res2.put("status", AcsTaskEnum.STATUS_CANNEL.getCode());
|
||||
cancel.add(res2);
|
||||
acsToWmsService.receiveTaskStatusAcs(JSON.toJSONString(cancel));
|
||||
break;
|
||||
case "delete":
|
||||
SchBaseTask one = getOne(new QueryWrapper<SchBaseTask>().eq("task_id", task_id));
|
||||
int status = Integer.valueOf(one.getTask_status());
|
||||
//判断如果在3个状态之内,更新操作
|
||||
int tag = 1 << StatusEnum.TASK_CANNEL.getBit()
|
||||
| 1 << StatusEnum.TASK_CREATE.getBit()
|
||||
| 1 << StatusEnum.TASK_START_ERROR.getBit()
|
||||
| 1 << StatusEnum.TASK_START_END_P.getBit();
|
||||
if ((tag &~ 1 << status) != tag){
|
||||
this.update(new UpdateWrapper<SchBaseTask>()
|
||||
.set("is_delete",true)
|
||||
.eq("task_id", task_id));
|
||||
}else {
|
||||
throw new BadRequestException("任务已经下发不允许直接删除");
|
||||
}
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,26 +9,24 @@ spring:
|
||||
client:
|
||||
reactive:
|
||||
#endpoints: 172.31.185.110:8200,172.31.154.9:8200 #内网
|
||||
# endpoints: 47.96.133.1785:8200 #外网
|
||||
endpoints: http://47.96.133.1785:8200 #外网
|
||||
# endpoints: 192.168.46.225:9200 #外网
|
||||
endpoints: http://192.168.46.225:9200 #外网
|
||||
elasticsearch:
|
||||
rest:
|
||||
#uris: 172.31.185.110:8200,172.31.154.9:8200 #内网
|
||||
# uris: 47.96.133.1785:8200 #外网
|
||||
uris: http://47.96.133.1785:8200 #外网
|
||||
username: elastic
|
||||
password: 123456
|
||||
# uris: 192.168.46.225:9200 #外网
|
||||
uris: http://192.168.46.225:9200 #外网
|
||||
# username: elastic
|
||||
# password: 123456
|
||||
datasource:
|
||||
druid:
|
||||
db-type: com.alibaba.druid.pool.DruidDataSource
|
||||
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
|
||||
url: jdbc:log4jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
|
||||
#url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
|
||||
username: ${DB_USER:shenhua}
|
||||
#password: ${DB_PWD:P@ssw0rd}
|
||||
#password: ${DB_PWD:root}
|
||||
#password: ${DB_PWD:Root.123456}
|
||||
password: ${DB_PWD:123456789}
|
||||
url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.0.1}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
|
||||
# url: jdbc:log4jdbc:mysql://${DB_HOST:192.168.81.252}:${DB_PORT:3306}/${DB_NAME:hl_one_mes}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true&allowPublicKeyRetrieval=true&useSSL=false
|
||||
username: ${DB_USER:root}
|
||||
password: ${DB_PWD:942464Yy}
|
||||
|
||||
# 初始连接数
|
||||
initial-size: 5
|
||||
# 最小连接数
|
||||
@@ -173,6 +171,7 @@ sa-token:
|
||||
cookie:
|
||||
# 配置 Cookie 作用域:根据二级域名实现sso登入如lms.sso.com;acs.sso.com
|
||||
domain:
|
||||
is-read-cookie: false
|
||||
|
||||
#jetcache:
|
||||
# defaultCacheType: LOCAL
|
||||
|
||||
Reference in New Issue
Block a user