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>
|
||||
|
||||
@@ -12,21 +12,8 @@
|
||||
<el-form-item label="工单编码">
|
||||
<el-input v-model="form.workorder_code" style="width: 200px;" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所属工序">
|
||||
<el-select
|
||||
v-model="form.workprocedure_id"
|
||||
clearable
|
||||
size="mini"
|
||||
class="filter-item"
|
||||
style="width: 200px;"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in workprocedureList"
|
||||
:key="item.workprocedure_id"
|
||||
:label="item.workprocedure_name"
|
||||
:value="item.workprocedure_id"
|
||||
/>
|
||||
</el-select>
|
||||
<el-form-item label="所属工序" >
|
||||
<el-input v-model="form.workprocedure_name" style="width: 200px;" />
|
||||
</el-form-item>
|
||||
<el-form-item v-if="false" label="物料标识">
|
||||
<el-input v-model="form.material_id" style="width: 200px;" />
|
||||
@@ -99,6 +86,7 @@
|
||||
clearable
|
||||
filterable
|
||||
placeholder="请选择"
|
||||
@change="crud.toQuery"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in dict.PDM_BI_SHIFTTYPE"
|
||||
@@ -108,43 +96,37 @@
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="产品系列">
|
||||
<treeselect
|
||||
v-model="form.product_series"
|
||||
disabled
|
||||
:options="classes3"
|
||||
:auto-load-root-options="false"
|
||||
:load-options="loadChildNodes"
|
||||
style="width: 200px;"
|
||||
placeholder=""
|
||||
/>
|
||||
<el-form-item label="物料系列">
|
||||
<el-input v-model="form.class_name" style="width: 200px;" />
|
||||
</el-form-item>
|
||||
<el-form-item label="销售单标识">
|
||||
<el-input v-model="form.sale_id" style="width: 200px;" />
|
||||
</el-form-item>
|
||||
<el-form-item label="是否搬运">
|
||||
<el-radio
|
||||
v-for="item in dict.IS_OR_NOT"
|
||||
:key="item.id"
|
||||
v-model="form.is_needmove"
|
||||
:label="item.value"
|
||||
>{{ item.label }}
|
||||
</el-radio>
|
||||
<el-form-item label="是否搬运" prop="is_needmove" :formatter="formatBoolean" >
|
||||
<el-select
|
||||
v-model="form.is_needmove" style="width: 200px" clearable filterable >
|
||||
<el-option v-for="item in trueorfalse" :key="item.value" :label="item.label" :value="item.value"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="允许修改报工数量">
|
||||
<el-radio
|
||||
v-for="item in dict.IS_OR_NOT"
|
||||
:key="item.id"
|
||||
<el-select
|
||||
v-model="form.is_canupdate_update"
|
||||
:label="item.value"
|
||||
>{{ item.label }}
|
||||
</el-radio>
|
||||
style="width: 200px"
|
||||
clearable
|
||||
filterable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in trueorfalse"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<div class="crud-opts2" style="margin-top: 30px;margin-bottom: 15px">
|
||||
<span class="role-span">工单生产记录详情</span>
|
||||
<span class="role-span">工单报工记录详情</span>
|
||||
<span class="crud-opts-right2">
|
||||
<!--左侧插槽-->
|
||||
<slot name="left" />
|
||||
@@ -161,20 +143,30 @@
|
||||
:highlight-current-row="true"
|
||||
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
|
||||
>
|
||||
<el-table-column prop="device_code" label="设备编码" align="center" />
|
||||
<el-table-column prop="seq_number" label="顺序号" />
|
||||
<el-table-column prop="workorder_code" label="工单编号" />
|
||||
<el-table-column prop="shift_type_scode" label="班次类型" />
|
||||
<el-table-column prop="shift_type_scode" label="班次类型">
|
||||
<template slot-scope="scope">
|
||||
{{ dict.label.PDM_BI_SHIFTTYPE[scope.row.shift_type_scode] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="product_area" label="生产车间" />
|
||||
<el-table-column prop="device_name" label="设备名称" align="center" min-width="200" show-overflow-tooltip />
|
||||
<el-table-column prop="dq_init_qty" label="电气期初数量" />
|
||||
<el-table-column prop="person_init_qty" label="人员期初数量" />
|
||||
<el-table-column prop="dq_report_qty" label="电气报工数量" />
|
||||
<el-table-column prop="person_report_qty" label="人员报工数量" />
|
||||
<el-table-column prop="dq_finish_qty" label="电气期末数量" />
|
||||
<el-table-column prop="device_code" label="设备编码" align="center" />
|
||||
<el-table-column prop="needproduct_qty" label="待生产数" />
|
||||
<el-table-column prop="report_qty" label="报工数量" />
|
||||
<el-table-column prop="nok_qty" label="报废数量" />
|
||||
<el-table-column prop="repare_qty" label="报修数量" />
|
||||
<el-table-column prop="person_finish_qty" label="人员期末数量" />
|
||||
<el-table-column prop="operatetime_start" label="开工时间" />
|
||||
<el-table-column prop="operatetime_end" label="完工时间" />
|
||||
<el-table-column prop="nick_name" label="操作人" align="center" />
|
||||
<el-table-column prop="report_status" label="报工状态" >
|
||||
<template slot-scope="scope">
|
||||
{{ reportStatus[scope.row.report_status-1].label }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="produce_person_name" label="操作人" align="center" />
|
||||
<el-table-column prop="confirm_name" label="审核人" align="center" />
|
||||
<el-table-column prop="confirm_time" label="审核时间" align="center" />
|
||||
</el-table>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
@@ -187,14 +179,13 @@
|
||||
import { crud } from '@crud/crud'
|
||||
import crudWorkProcedure from '@/api/wms/basedata/pdm/workProcedure'
|
||||
import crudProduceshiftorder from '@/views/wms/product_manage/workorder/produceshiftorder'
|
||||
import Treeselect, { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect'
|
||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||
import crudClassstandard from '@/api/wms/basedata/master/classstandard'
|
||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||
|
||||
export default {
|
||||
name: 'ViewDialog',
|
||||
components: { Treeselect },
|
||||
dicts: ['PDM_BI_SHIFTTYPE', 'MPS_BD_ORDERSTATUS', 'is_used', 'PDM_BI_ORDERTYPE', 'IS_OR_NOT'],
|
||||
components: { },
|
||||
dicts: ['PDM_BI_SHIFTTYPE', 'MPS_BD_ORDERSTATUS', 'PDM_BI_ORDERTYPE' ],
|
||||
mixins: [crud()],
|
||||
props: {
|
||||
dialogShow: {
|
||||
@@ -211,9 +202,11 @@ export default {
|
||||
data() {
|
||||
return {
|
||||
dialogVisible: false,
|
||||
classes3: [],
|
||||
trueorfalse:[{value: true, label: '是' }, {value: false, label: '否'}],
|
||||
reportStatus:[{value: '1', label: '创建记录' }, {value: '2', label: '报工完成'}, {value: '3', label: '审核完成'}],
|
||||
form: {
|
||||
sale_id: null,
|
||||
class_name: null,
|
||||
workorder_id: null,
|
||||
workorder_code: null,
|
||||
producedeviceorder_code: null,
|
||||
@@ -263,77 +256,27 @@ export default {
|
||||
methods: {
|
||||
open() {
|
||||
this.getworkprocedure()
|
||||
this.initClass3()
|
||||
this.is_null()
|
||||
crudProduceshiftorder.getDtl({ workorder_id: this.form.workorder_id }).then(res => {
|
||||
this.tableData = res
|
||||
this.getMaterialClass()
|
||||
crudProduceshiftorder.reportQuery({ workorder_id: this.form.workorder_id }).then(res => {
|
||||
this.tableData = res.content
|
||||
})
|
||||
},
|
||||
is_null() {
|
||||
// 物料系列为空,新增
|
||||
if (!this.form.product_series) {
|
||||
this.form.product_series = null // 必须为null,否则会出现unknown
|
||||
} else { // 更新
|
||||
this.getSubTypes('03', this.form.product_series)
|
||||
formatBoolean: function(row, column) {
|
||||
alert(row)
|
||||
var ret = ''
|
||||
if (row[column.property] === true) {
|
||||
ret = '是' // 根据自己的需求设定
|
||||
} else {
|
||||
ret = '否'
|
||||
}
|
||||
return ret
|
||||
},
|
||||
getSubTypes(type, id) {
|
||||
const that = this
|
||||
crudClassstandard.getClassSuperior(id).then(res => {
|
||||
const data = res.content
|
||||
that.buildTree(data)
|
||||
if (type === '03') {
|
||||
that.classes3 = data
|
||||
}
|
||||
})
|
||||
},
|
||||
queryClassId() {
|
||||
getMaterialClass() {
|
||||
const param = {
|
||||
'class_idStr': this.class_idStr
|
||||
'material_id': this.form.material_id
|
||||
}
|
||||
crudClassstandard.queryClassById(param).then(res => {
|
||||
this.classes = res.content.map(obj => {
|
||||
if (obj.hasChildren) {
|
||||
obj.children = null
|
||||
}
|
||||
return obj
|
||||
})
|
||||
})
|
||||
},
|
||||
buildTree(classes) {
|
||||
classes.forEach(data => {
|
||||
if (data.children) {
|
||||
this.buildTree(data.children)
|
||||
}
|
||||
if (data.hasChildren && !data.children) {
|
||||
data.children = null // 重点代码
|
||||
}
|
||||
})
|
||||
},
|
||||
// 获取子节点数据
|
||||
loadChildNodes({ action, parentNode, callback }) {
|
||||
if (action === LOAD_CHILDREN_OPTIONS) {
|
||||
crudClassstandard.getClass({ pid: parentNode.id }).then(res => {
|
||||
parentNode.children = res.content.map(function(obj) {
|
||||
if (obj.hasChildren) {
|
||||
obj.children = null
|
||||
}
|
||||
return obj
|
||||
})
|
||||
setTimeout(() => {
|
||||
callback()
|
||||
}, 100)
|
||||
})
|
||||
}
|
||||
},
|
||||
initClass3() {
|
||||
const param = {
|
||||
parent_class_code: '07'
|
||||
}
|
||||
crudClassstandard.getClassType(param).then(res => {
|
||||
const data = res.content
|
||||
this.buildTree(data)
|
||||
this.classes3 = data
|
||||
this.form.class_name = res.content[0].class_name
|
||||
})
|
||||
},
|
||||
getworkprocedure() {
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="产品系列" style="height: 20px;">
|
||||
<el-form-item label="物料系列" style="height: 20px;">
|
||||
<treeselect
|
||||
v-model="query.product_series"
|
||||
:options="classes3"
|
||||
@@ -165,16 +165,6 @@
|
||||
>
|
||||
导入
|
||||
</el-button>
|
||||
<el-button
|
||||
slot="right"
|
||||
class="filter-item"
|
||||
type="success"
|
||||
icon="el-icon-printer"
|
||||
size="mini"
|
||||
@click="print"
|
||||
>
|
||||
打印
|
||||
</el-button>
|
||||
<el-button
|
||||
slot="right"
|
||||
class="filter-item"
|
||||
@@ -203,7 +193,7 @@
|
||||
type="success"
|
||||
icon="el-icon-position"
|
||||
size="mini"
|
||||
@click="report()"
|
||||
@click="report(crud.selections)"
|
||||
>
|
||||
报工审核
|
||||
</el-button>
|
||||
@@ -386,15 +376,17 @@
|
||||
<el-link type="warning" @click="toView(scope.row)">{{ scope.row.workorder_code }}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="shift_type_scode" label="班次类型">
|
||||
<el-table-column prop="workorder_status" label="工单状态">
|
||||
<template slot-scope="scope">
|
||||
{{ dict.label.PDM_BI_SHIFTTYPE[scope.row.shift_type_scode] }}
|
||||
{{ dict.label.MPS_BD_ORDERSTATUS[scope.row.workorder_status] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column prop="workprocedure_code" label="工序编码" />-->
|
||||
<el-table-column prop="product_area" label="生产车间" />
|
||||
<el-table-column prop="plan_qty" label="计划数量" />
|
||||
<el-table-column prop="real_qty" label="实际数量" />
|
||||
<el-table-column prop="real_qty" label="报工总数" />
|
||||
<el-table-column prop="nok_qty" label="报废总数" />
|
||||
<el-table-column prop="report_qty" label="报修总数" />
|
||||
<el-table-column prop="person_name" label="生产人员" />
|
||||
<el-table-column prop="person_real_qty" label="人员实际数量" width="100" show-overflow-tooltip />
|
||||
<el-table-column prop="dq_real_qty" label="电气实际数量" width="100" show-overflow-tooltip />
|
||||
@@ -406,19 +398,12 @@
|
||||
<el-table-column prop="realproducestart_date" label="实际开始时间" width="100" show-overflow-tooltip />
|
||||
<el-table-column prop="realproduceend_date" label="实际结束时间" width="100" show-overflow-tooltip />
|
||||
<el-table-column prop="device_code" label="当前设备编码" width="100" show-overflow-tooltip />
|
||||
<el-table-column prop="is_canupdate_update" label="操作工是否允许修改报工数量" width="200" show-overflow-tooltip>
|
||||
<el-table-column prop="is_canupdate_update" label="允许修改报工数" :formatter="formatBoolean" width="200" show-overflow-tooltip>
|
||||
</el-table-column>
|
||||
<el-table-column prop="is_needmove" label="是否搬运" :formatter="formatBoolean" />
|
||||
<el-table-column prop="shift_type_scode" label="班次类型">
|
||||
<template slot-scope="scope">
|
||||
{{ dict.label.IS_OR_NOT[scope.row.is_canupdate_update] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="workorder_status" label="工单状态">
|
||||
<template slot-scope="scope">
|
||||
{{ dict.label.MPS_BD_ORDERSTATUS[scope.row.workorder_status] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="is_needmove" label="是否搬运">
|
||||
<template slot-scope="scope">
|
||||
{{ dict.label.IS_OR_NOT[scope.row.is_needmove] }}
|
||||
{{ dict.label.PDM_BI_SHIFTTYPE[scope.row.shift_type_scode] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="create_type" label="创建类型" show-overflow-tooltip>
|
||||
@@ -426,17 +411,16 @@
|
||||
{{ dict.label.WORKORDER_CREATE_TYPE[scope.row.create_type] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="is_error" label="是否异常">
|
||||
<template slot-scope="scope">
|
||||
{{ dict.label.IS_OR_NOT[scope.row.is_error] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="is_error" :formatter="formatBoolean" label="是否异常"></el-table-column>
|
||||
<el-table-column prop="error_info" label="异常信息" show-overflow-tooltip />
|
||||
<el-table-column prop="remark" label="备注" />
|
||||
<el-table-column prop="current_produce_person_name" label="操作工" show-overflow-tooltip />
|
||||
<el-table-column prop="create_name" label="创建人" show-overflow-tooltip />
|
||||
<el-table-column prop="create_time" label="创建时间" show-overflow-tooltip />
|
||||
<el-table-column prop="update_name" label="修改人" show-overflow-tooltip />
|
||||
<el-table-column prop="update_time" label="修改时间" show-overflow-tooltip />
|
||||
<el-table-column prop="down_name" label="下发人" show-overflow-tooltip />
|
||||
<el-table-column prop="down_time" label="下发时间" show-overflow-tooltip />
|
||||
<el-table-column prop="confirm_name" label="完工人" show-overflow-tooltip />
|
||||
<el-table-column prop="confirm_time" label="完工时间" show-overflow-tooltip />
|
||||
<el-table-column v-permission="[]" label="操作" width="120px" align="center" fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<udOperation
|
||||
@@ -456,7 +440,7 @@
|
||||
@setMaterValue="setMaterValue"
|
||||
/>
|
||||
<ViewDialog ref="child3" />
|
||||
<reportDialog ref="report" />
|
||||
<reportDialog ref="report" @AddChanged="querytable" />
|
||||
<UploadDialog :dialog-show.sync="uploadShow" @tableChanged3="tableChanged3" />
|
||||
<AddDialog :dialog-show.sync="addShow" @AddChanged="querytable" />
|
||||
<ReplaceDeviceDialog ref="child4" @AddChanged="querytable" />
|
||||
@@ -480,8 +464,6 @@ import crudClassstandard from '@/api/wms/basedata/master/classstandard'
|
||||
import AddDialog from '@/views/wms/product_manage/workorder/AddDialog'
|
||||
import UploadDialog from '@/views/wms/product_manage/workorder/UploadDialog'
|
||||
import ReplaceDeviceDialog from '@/views/wms/product_manage/workorder/ReplaceDeviceDialog'
|
||||
import orderExt from '@/views/wms/product_manage/workorder/orderExt'
|
||||
import {getLodop} from '@/assets/js/lodop/LodopFuncs'
|
||||
|
||||
const defaultForm = {
|
||||
workorder_id: null,
|
||||
@@ -522,7 +504,7 @@ const defaultForm = {
|
||||
}
|
||||
export default {
|
||||
name: 'Produceshiftorder',
|
||||
components: { AddDialog, pagination, crudOperation, rrOperation, udOperation, MaterDtl, Treeselect, ViewDialog,reportDialog, UploadDialog, ReplaceDeviceDialog },
|
||||
components: { AddDialog, pagination, crudOperation, rrOperation, udOperation, MaterDtl, Treeselect, ViewDialog, reportDialog, UploadDialog, ReplaceDeviceDialog },
|
||||
mixins: [presenter(), header(), form(defaultForm), crud()],
|
||||
dicts: ['PDM_BI_SHIFTTYPE', 'MPS_BD_ORDERSTATUS', 'WORKORDER_CREATE_TYPE', 'is_used', 'PDM_BI_ORDERTYPE', 'IS_OR_NOT', 'product_area'],
|
||||
cruds() {
|
||||
@@ -598,6 +580,15 @@ export default {
|
||||
this.initClass3()
|
||||
},
|
||||
methods: {
|
||||
formatBoolean: function(row, column) {
|
||||
var ret = ''
|
||||
if (row[column.property] === true) {
|
||||
ret = '是' // 根据自己的需求设定
|
||||
} else {
|
||||
ret = '否'
|
||||
}
|
||||
return ret
|
||||
},
|
||||
tableChanged3() {
|
||||
this.crud.toQuery()
|
||||
},
|
||||
@@ -642,38 +633,6 @@ export default {
|
||||
const day = d.getDate() < 10 ? '0' + d.getDate() : d.getDate()
|
||||
return [year, month, day].join('-') + ' ' + ['18', '30', '00'].join(':')
|
||||
},
|
||||
print() {
|
||||
debugger
|
||||
if (this.crud.selections.length <= 0 || this.crud.selections.length > 1) {
|
||||
this.$message('请选择一条工单进行打印!')
|
||||
return
|
||||
}
|
||||
let a = this.crud.selections[0]
|
||||
orderExt.getExtList(a).then(res => {
|
||||
if (res.length == 0 || !res) {
|
||||
this.crud.notify('该工单需要打印的箱数为0', CRUD.NOTIFICATION_TYPE.INFO)
|
||||
return
|
||||
}
|
||||
res.forEach((item) => {
|
||||
const LODOP = getLodop()
|
||||
LODOP.SET_SHOW_MODE('HIDE_DISBUTTIN_SETUP', 1)// 隐藏那些无效按钮
|
||||
// 打印纸张大小设置https://www.it610.com/article/2094844.html
|
||||
LODOP.SET_PRINT_PAGESIZE(1, '80mm', '50mm', '')
|
||||
// LODOP.ADD_PRINT_RECT('0mm', '0mm', '48mm', '28mm', 0, 1)
|
||||
LODOP.ADD_PRINT_BARCODE('10mm', '12mm', '60mm', '25mm', '128Auto', item.bar_code)
|
||||
LODOP.SET_PRINT_STYLEA(0, 'ShowBarText', 0)
|
||||
LODOP.ADD_PRINT_TEXT('35mm', '22mm', '40mm', '20mm', item.bar_code.substring(0, 9))
|
||||
LODOP.SET_PRINT_STYLEA(0, 'FontSize', 20)
|
||||
LODOP.ADD_PRINT_TEXT('42mm', '25mm', '40mm', '20mm', item.bar_code.substring(9, 16))
|
||||
console.log(item.barcode)
|
||||
LODOP.SET_PRINT_STYLEA(0, 'FontSize', 20)
|
||||
LODOP.PRINT()// 打印
|
||||
// LODOP.PREVIEW()
|
||||
})
|
||||
this.crud.notify('打印成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
|
||||
})
|
||||
this.crud.toQuery()
|
||||
},
|
||||
queryClassId() {
|
||||
const param = {
|
||||
'class_idStr': this.class_idStr
|
||||
@@ -743,8 +702,8 @@ export default {
|
||||
}
|
||||
},
|
||||
// 查看
|
||||
report() {
|
||||
this.$refs.report.setForm()
|
||||
report(row) {
|
||||
this.$refs.report.setForm(row[0])
|
||||
},
|
||||
// 强制完成
|
||||
forceFinish(rows) {
|
||||
@@ -788,7 +747,9 @@ export default {
|
||||
return true
|
||||
}
|
||||
},
|
||||
|
||||
close() {
|
||||
this.$emit('AddChanged')
|
||||
},
|
||||
// 强制完成禁用条件
|
||||
is_finished(rows) {
|
||||
var length = rows.length
|
||||
|
||||
@@ -103,9 +103,9 @@ export function getReportWork(data) {
|
||||
})
|
||||
}
|
||||
|
||||
export function getDtl(data) {
|
||||
export function reportQuery(data) {
|
||||
return request({
|
||||
url: 'api/produceWorkorder/getDtl',
|
||||
url: '/api/produceWorkorder/reportQuery',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
@@ -134,5 +134,12 @@ export function replaceDevice(data) {
|
||||
data
|
||||
})
|
||||
}
|
||||
export function reportApprove(data) {
|
||||
return request({
|
||||
url: '/api/produceWorkorder/reportApprove',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export default { add, addRows, edit, del, submits, unSubmits, getTable, openStart, saveReport, finish, getReportWork, forceFinish, getDtl, excelImport, getNotWorkDeviceByWorkproceduceId, replaceDevice }
|
||||
export default { add, addRows, edit, del, submits, reportApprove, unSubmits, getTable, openStart, saveReport, finish, getReportWork, forceFinish, reportQuery, excelImport, getNotWorkDeviceByWorkproceduceId, replaceDevice }
|
||||
|
||||
@@ -10,18 +10,18 @@
|
||||
<el-card class="box-card" shadow="never">
|
||||
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="mini" label-width="180px">
|
||||
<el-form-item label="工单编码">
|
||||
<el-input v-model="form.workorder_code" style="width: 200px;" />
|
||||
<el-input v-model="form.workorder_code" style="width: 200px;" clearable/>
|
||||
</el-form-item>
|
||||
<el-form-item label="只显示未审核">
|
||||
<el-switch
|
||||
v-model="form.is_report"
|
||||
active-color="#409EFF"
|
||||
inactive-color="#F56C6C"
|
||||
active-value="true"
|
||||
inactive-valu="false"
|
||||
active-value='true'
|
||||
inactive-valu='false'
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-dropdown split-button type="primary" class="filter-item" @click>
|
||||
<el-dropdown split-button type="primary" class="filter-item" @click="report()">
|
||||
<i class="el-icon-search el-icon--left" />查询
|
||||
</el-dropdown>
|
||||
</el-form>
|
||||
@@ -40,26 +40,57 @@
|
||||
ref="table"
|
||||
:data="tableData"
|
||||
style="width: 100%;"
|
||||
max-height="300"
|
||||
max-height="600"
|
||||
border
|
||||
:highlight-current-row="true"
|
||||
:header-cell-style="{background:'#f5f7fa',color:'#606266'}"
|
||||
>
|
||||
<el-table-column prop="device_code" label="设备编码" align="center" />
|
||||
<el-table-column prop="workorder_code" label="工单编号" />
|
||||
<el-table-column prop="shift_type_scode" label="班次类型" />
|
||||
<el-table-column prop="seq_number" label="报工顺序号" />
|
||||
<el-table-column prop="shift_type_scode" label="班次类型">
|
||||
<template slot-scope="scope">
|
||||
{{ dict.label.PDM_BI_SHIFTTYPE[scope.row.shift_type_scode] }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="product_area" label="生产车间" />
|
||||
<el-table-column prop="device_name" label="设备名称" align="center" min-width="200" show-overflow-tooltip />
|
||||
<el-table-column prop="dq_init_qty" label="电气期初数量" />
|
||||
<el-table-column prop="person_init_qty" label="人员期初数量" />
|
||||
<el-table-column prop="dq_report_qty" label="电气报工数量" />
|
||||
<el-table-column prop="person_report_qty" label="人员报工数量" />
|
||||
<el-table-column prop="dq_finish_qty" label="电气期末数量" />
|
||||
<el-table-column prop="device_code" label="设备编码" align="center" />
|
||||
<el-table-column prop="needproduct_qty" label="待生产数" />
|
||||
<el-table-column prop="report_qty" label="报工数量" >
|
||||
<template slot-scope="scope">
|
||||
<el-input v-model = scope.row.report_qty></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="nok_qty" label="报废数量" >
|
||||
<template slot-scope="scope">
|
||||
<el-input v-model = scope.row.nok_qty></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="repare_qty" label="报修数量" >
|
||||
<template slot-scope="scope">
|
||||
<el-input v-model = scope.row.repare_qty></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="person_finish_qty" label="人员期末数量" />
|
||||
<el-table-column prop="operatetime_start" label="开工时间" />
|
||||
<el-table-column prop="operatetime_end" label="完工时间" />
|
||||
<el-table-column prop="nick_name" label="操作人" align="center" />
|
||||
<el-table-column prop="report_status" label="报工状态" >
|
||||
<template slot-scope="scope">
|
||||
{{ reportStatus[scope.row.report_status-1].label }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="produce_person_name" label="操作人" align="center" />
|
||||
<el-table-column prop="confirm_name" label="审核人" align="center" />
|
||||
<el-table-column prop="confirm_time" label="审核时间" align="center" />
|
||||
<el-table-column label="操作" width="120px" align="center" fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button :disabled="scope.row.report_status !=='1'" size="mini" style="margin-left: -1px;margin-right: 2px" type="text" @click="reportApprove(scope.row)">提交审核</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<!--分页组件-->
|
||||
<!-- <pagination />-->
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="dialogVisible = false">确定</el-button>
|
||||
@@ -68,7 +99,6 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { crud } from '@crud/crud'
|
||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
|
||||
import crudProduceshiftorder from '@/views/wms/product_manage/workorder/produceshiftorder'
|
||||
|
||||
@@ -76,7 +106,7 @@ export default {
|
||||
name: 'ViewDialog',
|
||||
components: { },
|
||||
dicts: ['PDM_BI_SHIFTTYPE', 'MPS_BD_ORDERSTATUS', 'is_used', 'PDM_BI_ORDERTYPE', 'IS_OR_NOT'],
|
||||
mixins: [crud()],
|
||||
mixins: [],
|
||||
props: {
|
||||
dialogShow: {
|
||||
type: Boolean,
|
||||
@@ -92,9 +122,11 @@ export default {
|
||||
data() {
|
||||
return {
|
||||
dialogVisible: false,
|
||||
classes3: [],
|
||||
trueorfalse: [{ value: true, label: '是' }, { value: false, label: '否' }],
|
||||
reportStatus: [{ value: '1', label: '创建记录' }, { value: '2', label: '报工完成' }, { value: '3', label: '审核完成' }],
|
||||
form: {
|
||||
sale_id: null,
|
||||
is_report: null,
|
||||
workorder_id: null,
|
||||
workorder_code: null,
|
||||
producedeviceorder_code: null,
|
||||
@@ -142,13 +174,26 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
close() {
|
||||
this.$emit('AddChanged')
|
||||
},
|
||||
open() {
|
||||
// this.getworkprocedure()
|
||||
// this.initClass3()
|
||||
// this.is_null()
|
||||
// crudProduceshiftorder.getDtl({ workorder_id: this.form.workorder_id }).then(res => {
|
||||
// this.tableData = res
|
||||
// })
|
||||
crudProduceshiftorder.reportQuery({ workorder_code: this.form.workorder_code }).then(res => {
|
||||
this.tableData = res.content
|
||||
})
|
||||
},
|
||||
report() {
|
||||
crudProduceshiftorder.reportQuery({ workorder_code: this.form.workorder_code, is_report: this.form.is_report }).then(res => {
|
||||
this.tableData = res.content
|
||||
})
|
||||
},
|
||||
reportApprove(data) {
|
||||
const arr = []
|
||||
arr.push(data)
|
||||
crudProduceshiftorder.reportApprove(arr).then(res => {
|
||||
this.tableData = res.content
|
||||
this.report()
|
||||
})
|
||||
},
|
||||
setForm() {
|
||||
this.dialogVisible = true
|
||||
|
||||
Reference in New Issue
Block a user