rev:冲突处理
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.enums.AcsTaskEnum;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.enums.WorkerOrderEnum;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.common.utils.OptionRecord;
|
||||
@@ -22,6 +23,8 @@ import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
|
||||
import org.nl.wms.product_manage.sch.service.TaskService;
|
||||
import org.nl.wms.product_manage.sch.service.dto.TaskDto;
|
||||
import org.nl.wms.product_manage.sch.tasks.WashMachineryTask;
|
||||
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
|
||||
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@@ -47,6 +50,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{
|
||||
private TaskService taskService;
|
||||
@Autowired
|
||||
private CacheLineHandService cacheLineHandService;
|
||||
@Autowired
|
||||
private IPdmProduceWorkorderService workorderService;
|
||||
|
||||
|
||||
|
||||
@@ -70,40 +75,34 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{
|
||||
return result;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
ArrayList<Object> list = new ArrayList<>();
|
||||
list.forEach(a->{
|
||||
a.getClass();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新缓存线的点位实时任务信息
|
||||
* ACS给WMS发送缓存线的实时任务编号
|
||||
* @param jsonObject position_code:缓存线点位编码 task_code:任务编号
|
||||
*/
|
||||
@Override
|
||||
public JSONObject receiveTaskIdToCacheLine(JSONObject jsonObject) {
|
||||
JSONObject result = new JSONObject();
|
||||
HashMap<String,String> json = new HashMap<>(2);
|
||||
try {
|
||||
String task_code = jsonObject.getString("task_code");
|
||||
String positionCode = jsonObject.getString("position_code");
|
||||
//缓存线位置表
|
||||
WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position");
|
||||
json.put("position_code", positionCode);
|
||||
json.put("task_code", task_code);
|
||||
//更新缓存线的点位实时任务信息
|
||||
positionTab.update(json);
|
||||
}
|
||||
catch(Exception e) {
|
||||
result.put("status", 400);
|
||||
result.put("message", e.getMessage());
|
||||
}
|
||||
result.put("status", HttpStatus.OK.value());
|
||||
result.put("message", "设备状态反馈成功");
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
* 更新缓存线的点位实时任务信息
|
||||
* ACS给WMS发送缓存线的实时任务编号
|
||||
* @param jsonObject position_code:缓存线点位编码 task_code:任务编号
|
||||
*/
|
||||
@Override
|
||||
public JSONObject receiveTaskIdToCacheLine(JSONObject jsonObject) {
|
||||
JSONObject result = new JSONObject();
|
||||
HashMap<String,String> json = new HashMap<>(2);
|
||||
try {
|
||||
String task_code = jsonObject.getString("task_code");
|
||||
String positionCode = jsonObject.getString("position_code");
|
||||
//缓存线位置表
|
||||
WQLObject positionTab = WQLObject.getWQLObject("sch_cacheline_position");
|
||||
json.put("position_code", positionCode);
|
||||
json.put("task_code", task_code);
|
||||
//更新缓存线的点位实时任务信息
|
||||
positionTab.update(json);
|
||||
}
|
||||
catch(Exception e) {
|
||||
result.put("status", 400);
|
||||
result.put("message", e.getMessage());
|
||||
}
|
||||
result.put("status", HttpStatus.OK.value());
|
||||
result.put("message", "设备状态反馈成功");
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* task_uuid:任务标识
|
||||
@@ -138,9 +137,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{
|
||||
}
|
||||
// 任务处理类
|
||||
try {
|
||||
Class<?> clz = Class.forName(processing_class);
|
||||
Object obj = clz.newInstance();
|
||||
// 调用每个任务类的forceFinishInst()强制结束方法
|
||||
Object obj = SpringContextHolder.getBean(Class.forName(processing_class));
|
||||
Method m = obj.getClass().getDeclaredMethod("updateTaskStatus", JSONObject.class, String.class);
|
||||
m.invoke(obj, row, status);
|
||||
} catch (InvocationTargetException e) {
|
||||
@@ -203,17 +200,19 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{
|
||||
public Map<String, Object> orderStatus(JSONObject orderJson) {
|
||||
JSONObject result = new JSONObject();
|
||||
try {
|
||||
JSONObject map = new JSONObject();
|
||||
map.put("workorder_id", orderJson.getString("workorder_id"));
|
||||
map.put("workorder_status", orderJson.getString("status"));
|
||||
map.put("update_id", "1");
|
||||
map.put("real_qty", orderJson.getString("real_qty"));
|
||||
map.put("device_code", "");
|
||||
map.put("update_name", "acs");
|
||||
map.put("update_time", DateUtil.now());
|
||||
map.put("realproduceend_date", DateUtil.now());
|
||||
WQLObject.getWQLObject("PDM_produce_workOrder").update(map, "workorder_id = '" + orderJson.getString("workorder_id") + "'");
|
||||
//OptionRecord.record(OptionRecord.OptionEnum.UPDATEOP, OptionRecord.Buss.WORKORDER,orderJson.getString("workorder_id"),MapOf.of("workorder_status", orderJson.getString("status")));
|
||||
PdmProduceWorkorder workorder = new PdmProduceWorkorder();
|
||||
workorder.setWorkorder_id(orderJson.getString("workorder_id"));
|
||||
workorder.setWorkorder_status(orderJson.getString("status"));
|
||||
if (orderJson.getBigDecimal("real_qty") != null){
|
||||
workorder.setDq_real_qty(orderJson.getBigDecimal("real_qty"));
|
||||
}
|
||||
if (orderJson.getString("status").equals(WorkerOrderEnum.PRODUCTING.getCode())){
|
||||
workorder.setRealproducestart_date(DateUtil.now());
|
||||
}
|
||||
if (orderJson.getString("status").equals(WorkerOrderEnum.COMPLETE.getCode())){
|
||||
workorder.setRealproduceend_date(DateUtil.now());
|
||||
}
|
||||
workorderService.updateById(workorder);
|
||||
} catch (Exception e){
|
||||
result.put("status", 400);
|
||||
result.put("message", e.getMessage());
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.enums.AcsTaskEnum;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
@@ -28,6 +29,7 @@ import org.springframework.util.CollectionUtils;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/*
|
||||
@@ -51,8 +53,14 @@ public class AgvInstService {
|
||||
private ISchBaseTaskService taskService;
|
||||
@Autowired
|
||||
private ISchCachelineVehicleService cachelineVehicleService;
|
||||
@Autowired
|
||||
private ISchCachelineVehicleService cachelineVe3hicleService;
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
String a= "A1_DC_15_6";
|
||||
int i = a.lastIndexOf("_");
|
||||
System.out.println(a.substring(0, i));
|
||||
}
|
||||
|
||||
//满料请求点位确认
|
||||
//1.判断当前设备路由表是否配置下一道路由设备,如果不是则说明直接到清洗
|
||||
@@ -63,40 +71,64 @@ public class AgvInstService {
|
||||
public void fullMaster(JSONObject task){
|
||||
String quantity = task.getString("material_qty");
|
||||
//获取当前生产工序下一道工序
|
||||
Map<String,String> workprodure = basePointService.findDeviceWorkprodure(task.getString("point_code"));
|
||||
FlowElement next = getFlowElement(task,workprodure).next();
|
||||
String nextPoint = null;
|
||||
Map<String,String> workprodure = basePointService.findDeviceWorkprodure(task.getString("point_code1"));
|
||||
FlowElement currentFlow = getFlowElement(task, workprodure);
|
||||
FlowElement next = currentFlow.next();
|
||||
Map query = MapOf.of("workprocedure_id", basePointService.getWorkprodureByCode(next.getId()).get("workprocedure_id")
|
||||
, "qty", quantity,"spec",workprodure.get("spec"));
|
||||
//判断缓存线是不是去深坑清洗:深坑区域15个点:判断空的物料坑位:
|
||||
String cacheVehile = "";
|
||||
Map query = MapOf.of("workprocedure_id", workprodure.get("workprocedure_id")
|
||||
, "qty", quantity);
|
||||
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);
|
||||
|
||||
List<Map<String,String>> collect = deviceService.workproceduceDevices(query);
|
||||
List<Map<String, String>> list = collect.stream().filter(stringStringMap -> stringStringMap.get("tasks") == null || stringStringMap.get("materials").contains(task.getString("material_id"))).collect(Collectors.toList());
|
||||
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)){
|
||||
nextPoint = list.get(0).get("point_code");
|
||||
}else {
|
||||
if (next.getParams().get("cacheLine") == null){
|
||||
if (currentFlow.getParams().get("cacheLine") == null){
|
||||
throw new BadRequestException("当前任务下一道工序无可用设备");
|
||||
}
|
||||
nextPoint = next.getParams().get("cacheLine");
|
||||
nextPoint = getParamByXml(workprodure, currentFlow, nextPoint);
|
||||
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);
|
||||
}
|
||||
if (StringUtils.isBlank(nextPoint)){
|
||||
throw new BadRequestException("逻辑非配错误,请检查代码");
|
||||
|
||||
结果校验:{
|
||||
if (StringUtils.isBlank(nextPoint)) {
|
||||
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.setVehicle_code(cacheVehile);
|
||||
schBaseTask.setBarcodeArr(cacheVehile);
|
||||
schBaseTask.setPoint_code2(nextPoint);
|
||||
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
|
||||
schBaseTask.setUpdate_time(new Date());
|
||||
taskService.updateById(schBaseTask);
|
||||
};
|
||||
}
|
||||
|
||||
private String getParamByXml(Map<String, String> workprodure, FlowElement next, String nextPoint) {
|
||||
Object cacheLine = next.getParams().get("cacheLine");
|
||||
if (cacheLine instanceof String){
|
||||
nextPoint = (String) cacheLine;
|
||||
}
|
||||
if (cacheLine instanceof Map){
|
||||
//缓存线根据系列区分
|
||||
nextPoint = ((Map<String, String>) cacheLine).get(workprodure.get("spec"));
|
||||
}
|
||||
return nextPoint;
|
||||
}
|
||||
|
||||
;
|
||||
|
||||
public FlowElement getFlowElement(JSONObject task,Map<String,String> workprodure){
|
||||
if (CollectionUtils.isEmpty(workprodure)){
|
||||
@@ -109,7 +141,7 @@ public class AgvInstService {
|
||||
.eq("is_delete", "0")
|
||||
.eq("is_used", "1")
|
||||
);
|
||||
SchProcessRoute processRoute = schProcessRouteService.findByMaterialId(material_id,devicePoint.getRegion_code());
|
||||
SchProcessRoute processRoute = schProcessRouteService.findByMaterialId(devicePoint.getRegion_code());
|
||||
if (processRoute == null){
|
||||
throw new BadRequestException("当前没有配置对应工序调度线路:"+material_id+"/"+devicePoint.getRegion_code());
|
||||
}
|
||||
@@ -126,29 +158,22 @@ public class AgvInstService {
|
||||
//3.agv根据对应载具列表行进扫码匹配:匹配到对应物料则创建点对点任务
|
||||
public void empMatter(JSONObject task){
|
||||
//参数
|
||||
String targetDevice = task.getString("next_point_code");
|
||||
String material_id = task.getString("material_id");
|
||||
SchBasePoint devicePoint = basePointService.getOne(new QueryWrapper<SchBasePoint>()
|
||||
.eq("point_code", targetDevice)
|
||||
.eq("is_delete", "0")
|
||||
.eq("is_used", "1"));
|
||||
JSONObject cacheLine = WQLObject.getWQLObject("SCH_cacheLine_region_relation").query("region_code = '"+devicePoint.getRegion_code()+"' and is_active = '"+StatusEnum.STATUS_TRUE.getCode()+"'").uniqueResult(0);
|
||||
Assert.notNull(cacheLine, String.format("区域%s对应缓存线信息不存在", devicePoint.getRegion_code()));
|
||||
//缓存线位置编码 :缺料请求获取缓存线满载具列表
|
||||
String startPoint = cacheLine.getString("cacheline_code");
|
||||
String cacheVehile = getCacheVehile(startPoint, material_id);
|
||||
String startPoint = task.getString("cacheLine");
|
||||
String cacheVehile = getCacheVehile(startPoint, task.getString("material_id"));
|
||||
if (StringUtils.isBlank(cacheVehile)) {
|
||||
throw new BadRequestException("缓存线:"+startPoint+"没有物料"+material_id+"对应可用载具");
|
||||
throw new BadRequestException("缓存线:"+startPoint+"没有物料"+task.getString("material_id")+"对应可用载具");
|
||||
}
|
||||
//判断当前物料载具已经任务分配数量:如果>物料已经分配任务。说明满了,不允许再分配
|
||||
List<SchBaseTask> allocateTask = taskService.list(new QueryWrapper<SchBaseTask>().eq("point_code1", startPoint).eq("material_id", material_id).lt("task_status", StatusEnum.TASK_FINISH.getCode()));
|
||||
List<SchBaseTask> allocateTask = taskService.list(new QueryWrapper<SchBaseTask>().eq("point_code1", startPoint).eq("material_id", task.getString("material_id")).lt("task_status", StatusEnum.TASK_FINISH.getCode()));
|
||||
if (allocateTask.size()>=cacheVehile.split(",").length){
|
||||
log.error("callMatter 缓存线:{}上含有物料:{}的载具分配完,任务id:{}",startPoint,material_id,allocateTask.stream().map(SchBaseTask::getTask_id).collect(Collectors.joining(",")));
|
||||
throw new BadRequestException(String.format("缓存线%s上含物料%s的载具已分配完",startPoint,material_id));
|
||||
log.error("callMatter 缓存线:{}上含有物料:{}的载具分配完,任务id:{}",startPoint,task.getString("material_id"),allocateTask.stream().map(SchBaseTask::getTask_id).collect(Collectors.joining(",")));
|
||||
throw new BadRequestException(String.format("缓存线%s上含物料%s的载具已分配完",startPoint,task.getString("material_id")));
|
||||
}
|
||||
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
|
||||
schBaseTask.setVehicle_code(cacheVehile);
|
||||
schBaseTask.setBarcodeArr(cacheVehile);
|
||||
schBaseTask.setPoint_code1(startPoint);
|
||||
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());
|
||||
@@ -157,12 +182,14 @@ public class AgvInstService {
|
||||
}
|
||||
|
||||
public String getCacheVehile(String cacheLine,String materialId){
|
||||
int count = taskService.count(new QueryWrapper<SchBaseTask>().eq("point_code2", cacheLine).lt("task_status", StatusEnum.TASK_FINISH.getCode()));
|
||||
String status = StringUtils.isBlank(materialId) ? StatusEnum.CACHE_VEL_EMT.getCode() : StatusEnum.CACHE_VEL_FULL.getCode();
|
||||
List<SchCachelineVehicle> vehicle = cachelineVehicleService.getCachelineVehicle(MapOf.of("vehicle_status", status, "material_id", materialId));
|
||||
if (vehicle.size()>0){
|
||||
if (vehicle.size()>count){
|
||||
return vehicle.stream().map(SchCachelineVehicle::getVehicle_code).collect(Collectors.joining(","));
|
||||
if (StringUtils.isNotEmpty(cacheLine)){
|
||||
int count = taskService.count(new QueryWrapper<SchBaseTask>().eq("point_code2", cacheLine).lt("task_status", StatusEnum.TASK_FINISH.getCode()));
|
||||
String status = StringUtils.isBlank(materialId) ? StatusEnum.CACHE_VEL_EMT.getCode() : StatusEnum.CACHE_VEL_FULL.getCode();
|
||||
List<SchCachelineVehicle> vehicle = cachelineVehicleService.getCachelineVehicle(MapOf.of("vehicle_status", status, "material_id", materialId));
|
||||
if (vehicle.size()>0){
|
||||
if (vehicle.size()>count){
|
||||
return vehicle.stream().map(SchCachelineVehicle::getVehicle_code).collect(Collectors.joining(","));
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
|
||||
@@ -22,7 +22,10 @@ import org.nl.wms.masterdata_manage.master.service.classstandard.IMdPbClassstand
|
||||
import org.nl.wms.masterdata_manage.master.service.classstandard.dao.MdPbClassstandard;
|
||||
import org.nl.wms.masterdata_manage.master.service.classstandard.dto.MdPbClassstandardTree;
|
||||
import org.nl.wms.masterdata_manage.service.master.dao.mapper.MdPbClassstandardMapper;
|
||||
import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService;
|
||||
import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.masterdata_manage.备份master.service.dto.ClassstandardDto;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
@@ -41,7 +44,8 @@ import java.util.stream.Collectors;
|
||||
@Service
|
||||
public class MdPbClassstandardServiceImpl extends ServiceImpl<MdPbClassstandardMapper, MdPbClassstandard> implements IMdPbClassstandardService {
|
||||
|
||||
|
||||
@Autowired
|
||||
private IMdMeMaterialbaseService materialbaseService;
|
||||
@Override
|
||||
public List<Map> dropdownList(Map whereJson) {
|
||||
Assert.notNull(whereJson,"参数不能为空");
|
||||
@@ -110,9 +114,12 @@ public class MdPbClassstandardServiceImpl extends ServiceImpl<MdPbClassstandardM
|
||||
|
||||
@Override
|
||||
public List<Map> queryClassById(Map whereJson) {
|
||||
|
||||
QueryWrapper<MdPbClassstandard> query = new QueryWrapper<>();
|
||||
query.eq("1","1");
|
||||
if (ObjectUtil.isNotEmpty(whereJson.get("material_id"))) {
|
||||
MdMeMaterialbase one = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", whereJson.get("material_id")));
|
||||
whereJson.put("class_idStr",one.getMaterial_type_id());
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(whereJson.get("whereStr"))) {
|
||||
query.last((String) whereJson.get("whereStr"));
|
||||
}
|
||||
@@ -120,8 +127,9 @@ public class MdPbClassstandardServiceImpl extends ServiceImpl<MdPbClassstandardM
|
||||
query.eq("parent_class_id",whereJson.get("parent_class_id"));
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(whereJson.get("class_idStr"))) {
|
||||
query.last("and class_id in "+whereJson.get("class_idStr"));
|
||||
query.in("class_id",Arrays.asList(((String)whereJson.get("class_idStr")).split(",")));
|
||||
}
|
||||
|
||||
return getMaps(this.listMaps(query));
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
<mapper namespace="org.nl.wms.masterdata_manage.service.master.dao.mapper.MdPbClassstandardMapper">
|
||||
|
||||
<select id="getChildIdStr" resultType="java.lang.String">
|
||||
|
||||
select DISTINCT class_id
|
||||
from (
|
||||
select t1.class_id,
|
||||
if(find_in_set(parent_class_id, @pids) > 0, @pids := concat(@pids, ',', class_id), 0) as ischild
|
||||
from (
|
||||
select class_id,parent_class_id from md_pb_classstandard t where t.is_delete = '0' order by class_code
|
||||
) t1,
|
||||
(select @pids := #{class_id}) t2
|
||||
) t3 where ischild != 0
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.TableDataInfo;
|
||||
import org.nl.common.anno.Log;
|
||||
import org.nl.common.utils.api.ResultCode;
|
||||
import org.nl.modules.common.exception.BizCoreException;
|
||||
@@ -246,7 +247,7 @@ public class CacheLineHandController {
|
||||
public ResponseEntity<Object> check(@RequestBody JSONObject param) {
|
||||
log.info("海亮缓存线手持服务 [盘点] 接口被请求, 请求参数-{}", param);
|
||||
cacheLineHandService.check(param);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/checkEnd")
|
||||
@@ -255,7 +256,7 @@ public class CacheLineHandController {
|
||||
public ResponseEntity<Object> checkEnd(@RequestBody JSONObject param) {
|
||||
log.info("海亮缓存线手持服务 [盘点] 接口被请求, 请求参数-{}", param);
|
||||
cacheLineHandService.check(param);
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/agvInBoxExceptionQuery")
|
||||
|
||||
@@ -671,7 +671,6 @@ public class CacheLineHandServiceImpl implements CacheLineHandService {
|
||||
//载具编码
|
||||
String vehicle_code = param.getString("vehicle_code");
|
||||
//缓存线位置编码
|
||||
String position_code = param.getString("position_code");
|
||||
// 封装给acs的数据
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
package org.nl.wms.product_manage;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2023/5/17 12:26
|
||||
*/
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
public enum ReportRecordStatus {
|
||||
|
||||
CREATE("1","生成"),
|
||||
REPORT("2","报工"),
|
||||
FINISH("3","审核完成");
|
||||
|
||||
private String code;
|
||||
private String desc;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
@@ -15,6 +16,7 @@ import org.nl.common.utils.SecurityUtils;
|
||||
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.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.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@@ -92,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,5 +145,16 @@ public class PdmProduceWorkorderController {
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/reportQuery")
|
||||
@Log("报工数修改")
|
||||
@ApiOperation("报工数修改")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> reportQuery(@RequestBody ReportQuery param) {
|
||||
return new ResponseEntity<>(TableDataInfo.build(iPdmProduceWorkorderService.reportQuery(param)),HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
|
||||
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;
|
||||
@@ -72,6 +73,21 @@ public class ProduceshiftorderController{
|
||||
return new ResponseEntity<>(produceshiftorderService.getOrderList(param, page), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getOrderList2")
|
||||
@Log("一体机-工单作业清单")
|
||||
@ApiOperation("工单作业清单")
|
||||
public ResponseEntity<Object> getOrderList2(@RequestBody Map<String,String> param, Pageable page) {
|
||||
log.info("海亮一体机服务 [工单管理列表] 接口被请求, 请求参数-{}", param);
|
||||
if(null == param) {
|
||||
throw new BizCoreException(ResultCode.VALIDATE_FAILED);
|
||||
}
|
||||
/** @see org.nl.common.enums.WorkerOrderEnum */
|
||||
param.put("workorder_status","'2','3','4'");
|
||||
List<Map> list = iPdmProduceWorkorderService.getOrderList(param, page);
|
||||
return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/openStart")
|
||||
@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,15 +29,15 @@ 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,20 +1,20 @@
|
||||
|
||||
package org.nl.wms.product_manage.sch.rest;
|
||||
|
||||
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 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;
|
||||
@@ -22,7 +22,6 @@ import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author ldjun
|
||||
* @date 2021-08-19
|
||||
@@ -36,6 +35,8 @@ public class TaskController {
|
||||
|
||||
private final TaskService taskService;
|
||||
private final ISysDictService dictService;
|
||||
@Autowired
|
||||
private ISchBaseTaskService baseTaskService;
|
||||
|
||||
@GetMapping
|
||||
@Log("查询任务")
|
||||
@@ -113,7 +114,8 @@ public class TaskController {
|
||||
@ApiOperation("任务操作")
|
||||
//@PreAuthorize("@el.check('task:edit')")
|
||||
public ResponseEntity<Object> update(@RequestBody Map<String, Object> map) {
|
||||
taskService.operation(map);
|
||||
baseTaskService.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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,22 +2,33 @@ package org.nl.wms.product_manage.sch.tasks;
|
||||
|
||||
import cn.hutool.core.date.DateUnit;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
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;
|
||||
import org.nl.common.enums.StatusEnum;
|
||||
import org.nl.common.utils.BaseCode;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.modules.common.utils.StringUtils;
|
||||
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.slf4j.MDC;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.*;
|
||||
@@ -34,118 +45,67 @@ import java.util.stream.Collectors;
|
||||
public class TaskScheduleService {
|
||||
|
||||
private ReentrantLock lock = new ReentrantLock();
|
||||
private final WmsToAcsService wmsToAcsService;
|
||||
|
||||
@Scheduled(cron = "0/30 * * * * ?")
|
||||
private final WmsToAcsService wmsToAcsService;
|
||||
private final ISchBaseTaskService taskService;
|
||||
|
||||
|
||||
public void run(){
|
||||
MDC.put("requestMethod","TaskScheduleService#taskPublish");
|
||||
MDC.put("requestIp", "127.0.0.1");
|
||||
MDC.put("traceId", BaseCode.intToChars(IdUtil.getLongId()));
|
||||
MDC.put("requestTime", DateUtil.now());
|
||||
this.taskPublish();
|
||||
}
|
||||
@SneakyThrows
|
||||
// @Scheduled(cron = "0/30 * * * * ?")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void taskPublish(){
|
||||
boolean islock = lock.tryLock();
|
||||
try {
|
||||
if (islock){
|
||||
WQLObject taskTable = WQLObject.getWQLObject("sch_base_task");
|
||||
//查询所有自动下发的任务
|
||||
JSONArray all = taskTable.query("is_auto_issue = '1' and task_status < '" + StatusEnum.TASK_PUBLISH.getCode() + "'").getResultJSONArray(0);
|
||||
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<Object> iterator = all.iterator();
|
||||
while (iterator.hasNext()){
|
||||
JSONObject task = (JSONObject)iterator.next();
|
||||
if (task.getString("task_status").equals(StatusEnum.TASK_START_END_P.getCode())){
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
Class<?> clz = Class.forName(task.getString("handle_class"));
|
||||
Object obj = clz.newInstance();
|
||||
// 调用每个任务类的forceFinishInst()强制结束方法
|
||||
Method m = obj.getClass().getDeclaredMethod("pointConfirm", JSONObject.class, String.class);
|
||||
m.invoke(obj,task);
|
||||
task.put("task_type", StatusEnum.TASK_START_END_P.getCode());
|
||||
}catch (Exception ex){
|
||||
task.put("task_type", StatusEnum.TASK_START_ERROR.getCode());
|
||||
task.put("remark",ex.getMessage());
|
||||
task.put("update_time",DateUtil.now());
|
||||
taskTable.update(task);
|
||||
iterator.remove();
|
||||
if (pointConfirmList.size() > 0){
|
||||
log.info("定时调度——1111——确认点位:{}",pointConfirmList.stream().map(SchBaseTask::getTask_id).collect(Collectors.joining(",")));
|
||||
Iterator<SchBaseTask> iterator = pointConfirmList.iterator();
|
||||
while (iterator.hasNext()){
|
||||
SchBaseTask task =iterator.next();
|
||||
try {
|
||||
AbstractAcsTask taskHandler = (AbstractAcsTask)SpringContextHolder.getBean(Class.forName(task.getHandle_class()));
|
||||
taskHandler.pointConfirm((JSONObject) 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<Object>> areaCollent = all.stream().collect(Collectors.groupingBy(o -> ((JSONObject) o).getString("product_area")));
|
||||
log.info("定时调度——2222——准备下发任务:{}", JSON.toJSONString(all.stream().map(a->a.getTask_id()+"__"+a.getPoint_code1()+a.getPoint_code2()+a.getPoint_code3()).collect(Collectors.toList())));
|
||||
Map<String, List<SchBaseTask>> areaCollent = all.stream().collect(Collectors.groupingBy(SchBaseTask::getProduct_area));
|
||||
for (String area : areaCollent.keySet()) {
|
||||
List<Object> array = areaCollent.get(area);
|
||||
if (array.size()>0){
|
||||
String pointCollect = array.stream().map(o -> ((JSONObject) o).getString("point_code1") + "','" + ((JSONObject) o).getString("point_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<Object> notMerge = new ArrayList<>();//单独下发的任务
|
||||
List<Object> Merge = new ArrayList<>();//单独下发的任务
|
||||
List<Object> waitingTask = new ArrayList<>();//可合并,但是只有单条任务
|
||||
Map<String, String> taskGroupMap = array.stream().filter(a-> StringUtils.isNotEmpty(((JSONObject)a).getString("task_group_id"))).collect(HashMap::new, (k, v) -> k.put(((JSONObject)v).getString("task_id"), ((JSONObject)v).getString("task_group_id")), HashMap::putAll);
|
||||
|
||||
for (Object o : array) {
|
||||
String taskGroupId = IdUtil.getStringId();
|
||||
JSONObject task = (JSONObject) o;
|
||||
String taskId = task.getString("task_id");
|
||||
task.put("is_send","1");
|
||||
if (taskGroupMap.get(taskId) != null){
|
||||
task.put("task_group_id",taskGroupMap.get(taskId));
|
||||
task.put("is_send","0");
|
||||
Merge.add(task);
|
||||
continue;
|
||||
}
|
||||
String start = task.getString("point_code1");
|
||||
String end = task.getString("point_code2");
|
||||
taskGroupMap.put(taskId,taskGroupId);
|
||||
task.put("task_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<Object> needPublish = waitingTask.stream().filter(a -> DateUtil.between(new Date(),DateUtil.parseDateTime(((JSONObject)a).getString("create_time") ), DateUnit.MINUTE) >2 ).collect(Collectors.toList());
|
||||
notMerge.addAll(needPublish);
|
||||
}
|
||||
String notMergeID = notMerge.stream().map(a -> ((JSONObject) a).getString("task_id")).collect(Collectors.joining(","));
|
||||
String waitingTaskId = waitingTask.stream().map(a -> ((JSONObject) a).getString("task_id")).collect(Collectors.joining(","));
|
||||
String MergeId = Merge.stream().map(a -> ((JSONObject) a).getString("task_id")).collect(Collectors.joining(","));
|
||||
log.info("TaskScheduleService#taskPublish notMerge:{},waitingTask:{},merge:{}",notMergeID,waitingTaskId,MergeId);
|
||||
notMerge.forEach(a->{
|
||||
((JSONObject)a).put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NOBLE_SINGLE_TASK.getCode());
|
||||
});
|
||||
Merge.addAll(notMerge);
|
||||
JSONArray jsonArray = new JSONArray(Merge);
|
||||
//批量更新任务状态,is_send,task_group_id
|
||||
for (Object task : Merge) {
|
||||
JSONObject task1 = (JSONObject) task;
|
||||
task1.put("update_name","schedule");
|
||||
task1.put("update_time",DateUtil.now());
|
||||
taskTable.update(task1,"task_id = '"+task1.getString("task_id")+"'");
|
||||
}
|
||||
//缓存线任务待确认是否生成多个
|
||||
Map<String, Object> resp = wmsToAcsService.issueTaskToAcs(jsonArray);
|
||||
// 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());
|
||||
task.setTask_status(StatusEnum.TASK_PUBLISH.getCode());
|
||||
taskService.updateById(task);
|
||||
arr.add(JSONObject.toJSON(task));
|
||||
}
|
||||
log.info("定时调度——3333——下发任务:{}", JSON.toJSONString(Merge));
|
||||
Map<String, Object> resp = wmsToAcsService.issueTaskToAcs(arr);
|
||||
}
|
||||
}
|
||||
}finally {
|
||||
@@ -156,27 +116,4 @@ public class TaskScheduleService {
|
||||
}
|
||||
|
||||
|
||||
private String getMergePoint(Map<String, List<Object>> pointRegionCollent, String start,String end,List<Object> 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<Object> tasks, List<String> taskIds) {
|
||||
List<Object> objects = pointRegionCollent.get(start);
|
||||
JSONObject startPointInfo = (JSONObject) objects.get(0);
|
||||
String startPointCollent = startPointInfo.getString("pointcollent");
|
||||
String[] split = startPointCollent.split(",");
|
||||
for (String s : split) {
|
||||
Optional<Object> any = tasks.stream().filter(a -> ((JSONObject) a).getString("point_code1").equals(s) && !taskIds.contains(((JSONObject) a).getString("task_id"))).findAny();
|
||||
if (any.isPresent()){
|
||||
return ((JSONObject)any.get()).getString("task_id");
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -29,6 +29,11 @@ public class PdmBiDevice implements Serializable {
|
||||
@TableId(value = "device_code")
|
||||
private String device_code;
|
||||
|
||||
/**
|
||||
* 设备系列TW_15/TW_22:25/22
|
||||
*/
|
||||
private String spec;
|
||||
|
||||
/**
|
||||
* 设备名称
|
||||
*/
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
WHERE
|
||||
device.is_delete = '0'
|
||||
<if test="workprocedure_id != null and workprocedure_id != ''">
|
||||
device.workprocedure_id = #{workprocedure_id}
|
||||
and device.workprocedure_id = #{workprocedure_id}
|
||||
</if>
|
||||
and device.device_code not in (
|
||||
select o.device_code as device_code
|
||||
@@ -23,16 +23,16 @@
|
||||
GROUP_CONCAT(sch_base_task.task_id),
|
||||
pdm_bi_device.inupperlimit_qty - ifnull( sum( sch_base_task.material_qty ), 0 ) - pdm_bi_device.deviceinstor_qty AS currentQty,
|
||||
pdm_bi_device.device_code,
|
||||
sch_base_point.point_code,
|
||||
sch_base_point.point_code
|
||||
from sch_base_point
|
||||
left join pdm_bi_device on pdm_bi_device.device_code = sch_base_point.device_code
|
||||
left JOIN sch_base_task ON sch_base_point.point_code = point_code2 and '7' > task_status
|
||||
where
|
||||
sch_base_point.point_type = '4'
|
||||
and workprocedure_id = #{workprocedure_id}
|
||||
<if test="material_id != null and material_id != ''">
|
||||
and pdm_bi_device.material_id = #{material_id}
|
||||
</if>
|
||||
sch_base_point.point_type = '4' and pdm_bi_device.is_used = true and sch_base_point.lock_type = '0'
|
||||
and workprocedure_id = #{workprocedure_id}
|
||||
<if test="material_id != null and material_id != ''">
|
||||
and (pdm_bi_device.material_id = #{material_id} or pdm_bi_device.material_id is null )
|
||||
</if>
|
||||
GROUP BY pdm_bi_device.device_code
|
||||
HAVING currentQty > #{qty}
|
||||
</select>
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package org.nl.wms.product_manage.service.device.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import org.nl.common.domain.query.BaseQuery;
|
||||
import org.nl.common.domain.query.QParam;
|
||||
import org.nl.common.enums.QueryTEnum;
|
||||
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
|
||||
import org.nl.wms.system_manage.service.dept.dao.SysDept;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2022/12/15 4:20 下午
|
||||
*/
|
||||
@Data
|
||||
public class DeviceQuery extends BaseQuery<PdmBiDevice> {
|
||||
private String search;
|
||||
|
||||
private String workprocedure_id;
|
||||
|
||||
private String product_area;
|
||||
|
||||
|
||||
@Override
|
||||
public void paramMapping() {
|
||||
super.doP.put("search", QParam.builder().k(new String[]{"device_code"}).type(QueryTEnum.LK).build());
|
||||
}
|
||||
}
|
||||
@@ -4,13 +4,13 @@ import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.common.utils.OptionRecord;
|
||||
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);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 工单更换设备
|
||||
@@ -115,4 +127,7 @@ public interface IPdmProduceWorkorderService extends IService<PdmProduceWorkorde
|
||||
*/
|
||||
void replaceDevice(JSONObject param);
|
||||
|
||||
List<Map> reportQuery(ReportQuery query);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -2,6 +2,10 @@ package org.nl.wms.product_manage.service.workorder;
|
||||
|
||||
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
*/
|
||||
public interface IPdmProduceWorkorderrecordService extends IService<PdmProduceWorkorderrecord> {
|
||||
|
||||
List<Map> reportQuery(ReportQuery query);
|
||||
}
|
||||
|
||||
@@ -139,10 +139,10 @@ public class PdmProduceWorkorderrecord implements Serializable {
|
||||
|
||||
private String confirm_time;
|
||||
|
||||
/**
|
||||
* 校验状态唯一性
|
||||
*/
|
||||
private String md5;
|
||||
// /**
|
||||
// * 校验状态唯一性
|
||||
// */
|
||||
// private String md5;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
material.material_spec,
|
||||
pro.workprocedure_code,
|
||||
pro.workprocedure_name,
|
||||
user.person_name
|
||||
user.person_name as current_produce_person_name
|
||||
FROM
|
||||
PDM_produce_workOrder ShiftOrder
|
||||
left join md_me_materialbase material on material.material_id = ShiftOrder.material_id
|
||||
@@ -21,8 +21,8 @@
|
||||
<if test="query.workorder_code != null and query.workorder_code != ''">
|
||||
and ShiftOrder.workorder_code = #{query.workorder_code}
|
||||
</if>
|
||||
<if test="query.workorder_status != null and query.workorder_status != ''">
|
||||
and find_in_set(ShiftOrder.workorder_status, #{query.workorder_status})
|
||||
<if test="query.order_status != null and query.order_status != ''">
|
||||
and find_in_set(ShiftOrder.workorder_status, #{query.order_status})
|
||||
</if>
|
||||
<if test="query.shift_type_scode != null and query.shift_type_scode != ''">
|
||||
and ShiftOrder.shift_type_scode = #{query.shift_type_scode}
|
||||
@@ -71,6 +71,40 @@
|
||||
</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="workorder_status != null and workorder_status != ''">
|
||||
and workorder.workorder_status in ( ${workorder_status} )
|
||||
</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
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
package org.nl.wms.product_manage.service.workorder.dao.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -13,4 +18,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
*/
|
||||
public interface PdmProduceWorkorderrecordMapper extends BaseMapper<PdmProduceWorkorderrecord> {
|
||||
|
||||
List<Map> reportQuery(@Param("query")ReportQuery query);
|
||||
}
|
||||
|
||||
@@ -2,4 +2,32 @@
|
||||
<!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="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,
|
||||
mb.material_id,
|
||||
re.*
|
||||
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
|
||||
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 = #{query.device_code}
|
||||
</if>
|
||||
<if test="query.workorder_code != null and query.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}
|
||||
</if>
|
||||
<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>
|
||||
|
||||
@@ -18,8 +18,11 @@ public class ReportQuery {
|
||||
|
||||
private String device_code;
|
||||
private String workorder_code;
|
||||
private String workorder_id;
|
||||
private String report;
|
||||
private String start_time;
|
||||
private String end_time;
|
||||
private Boolean is_report =false;
|
||||
private String report_status;
|
||||
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ public class WorkorderQuery extends BaseQuery<PdmProduceWorkorder> {
|
||||
|
||||
private String workorder_code;
|
||||
private String material;
|
||||
private String workorder_status;
|
||||
private String order_status;
|
||||
private String workprocedure_code;
|
||||
private String sale_id;
|
||||
private String shift_type_scode;
|
||||
|
||||
@@ -14,6 +14,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.github.pagehelper.Page;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import io.jsonwebtoken.lang.Assert;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.nl.common.TableDataInfo;
|
||||
@@ -29,7 +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.ReportRecordStatus;
|
||||
import org.nl.wms.product_manage.ReportEnum;
|
||||
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;
|
||||
@@ -38,10 +39,13 @@ import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
|
||||
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord;
|
||||
import org.nl.wms.product_manage.service.workorder.dao.WorkorderRecord;
|
||||
import org.nl.wms.product_manage.service.workorder.dao.mapper.PdmProduceWorkorderMapper;
|
||||
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;
|
||||
@@ -63,6 +67,7 @@ import java.util.stream.Collectors;
|
||||
* @since 2023-04-26
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorkorderMapper, PdmProduceWorkorder> implements IPdmProduceWorkorderService {
|
||||
@Autowired
|
||||
private IMdPbClassstandardService classstandardService;
|
||||
@@ -86,7 +91,11 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
|
||||
.stream().collect(Collectors.joining("','"));
|
||||
query.setProduct_series("('" + collect + "')");
|
||||
}
|
||||
Page<Object> page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize());
|
||||
if (!StringUtils.isEmpty(query.getOrder_status()) && query.getOrder_status().contains("-1")){
|
||||
query.setOrder_status(query.getOrder_status().replaceAll("-1","1,2,3,4"));
|
||||
|
||||
}
|
||||
Page<Object> page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize()).setOrderBy("ShiftOrder.workorder_code desc");
|
||||
List result = pdmProduceWorkorderMapper.pageQuery(query);
|
||||
TableDataInfo build = TableDataInfo.build(result);
|
||||
build.setTotalElements(page.getTotal());
|
||||
@@ -179,9 +188,9 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
|
||||
String workorder_id = param.getJSONObject("row").getString("workorder_id");
|
||||
this.update(new UpdateWrapper<PdmProduceWorkorder>()
|
||||
.set("workorder_status", WorkerOrderEnum.FORCE_COMPLETE.getCode())
|
||||
.set("update_id", SecurityUtils.getCurrentUserId())
|
||||
.set("update_name", SecurityUtils.getCurrentNickName())
|
||||
.set("update_time", new Date())
|
||||
.set("confirm_id", SecurityUtils.getCurrentUserId())
|
||||
.set("confirm_name", SecurityUtils.getCurrentNickName())
|
||||
.set("confirm_time", new Date())
|
||||
.in("workorder_id", workorder_id));
|
||||
JSONArray array = new JSONArray();
|
||||
JSONObject map = new JSONObject();
|
||||
@@ -190,7 +199,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
|
||||
array.add(map);
|
||||
Map<String, Object> result = wmsToAcsService.orderStatusUpdate(array);
|
||||
if (!HttpStatus.OK.equals(result.get("status"))) {
|
||||
throw new BadRequestException((String) result.get("message"));
|
||||
log.error((String) result.get("message"));
|
||||
}
|
||||
this.recordWorkOrder(OptionRecord.OptionEnum.UPDATE, workorder_id);
|
||||
}
|
||||
@@ -509,7 +518,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
|
||||
//判断该工单状态
|
||||
PdmProduceWorkorder result = this.getOne(new QueryWrapper<PdmProduceWorkorder>()
|
||||
.eq("device_code", param.getString("device_code"))
|
||||
.in("workorder_status", "2", "3", "4")
|
||||
.in("workorder_status", "3", "4")
|
||||
.ne("workorder_id", param.getString("workorder_id")));
|
||||
if (ObjectUtil.isNotEmpty(result)) {
|
||||
throw new BadRequestException("已有工单选择该设备开工,请更换开工设备!");
|
||||
@@ -519,18 +528,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(String.valueOf(resp.get("message")));
|
||||
}
|
||||
workOrder.setRealproducestart_date(DateUtil.now());
|
||||
workOrder.setReal_qty(null);
|
||||
this.update(workOrder, new QueryWrapper<PdmProduceWorkorder>().eq("workorder_id", param.getString("workorder_id")));
|
||||
this.recordWorkOrder(OptionRecord.OptionEnum.UPDATE, result.getWorkorder_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")));
|
||||
@@ -563,7 +592,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
|
||||
throw new BadRequestException(param.getString("workorder_id") + "当前工单已经完工不允许报工");
|
||||
}
|
||||
PdmProduceWorkorderrecord one = reportRecordService.getOne(new QueryWrapper<PdmProduceWorkorderrecord>()
|
||||
.eq("workorder_id", param.getString("workorder_id")).eq("report_status", ReportRecordStatus.CREATE.getCode()));
|
||||
.eq("workorder_id", param.getString("workorder_id")).eq("report_status", ReportEnum.REPORT_STATUS.code("生成")));
|
||||
if (one == null) {
|
||||
throw new BadRequestException(param.getString("workorder_id") + "当前工单没有生成状态的报工记录");
|
||||
}
|
||||
@@ -573,13 +602,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();
|
||||
}
|
||||
@@ -597,10 +627,11 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
|
||||
for (Map.Entry<String, List<PdmProduceWorkorderrecord>> entry : collect.entrySet()) {
|
||||
List<PdmProduceWorkorderrecord> itemRecord = entry.getValue();
|
||||
itemRecord.forEach(item -> {
|
||||
item.setReport_status(ReportRecordStatus.FINISH.getCode());
|
||||
item.setReport_status(ReportEnum.REPORT_STATUS.code("报工审核"));
|
||||
item.setConfirm_id(SecurityUtils.getCurrentUserId());
|
||||
item.setConfirm_name(SecurityUtils.getCurrentNickName());
|
||||
item.setConfirm_time(DateUtil.now());
|
||||
item.setSeq_number(null);
|
||||
});
|
||||
List<Map> list = packageWorkorderQty(record, itemRecord);
|
||||
this.baseMapper.batchUpdateByParam(list, entry.getKey());
|
||||
@@ -613,13 +644,13 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
|
||||
private List<Map> packageWorkorderQty(List<PdmProduceWorkorderrecord> record, List<PdmProduceWorkorderrecord> itemRecord) {
|
||||
List<String> ids = itemRecord.stream().map(PdmProduceWorkorderrecord::getMacoperate_id).collect(Collectors.toList());
|
||||
List<PdmProduceWorkorderrecord> oldRecord = record.stream().filter(item -> ids.contains(item.getMacoperate_id())).collect(Collectors.toList());
|
||||
long old_nok_qty = oldRecord.stream().map(PdmProduceWorkorderrecord::getNok_qty).count();
|
||||
long new_nok_qty = itemRecord.stream().map(PdmProduceWorkorderrecord::getNok_qty).count();
|
||||
long old_repare_qty = oldRecord.stream().map(PdmProduceWorkorderrecord::getRepare_qty).count();
|
||||
long new_repare_qty = itemRecord.stream().map(PdmProduceWorkorderrecord::getRepare_qty).count();
|
||||
long old_report_qty = itemRecord.stream().map(PdmProduceWorkorderrecord::getReport_qty).count();
|
||||
long new_report_qty = itemRecord.stream().map(PdmProduceWorkorderrecord::getReport_qty).count();
|
||||
List<Map> list = new ArrayList<>();
|
||||
long old_nok_qty = oldRecord.stream().mapToLong(a->a.getNok_qty().longValue()).sum();
|
||||
long new_nok_qty = itemRecord.stream().mapToLong(a->a.getNok_qty().longValue()).sum();
|
||||
long old_repare_qty = oldRecord.stream().mapToLong(a->a.getRepare_qty().longValue()).sum();
|
||||
long new_repare_qty = itemRecord.stream().mapToLong(a->a.getRepare_qty().longValue()).sum();
|
||||
long old_report_qty = oldRecord.stream().mapToLong(a->a.getReport_qty().longValue()).sum();
|
||||
long new_report_qty = itemRecord.stream().mapToLong(a->a.getReport_qty().longValue()).sum();
|
||||
List<Map> list = new ArrayList<>();
|
||||
Map<String, Object> nok_qty = new HashMap<>();
|
||||
nok_qty.put("field", "nok_qty");
|
||||
nok_qty.put("value", Math.abs(new_nok_qty - old_nok_qty));
|
||||
@@ -637,7 +668,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
|
||||
list.add(report_qty);
|
||||
return list;
|
||||
}
|
||||
|
||||
//TODO:切换设备
|
||||
@Override
|
||||
public void replaceDevice(JSONObject param) {
|
||||
String produceorder_code = param.getString("produceorder_code");
|
||||
@@ -667,4 +698,47 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
|
||||
//this.update(produceshiftorderDto);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map> reportQuery(ReportQuery query) {
|
||||
Assert.notNull(query,"参数不能为空");
|
||||
if (query.getIs_report()){
|
||||
query.setReport_status("'1','2'");
|
||||
}
|
||||
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,11 +1,17 @@
|
||||
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;
|
||||
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderrecordService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 生产设备报工记录表 服务实现类
|
||||
@@ -17,4 +23,8 @@ import org.springframework.stereotype.Service;
|
||||
@Service
|
||||
public class PdmProduceWorkorderrecordServiceImpl extends ServiceImpl<PdmProduceWorkorderrecordMapper, PdmProduceWorkorderrecord> implements IPdmProduceWorkorderrecordService {
|
||||
|
||||
@Override
|
||||
public List<Map> reportQuery(ReportQuery query) {
|
||||
return this.baseMapper.reportQuery(query);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ public class SchedulerController {
|
||||
.or()
|
||||
.like("process_name", blurry)
|
||||
.or()
|
||||
.like("material_spec", blurry);
|
||||
.like("rule_code", blurry);
|
||||
}
|
||||
List<SchProcessRoute> list = processRouteService.list(query);
|
||||
return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK);
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.nl.wms.scheduler_manage.service.cacheline.dao.mapper.SchCachelineVehicleMapper">
|
||||
|
||||
<select id="getCachelineVehicle"
|
||||
resultType="org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehicle">
|
||||
SELECT
|
||||
v.vehicle_code,v.vehicle_status,v.material_id
|
||||
v.vehicle_code,v.vehicle_status,v.material_id
|
||||
FROM
|
||||
sch_cacheline_vehilematerial v
|
||||
sch_cacheline_vehilematerial v
|
||||
LEFT JOIN sch_cacheline_position p ON p.vehicle_code = v.vehicle_code
|
||||
WHERE p.vehicle_code != '' and
|
||||
v.vehicle_status = #{vehicle_status}
|
||||
WHERE p.vehicle_code <![CDATA[<>]]> '' and
|
||||
v.vehicle_status = #{vehicle_status}
|
||||
<if test="material_id != null and material_id != ''">
|
||||
v.material_id = #{material_id}
|
||||
and v.material_id = #{material_id}
|
||||
</if>
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -7,6 +7,7 @@ import org.nl.wms.product_manage.sch.service.dto.PointDto;
|
||||
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -46,4 +47,7 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
|
||||
*/
|
||||
Map findDeviceWorkprodure(String point_code);
|
||||
|
||||
|
||||
Map getWorkprodureById(String id);
|
||||
Map getWorkprodureByCode(String id);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package org.nl.wms.scheduler_manage.service.point.dao.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
|
||||
|
||||
import java.util.List;
|
||||
@@ -30,4 +31,7 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
|
||||
List<Map> selectPoint(Map<String,Object> map);
|
||||
|
||||
Map getDeviceWorkprodure(String pointCode);
|
||||
|
||||
Map getWorkprodure(@Param("workprodureId") String workprodureId, @Param("workprodureCode") String workprodureCode);
|
||||
|
||||
}
|
||||
|
||||
@@ -91,9 +91,19 @@
|
||||
</select>
|
||||
<select id="getDeviceWorkprodure" resultType="java.util.Map">
|
||||
select
|
||||
r.workprocedure_code,r.workprocedure_id from pdm_bi_device dev
|
||||
LEFT join sch_base_point p on p.device_code = dev.device_code
|
||||
LEFT JOIN pdm_bi_workprocedure r on dev.workprocedure_id = r.workprocedure_id
|
||||
where p.point_code = #{pointCode};
|
||||
r.workprocedure_code,r.workprocedure_id,dev.device_code,dev.spec from pdm_bi_device dev
|
||||
LEFT join sch_base_point p on p.device_code = dev.device_code
|
||||
LEFT JOIN pdm_bi_workprocedure r on dev.workprocedure_id = r.workprocedure_id
|
||||
where p.point_code = #{pointCode};
|
||||
</select>
|
||||
<select id="getWorkprodure" resultType="java.util.Map">
|
||||
select * from pdm_bi_workprocedure
|
||||
where
|
||||
<if test="workprodureId != null and workprodureId != ''">
|
||||
workprocedure_id = #{workprodureId}
|
||||
</if>
|
||||
<if test="workprodureCode != null and workprodureCode != ''">
|
||||
workprocedure_code = #{workprodureCode}
|
||||
</if>
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -148,4 +148,19 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map getWorkprodureById(String workprodureId) {
|
||||
if (StringUtils.isNotEmpty(workprodureId)){
|
||||
return this.baseMapper.getWorkprodure(workprodureId,null);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@Override
|
||||
public Map getWorkprodureByCode(String workprodureCode) {
|
||||
if (StringUtils.isNotEmpty(workprodureCode)){
|
||||
return this.baseMapper.getWorkprodure(null,workprodureCode);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.nl.wms.scheduler_manage.service.scheduler;
|
||||
|
||||
import org.nl.wms.scheduler_manage.service.scheduler.dao.SchProcessRoute;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl.FlowElement;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -13,5 +14,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
*/
|
||||
public interface ISchProcessRouteService extends IService<SchProcessRoute> {
|
||||
|
||||
SchProcessRoute findByMaterialId(String materialId,String regionCode);
|
||||
SchProcessRoute findByMaterialId(String ruleCode);
|
||||
|
||||
FlowElement checkWorkprodure(String workprodureCode,String ruleCode);
|
||||
}
|
||||
|
||||
@@ -2,14 +2,19 @@ package org.nl.wms.scheduler_manage.service.scheduler.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
|
||||
import org.nl.wms.scheduler_manage.service.scheduler.SchedulerService;
|
||||
import org.nl.wms.scheduler_manage.service.scheduler.dao.SchProcessRoute;
|
||||
import org.nl.wms.scheduler_manage.service.scheduler.dao.mapper.SchProcessRouteMapper;
|
||||
import org.nl.wms.scheduler_manage.service.scheduler.ISchProcessRouteService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl.FlowElement;
|
||||
import org.nl.wms.system_manage.service.param.ISysParamService;
|
||||
import org.nl.wms.system_manage.service.param.dao.Param;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -23,18 +28,26 @@ import org.springframework.stereotype.Service;
|
||||
public class SchProcessRouteServiceImpl extends ServiceImpl<SchProcessRouteMapper, SchProcessRoute> implements ISchProcessRouteService {
|
||||
|
||||
@Autowired
|
||||
ISysParamService iSysParamService;
|
||||
private ISysParamService iSysParamService;
|
||||
@Autowired
|
||||
private SchedulerService schedulerService;
|
||||
|
||||
@Override
|
||||
public SchProcessRoute findByMaterialId(String materialId, String regionCode) {
|
||||
public SchProcessRoute findByMaterialId(String ruleCode) {
|
||||
Param one = iSysParamService.getOne(new QueryWrapper<Param>().eq("code", "process_route"));
|
||||
String value = one.getValue();
|
||||
if (value.equals("1")){
|
||||
return this.getOne(new QueryWrapper<SchProcessRoute>().eq("rule_code",regionCode));
|
||||
return this.getOne(new QueryWrapper<SchProcessRoute>().eq("rule_code",ruleCode));
|
||||
}else {
|
||||
if (StringUtils.isNotEmpty(materialId)){
|
||||
return this.baseMapper.findByMaterialId(materialId);
|
||||
}
|
||||
return this.baseMapper.findByMaterialId(ruleCode);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public FlowElement checkWorkprodure(String workprodureCode,String ruleCode) {
|
||||
SchProcessRoute processRoute = this.findByMaterialId(ruleCode);
|
||||
if (processRoute != null){
|
||||
return schedulerService.currentFlow(processRoute.getProcess_id(), workprodureCode);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -237,6 +237,10 @@ public class SchBaseTask implements Serializable {
|
||||
* 修改时间
|
||||
*/
|
||||
private Date update_time;
|
||||
/**
|
||||
* 修改时间
|
||||
*/
|
||||
private String barcodeArr;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<definitions>
|
||||
<process id="JGXJ" name="机关下料">
|
||||
<start id="start" name="Starter" targetRef="A1_JGXJ"></start>
|
||||
<flow id="A1_JGXJ" name="机关下料工序" has="1" sourceRef="start" targetRef="A1_TWYTJ">
|
||||
<param id="cacheLine" value="A1_HCX_01"/>
|
||||
<process id="JGXL" name="机关下料">
|
||||
<start id="start" name="Starter" targetRef="A1_JGXL"></start>
|
||||
<flow id="A1_JGXL" name="机关下料工序" has="1" sourceRef="start" targetRef="A1_TWYTJ">
|
||||
<param id="cacheLine" has="2">
|
||||
<item spec="15" value="A1_HCX_01"></item>
|
||||
<item spec="22" value="A1_HCX_02"></item>
|
||||
</param>
|
||||
</flow>
|
||||
<flow id="A1_TWYTJ" name="推弯工序" has="1" sourceRef="A1_JGXJ" targetRef="A1_SKQX">
|
||||
<param id="cacheLine" value="A1_HCX_01"/>
|
||||
<flow id="A1_TWYTJ" name="推弯一体工序" sourceRef="A1_JGXL" targetRef="A1_SKQX">
|
||||
</flow>
|
||||
<flow id="A1_SKQX" name="深坑清洗" sourceRef="A1_TWYTJ" targetRef="end"></flow>
|
||||
<end id="end" name="Junior Reject End" sourceRef="A1_SKQX"></end>
|
||||
</process>
|
||||
<process id="WXXL" name="直管无屑下料">
|
||||
<start id="start" name="Starter" targetRef="A1_WXXL"></start>
|
||||
<flow id="A1_WXXL" name="无屑下料工序" has="3" sourceRef="starter" targetRef="A1_STLS">
|
||||
<param id="param1" value="param1"/>
|
||||
<param id="param2" value="param2"/>
|
||||
<param id="param3" value="param3"/>
|
||||
<flow id="A1_WXXL" name="无屑下料工序" has="1" sourceRef="starter" targetRef="A1_STLS">
|
||||
<param id="cacheLine" value="A1_HCX_03"/>
|
||||
</flow>
|
||||
<flow id="A1_STLS" name="三通拉伸工序" sourceRef="A1_WXXL" targetRef="A1_TK"></flow>
|
||||
<flow id="A1_TK" name="镗孔" sourceRef="A1_TK" targetRef="end"></flow>
|
||||
<flow id="A1_SKQX" name="深坑清洗" sourceRef="A1_TK" targetRef="end"></flow>
|
||||
<flow id="A1_TK" name="镗孔" sourceRef="A1_TK" targetRef="A1_SKQX"></flow>
|
||||
<flow id="A1_SKQX" name="深坑清洗" sourceRef="A1_STLS" targetRef="end"></flow>
|
||||
<end id="end" name="Junior Reject End" sourceRef="A1_SKQX"></end>
|
||||
</process>
|
||||
</definitions>
|
||||
|
||||
Reference in New Issue
Block a user