rev:冲突处理

This commit is contained in:
zhangzhiqiang
2023-05-29 12:15:59 +08:00
parent 5ef00cf5ce
commit 9ae43259e3
45 changed files with 882 additions and 585 deletions

View File

@@ -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不称重任务刻字-包装)"),

View File

@@ -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;
}

View File

@@ -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());

View File

@@ -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 "";

View File

@@ -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));
}

View File

@@ -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>

View File

@@ -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")

View File

@@ -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();

View File

@@ -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;
}

View File

@@ -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);
}
}

View File

@@ -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("看板开工")

View File

@@ -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<>();
};
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
/**
* 设备名称
*/

View File

@@ -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>

View File

@@ -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());
}
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -139,10 +139,10 @@ public class PdmProduceWorkorderrecord implements Serializable {
private String confirm_time;
/**
* 校验状态唯一性
*/
private String md5;
// /**
// * 校验状态唯一性
// */
// private String md5;
}

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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>

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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")));
}
}

View File

@@ -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);
}
}

View File

@@ -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);

View File

@@ -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>

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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>

View File

@@ -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;
}
}

View File

@@ -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);
}

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -237,6 +237,10 @@ public class SchBaseTask implements Serializable {
* 修改时间
*/
private Date update_time;
/**
* 修改时间
*/
private String barcodeArr;
}

View File

@@ -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;
}
}
}

View File

@@ -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>