rev:刻字后端代码

This commit is contained in:
zhangzhiqiang
2023-07-03 14:28:32 +08:00
parent ec0fd6cd53
commit 128272a27d
28 changed files with 277 additions and 636 deletions

View File

@@ -281,17 +281,17 @@
</dependency>
<!-- 解析客户端操作系统、浏览器信息 -->
<dependency>
<groupId>nl.basjes.parse.useragent</groupId>
<artifactId>yauaa</artifactId>
<version>5.23</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>nl.basjes.parse.useragent</groupId>-->
<!-- <artifactId>yauaa</artifactId>-->
<!-- <version>5.23</version>-->
<!-- </dependency>-->
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>1.21</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>eu.bitwalker</groupId>-->
<!-- <artifactId>UserAgentUtils</artifactId>-->
<!-- <version>1.21</version>-->
<!-- </dependency>-->
<!--WQL-->
<dependency>

View File

@@ -28,9 +28,8 @@ public enum AcsTaskEnum {
TASK_PRODUCT_WASH("3","专机-深坑任务"),
//3个点任务编号缓存线满料载具列表
TASK_CACHELINE_OUT("4","缓存线-专机缺料任务"),
TASK_PLOTTER_MAC("5","刻字机-满料入库"),
TASK_PLOTTER_EMPTY("6","刻字机-呼叫空框"),
TASK_PLOTTER_CALL_MATERIAL("14","刻字机-叫料请求"),
TASK_PLOTTER_MAC("5","刻字机-满料入库"),//判断是否铁料框(否的话: 不处理人工处理跟acs反馈sucess)
TASK_PLOTTER_EMPTY("6","刻字机-呼叫空框"),//判断是否铁料框(否的话: 不处理人工处理跟acs反馈sucess):一体机加一个呼叫空框请求功能
TASK_WARP_MAC("7","包装机-叫料出库"),
TASK_WARP_EMPTY("8","包装机-送空框"),
TASK_STRUCT_IN("9","入库-半成品-生产入库"),
@@ -41,7 +40,11 @@ public enum AcsTaskEnum {
TASK_STRUCT_BCP_EMPOUT("17","半成品-空托盘出库"),
TASK_STRUCT_CP_IN("11","入库-成品-生产入库"),
TASK_STRUCT_CP_OUT("12","出库-成品-生产出库"),
TASK_STRUCT_CP_CHECK("13","成品-盘点"),
TASK_STRUCT_CP_CHECK("13","-盘点"),
TASK_WASH_LACK("20","清洗机-缺料请求"),
TASK_WASH_EMP("21","清洗机-空叫空框"),
TASK_WASH_FULL_AUTO("22","清洗机-满料请求自动"),//去半成品入库:参数不全也去异常处理位
TASK_WASH_FULL_QZ("23","清洗机-满料请求强制"),//去异常位:
//回调状态
STATUS_START("1","执行中"),
@@ -52,11 +55,13 @@ public enum AcsTaskEnum {
REQUEST_CALLTYPE_EMP("1","专机缺料请求"),
REQUEST_PLOTTER_SEND_FULL("3","刻字满料请求"),
REQUEST_PLOTTER_CALL_EMP("4","刻字空框请求"),
REQUEST_PLOTTER_CALL_MATERIAL("9","刻字叫料请求"),//由mes下发
REQUEST_WARP_CALL_FULL("5","包装缺料请求"),
REQUEST_WARP_SEND_EMP("6","包装送空框请求"),
REQUEST_WASH_EMP("7","清洗机器缺料请求"),
REQUEST_WASH_FULL("8","清洗机器满料请求"),
REQUEST_WASH_LACK("7","清洗机器缺料请求"),//深坑->清洗:相同物料的重量<150公斤
REQUEST_WASH_EMP("8","清洗机器空框请求"),//清洗机下料位
REQUEST_WASH_FULL("9","清洗机器满料请求"),//清洗机满料请求
REQUEST_WASH_FULL_ERROR("10","清洗机-满料异常请求"),//去半成品入库
//

View File

@@ -19,11 +19,8 @@ import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import nl.basjes.parse.useragent.UserAgent;
import nl.basjes.parse.useragent.UserAgentAnalyzer;
import org.nl.modules.common.config.ElAdminProperties;
import org.nl.modules.common.utils.ElAdminConstant;
import org.nl.modules.wql.util.SpringContextHolder;
import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
@@ -47,12 +44,12 @@ public class StringUtils {
* 注入bean
*/
private static final UserAgentAnalyzer USER_AGENT_ANALYZER = UserAgentAnalyzer
.newBuilder()
.hideMatcherLoadStats()
.withCache(10000)
.withField(UserAgent.AGENT_NAME_VERSION)
.build();
// private static final UserAgentAnalyzer USER_AGENT_ANALYZER = UserAgentAnalyzer
// .newBuilder()
// .hideMatcherLoadStats()
// .withCache(10000)
// .withField(UserAgent.AGENT_NAME_VERSION)
// .build();
/**
* 驼峰命名法工具
@@ -198,8 +195,9 @@ public class StringUtils {
public static String getBrowser(HttpServletRequest request) {
UserAgent.ImmutableUserAgent userAgent = USER_AGENT_ANALYZER.parse(request.getHeader("User-Agent"));
return userAgent.get(UserAgent.AGENT_NAME_VERSION).getValue();
// UserAgent.ImmutableUserAgent userAgent = USER_AGENT_ANALYZER.parse(request.getHeader("User-Agent"));
// return userAgent.get(UserAgent.AGENT_NAME_VERSION).getValue();
return "default";
}
/**

View File

@@ -11,7 +11,6 @@ import org.nl.wms.product_manage.sch.tasks.WashMachineryTask;
import org.nl.wms.product_manage.sch.tasks.callEmpty.PlotterCallEmptyTask;
import org.nl.wms.product_manage.sch.tasks.callMaterial.WrapCallMaterialTask;
import org.nl.wms.product_manage.sch.tasks.sendEmpty.WrapSendEmptyTask;
import org.nl.wms.product_manage.sch.tasks.callMaterial.PlotterCallMaterialTask;
import org.nl.wms.product_manage.sch.tasks.sendMaterial.PlotterSendMaterialTask;
import org.springframework.context.SmartLifecycle;
import org.springframework.context.annotation.Configuration;
@@ -25,10 +24,10 @@ public class ConventConfig implements SmartLifecycle {
public void start() {
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_CALLTYPE_FULL, SpringContextHolder.getBean(SpeFullTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_CALLTYPE_EMP, SpringContextHolder.getBean(SpeEmpTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_EMP, SpringContextHolder.getBean(WashMachineryTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_LACK, SpringContextHolder.getBean(WashMachineryTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_PLOTTER_SEND_FULL, SpringContextHolder.getBean(PlotterSendMaterialTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_PLOTTER_CALL_EMP, SpringContextHolder.getBean(PlotterCallEmptyTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_PLOTTER_CALL_MATERIAL, SpringContextHolder.getBean(PlotterCallMaterialTask.class));
// AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_PLOTTER_CALL_MATERIAL, SpringContextHolder.getBean(EngraveCallMaterialTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WARP_CALL_FULL, SpringContextHolder.getBean(WrapCallMaterialTask.class));
AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WARP_SEND_EMP, SpringContextHolder.getBean(WrapSendEmptyTask.class));
System.out.println("初始化Task_Collent完成777"+AcsToWmsServiceImpl.Task_Collent.size());

View File

@@ -16,18 +16,15 @@
package org.nl.modules.common.utils;
import cn.hutool.http.HttpUtil;
import cn.hutool.http.useragent.UserAgent;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import nl.basjes.parse.useragent.UserAgent;
import nl.basjes.parse.useragent.UserAgentAnalyzer;
import org.nl.modules.common.config.ElAdminProperties;
import org.nl.modules.wql.util.SpringContextHolder;
import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.UnknownHostException;
import java.util.Calendar;
import java.util.Date;
import java.util.Enumeration;
@@ -47,12 +44,6 @@ public class StringUtils {
*/
private static final UserAgentAnalyzer USER_AGENT_ANALYZER = UserAgentAnalyzer
.newBuilder()
.hideMatcherLoadStats()
.withCache(10000)
.withField(UserAgent.AGENT_NAME_VERSION)
.build();
/**
* 驼峰命名法工具
@@ -188,8 +179,7 @@ public class StringUtils {
public static String getBrowser(HttpServletRequest request) {
UserAgent.ImmutableUserAgent userAgent = USER_AGENT_ANALYZER.parse(request.getHeader("User-Agent"));
return userAgent.get(UserAgent.AGENT_NAME_VERSION).getValue();
return "default";
}
/**

View File

@@ -102,7 +102,7 @@ public class LogServiceImpl implements LogService {
logDto.setMethod(methodName);
logDto.setUsername(username);
logDto.setParams(getParameter(method, joinPoint.getArgs()));
logDto.setBrowser(browser);
logDto.setBrowser("default");
logRepository.save(logDto);
}

View File

@@ -1,86 +0,0 @@
package org.nl.wms.masterdata_manage.备份pdm.rest;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.nl.common.anno.Log;
import lombok.extern.slf4j.Slf4j;
import org.nl.wms.masterdata_manage.备份pdm.service.WorkProcedureService;
import org.nl.wms.masterdata_manage.备份pdm.service.dto.WorkProcedureDto;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
*
* @author ldjun
* @date 2021-12-19
**/
//@RestController
@RequiredArgsConstructor
//@Api(tags = "工序管理")
//@RequestMapping("/api/workProcedure")
@Slf4j
public class WorkProcedureController {
private final WorkProcedureService workProcedureService;
@GetMapping
@Log("查询工序")
@ApiOperation("查询工序")
//@PreAuthorize("@el.check('WorkProcedure:list')")
public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page) {
return new ResponseEntity<>(workProcedureService.queryAll(whereJson, page), HttpStatus.OK);
}
@PostMapping
@Log("新增工序")
@ApiOperation("新增工序")
//@PreAuthorize("@el.check('WorkProcedure:add')")
public ResponseEntity<Object> create(@Validated @RequestBody WorkProcedureDto dto) {
workProcedureService.create(dto);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@PutMapping
@Log("修改工序")
@ApiOperation("修改工序")
//@PreAuthorize("@el.check('WorkProcedure:edit')")
public ResponseEntity<Object> update(@Validated @RequestBody WorkProcedureDto dto) {
workProcedureService.update(dto);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@Log("删除工序")
@ApiOperation("删除工序")
//@PreAuthorize("@el.check('WorkProcedure:del')")
@DeleteMapping
public ResponseEntity<Object> delete(@RequestBody Long[] ids) {
workProcedureService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
@GetMapping("/downSelect")
@Log("查询工序下拉列表")
@ApiOperation("查询工序下拉列表")
public ResponseEntity<Object> downSelect() {
return new ResponseEntity<>(workProcedureService.downSelect(), HttpStatus.OK);
}
@GetMapping("/queryWorkprocedure")
@Log("查询生产工序")
@ApiOperation("查询生产工序")
//@PreAuthorize("@el.check('workprocedure:list')")
public ResponseEntity<Object> queryWorkprocedure() {
return new ResponseEntity<>(workProcedureService.queryWorkprocedure(), HttpStatus.OK);
}
}

View File

@@ -1,87 +0,0 @@
package org.nl.wms.masterdata_manage.备份pdm.service;
import com.alibaba.fastjson.JSONArray;
import org.nl.wms.masterdata_manage.备份pdm.service.dto.WorkProcedureDto;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author ldjun
* @description 服务接口
* @date 2021-12-19
**/
public interface WorkProcedureService {
/**
* 查询数据分页
*
* @param whereJson 条件
* @param page 分页参数
* @return Map<String, Object>
*/
Map<String, Object> queryAll(Map whereJson, Pageable page);
/**
* 查询所有数据不分页
*
* @param whereJson 条件参数
* @return List<WorkProcedureDto>
*/
List<WorkProcedureDto> queryAll(Map whereJson);
/**
* 根据ID查询
*
* @param workProcedure_id ID
* @return WorkProcedure
*/
WorkProcedureDto findById(String workProcedure_id);
/**
* 根据编码查询
*
* @param code code
* @return WorkProcedure
*/
WorkProcedureDto findByCode(String code);
/**
* 创建
*
* @param dto /
*/
void create(WorkProcedureDto dto);
/**
* 多选删除
*
* @param ids /
*/
void deleteAll(Long[] ids);
/**
* 编辑
*
* @param dto /
*/
void update(WorkProcedureDto dto);
/**
* 获取下拉选列表
*
* @return
*/
JSONArray downSelect();
/**
* 查询所有数据不分页
* @param
* @return List<PdmBaseWorkprocedureDto>
*/
List<WorkProcedureDto> queryWorkprocedure();
}

View File

@@ -1,64 +0,0 @@
package org.nl.wms.masterdata_manage.备份pdm.service.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @author ldjun
* @description /
* @date 2021-12-19
**/
@Data
public class WorkProcedureDto implements Serializable {
/** 工序标识 */
private String workprocedure_id;
/** 生产区域 */
private String product_area;
/** 工序编码 */
private String workprocedure_code;
/** 工序名称 */
private String workprocedure_name;
/** 对应工段 */
private String worksection_type_scode;
/** 分段计算类型 */
private String burst_type_scode;
/** 是否关键工序 */
private String is_keyworkprocedure;
/** 是否首道工序 */
private String is_first;
/** 是否启用 */
private String is_used;
/** 备注 */
private String remark;
/** 创建人 */
private String create_id;
/** 创建人姓名 */
private String create_name;
/** 创建时间 */
private String create_time;
/** 修改人 */
private String update_id;
/** 修改人姓名 */
private String update_name;
/** 修改时间 */
private String update_time;
}

View File

@@ -1,159 +0,0 @@
package org.nl.wms.masterdata_manage.备份pdm.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.wql.core.bean.ResultBean;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.WqlUtil;
import org.nl.wms.system_manage.service.user.dto.CurrentUser;
import org.nl.wms.masterdata_manage.备份pdm.service.WorkProcedureService;
import org.nl.wms.masterdata_manage.备份pdm.service.dto.WorkProcedureDto;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Map;
/**
* @author ldjun
* @description 服务实现
* @date 2021-12-19
**/
@Service
@RequiredArgsConstructor
@Slf4j
public class WorkProcedureServiceImpl implements WorkProcedureService {
@Override
public Map<String, Object> queryAll(Map whereJson, Pageable page) {
String where = "";
WQLObject wo = WQLObject.getWQLObject("pdm_bi_workprocedure");
String search = (String) whereJson.get("search");
String product_area = (String) whereJson.get("product_area");
if (!StrUtil.isEmpty(search)) {
where += " AND (workprocedure_code like '%" + search + "%' OR workprocedure_name like '%" + search + "%' )";
}
if(!StrUtil.isEmpty(product_area)) {
where += " AND product_area = '" + product_area + "'";
}
ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "is_used = '1' " + where, "workprocedure_code");
final JSONObject json = rb.pageResult();
return json;
}
@Override
public List<WorkProcedureDto> queryAll(Map whereJson) {
WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure");
JSONArray arr = wo.query().getResultJSONArray(0);
List<WorkProcedureDto> list = arr.toJavaList(WorkProcedureDto.class);
return list;
}
@Override
public WorkProcedureDto findById(String workProcedure_id) {
WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure");
JSONObject json = wo.query("workProcedure_id =" + workProcedure_id + "").uniqueResult(0);
if (ObjectUtil.isEmpty(json)) return null;
final WorkProcedureDto obj = json.toJavaObject(WorkProcedureDto.class);
return obj;
}
@Override
public WorkProcedureDto findByCode(String code) {
WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure");
JSONObject json = wo.query("workprocedure_code ='" + code + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(json)) return null;
final WorkProcedureDto obj = json.toJavaObject(WorkProcedureDto.class);
return obj;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(WorkProcedureDto dto) {
//判断编码是否存在
String workprocedure_code = dto.getWorkprocedure_code();
WorkProcedureDto byCode = this.findByCode(workprocedure_code);
if (ObjectUtil.isNotEmpty(byCode)) throw new BadRequestException("编码已存在!");
CurrentUser currentUser = SecurityUtils.getCurrentUser();
String currentUserId = currentUser.getId();
String nickName = SecurityUtils.getCurrentNickName();
dto.setWorkprocedure_id(IdUtil.getSnowflake(1, 1).nextIdStr());
dto.setCreate_id(currentUserId);
dto.setCreate_name(nickName);
dto.setUpdate_id(currentUserId);
dto.setUpdate_name(nickName);
dto.setUpdate_time(DateUtil.now());
dto.setCreate_time(DateUtil.now());
WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure");
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
wo.insert(json);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(WorkProcedureDto dto) {
WorkProcedureDto entity = this.findById(dto.getWorkprocedure_id());
if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!");
String workprocedure_code = entity.getWorkprocedure_code();
WorkProcedureDto byCode = this.findByCode(workprocedure_code);
if (ObjectUtil.isNotEmpty(byCode) && !dto.getWorkprocedure_id().equals(byCode.getWorkprocedure_id()))
throw new BadRequestException("存在相同的编码!");
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
dto.setUpdate_time(DateUtil.now());
dto.setUpdate_id(currentUserId);
dto.setUpdate_name(nickName);
WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure");
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
wo.update(json);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteAll(Long[] ids) {
WQLObject wo = WQLObject.getWQLObject("pdm_bi_workProcedure");
for (Long workProcedure_id : ids) {
wo.delete("workProcedure_id = '" + workProcedure_id + "'");
}
}
@Override
public JSONArray downSelect() {
//工序表【PDM_BI_WorkProcedure】
WQLObject workProcedureTab = WQLObject.getWQLObject("PDM_BI_WorkProcedure");
JSONArray resultJSONArray = workProcedureTab.query("is_used ='1'", "workprocedure_code").getResultJSONArray(0);
return resultJSONArray;
}
@Override
public List<WorkProcedureDto> queryWorkprocedure() {
WQLObject wo = WQLObject.getWQLObject("pdm_bi_workprocedure");
//只查清洗 跟仓储
JSONArray arr = wo.query(" is_used = '1' and workprocedure_code in ('12','08')").getResultJSONArray(0);
if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(WorkProcedureDto.class);
return null;
}
}

View File

@@ -11,15 +11,9 @@ import lombok.extern.slf4j.Slf4j;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.common.domain.query.PageQuery;
import org.nl.modules.wql.core.bean.ResultBean;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.WqlUtil;
import org.nl.wms.masterdata_manage.备份pdm.service.WorkProcedureService;
import org.nl.wms.masterdata_manage.备份pdm.service.dto.WorkProcedureDto;
import org.nl.wms.product_manage.service.workprocedure.IPdmBiWorkprocedureService;
import org.nl.wms.product_manage.service.workprocedure.dao.PdmBiWorkprocedure;
import org.nl.wms.product_manage.service.workprocedure.dto.WorkprocedureQuery;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;

View File

@@ -90,7 +90,7 @@ public class PlotterCallEmptyTask extends AbstractAcsTask {
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject param) {
String start_point_code = param.getString("device_code");
String end_point_code = param.getString("device_code");
PdmProduceWorkorder order = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>()
.eq("workorder_code", param.getString("workorder_code"))
.eq("is_delete", false)
@@ -111,13 +111,13 @@ public class PlotterCallEmptyTask extends AbstractAcsTask {
String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + "";
JSONObject task = new JSONObject();
task.put("task_id", taskdtl_id);
task.put("task_name", AcsTaskEnum.TASK_PLOTTER_MAC.getDesc());
task.put("task_type", AcsTaskEnum.TASK_PLOTTER_MAC.getCode());
task.put("task_name", AcsTaskEnum.TASK_PLOTTER_EMPTY.getDesc());
task.put("task_type", AcsTaskEnum.TASK_PLOTTER_EMPTY.getCode());
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20.getCode());
task.put("material_id", order.getMaterial_id());
task.put("task_status", StatusEnum.TASK_CREATE.getCode());
task.put("point_code1", start_point_code);
task.put("point_code2", end_point_code);
task.put("handle_class", this.getClass().getName());
task.put("is_delete", StatusEnum.STATUS_FLASE.getCode());
String currentUserId = SecurityUtils.getCurrentUserId();
@@ -181,7 +181,7 @@ public class PlotterCallEmptyTask extends AbstractAcsTask {
.eq("point_code",map.get("point_code")));
// 设置点位
taskObj.put("update_time", DateUtil.now());
taskObj.put("point_code2",map.get("point_code"));
taskObj.put("point_code1",map.get("point_code"));
SchBaseTask schBaseTask = taskObj.toJavaObject(SchBaseTask.class);
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
schBaseTask.setUpdate_time(new Date());

View File

@@ -1,32 +0,0 @@
package org.nl.wms.product_manage.sch.tasks.callMaterial;
import com.alibaba.fastjson.JSONObject;
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
import org.springframework.stereotype.Service;
/*
* @author ZZQ
* @Date 2023/6/16 08:40
*/
@Service
public class EngraveCallMaterialTask extends AbstractAcsTask {
@Override
public void updateTaskStatus(JSONObject taskObj, String status) {
}
@Override
public String createTask(JSONObject param) {
return null;
}
@Override
public void cancel(String task_id) {
}
@Override
public void pointConfirm(JSONObject param) {
}
}

View File

@@ -1,14 +1,20 @@
package org.nl.wms.product_manage.sch.tasks.callMaterial;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
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 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.enums.WorkerOrderEnum;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
@@ -16,9 +22,21 @@ import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
import org.nl.wms.product_manage.sch.manage.TaskStatusEnum;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author: lyd
@@ -28,7 +46,12 @@ import org.springframework.transaction.annotation.Transactional;
@Slf4j
@Service
public class WrapCallMaterialTask extends AbstractAcsTask {
private static final String OPT_NAME = "包装机#";
@Autowired
private IPdmProduceWorkorderService workorderService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBasePointService pointService;
@Autowired
private WmsToAcsService wms;
@Override
@@ -94,64 +117,54 @@ public class WrapCallMaterialTask extends AbstractAcsTask {
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject param) {
WQLObject workOrderTab = WQLObject.getWQLObject("PDM_produce_workOrder");
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
String end_point_code = param.getString("device_code");
String workorder = param.getString("workorder_code");
if(StrUtil.isEmpty(end_point_code)) {
throw new BadRequestException("终点不能为空!");
}
if(StrUtil.isEmpty(workorder)) {
throw new BadRequestException("工单不能为空!");
}
// 判断当前点是否有未完成任务
JSONObject taskObj = taskTab.query("is_delete='0' and point_code2 = '" + end_point_code + "' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj)) {
throw new BadRequestException("当前点位" + end_point_code + "存在未完成的任务");
}
// 判断工单
JSONObject workOrderObj = workOrderTab.query("workorder_code = '" + workorder + "' and workorder_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' and is_delete ='0'").uniqueResult(0);
if (ObjectUtil.isEmpty(workOrderObj)){
throw new BadRequestException("下发工单不存在未完成工单:"+workorder);
PdmProduceWorkorder order = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>()
.eq("workorder_code", param.getString("workorder_code"))
.eq("is_delete", false)
.lt("workorder_status", WorkerOrderEnum.COMPLETE.getCode()));
Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code")));
//?刻字满料请求:可以存在多个任务?
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.eq("point_code2", param.getString("device_code")).lt("task_status", StatusEnum.TASK_FINISH.getCode())
);
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException(String.format("设备%s存在未完成任务"+list.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code")));
}
// 查找任务状态
String taskdtl_id = IdUtil.getSnowflake(1, 1).nextIdStr();
JSONObject task = new JSONObject();
task.put("task_id", taskdtl_id);
task.put("task_id", IdUtil.getStringId());
task.put("task_name", AcsTaskEnum.TASK_WARP_MAC.getDesc());
task.put("task_type", AcsTaskEnum.TASK_WARP_MAC.getCode());
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20.getCode());
task.put("task_status", StatusEnum.TASK_CREATE.getCode());
task.put("point_code2", end_point_code);
task.put("point_code2", param.getString("device_code"));
task.put("handle_class", this.getClass().getName());
task.put("is_delete", StatusEnum.STATUS_FLASE.getCode());
String currentUserId = SecurityUtils.getCurrentUserId();
task.put("create_id", currentUserId);
task.put("create_name", SecurityUtils.getCurrentNickName());
task.put("update_id", currentUserId);
task.put("update_name", SecurityUtils.getCurrentNickName());
task.put("create_time", DateUtil.now());
task.put("update_time", DateUtil.now());
task.put("priority", "1");
task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode());
WQLObject.getWQLObject("SCH_BASE_Task").insert(task);
task.put("table_fk_id",order.getWorkorder_code());
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
taskService.save(schBaseTask);
// 找终点
try {
pointConfirm(task);
JSONArray data = new JSONArray();
JSONObject result = taskTab.query("task_id = '" + taskdtl_id + "'").uniqueResult(0);
data.add(result);
data.add(task);
// 下发
wms.issueTaskToAcs2(data);
} catch (Exception ex) {
// 未找到
task.put("remark", ex.getMessage());
task.put("task_status", StatusEnum.TASK_START_ERROR.getCode());
task.put("update_time", DateUtil.now());
taskTab.update(task);
log.error("刻字请求异常,error:{}",ex);
schBaseTask.setRemark(ex.getMessage());
schBaseTask.setUpdate_time(new Date());
schBaseTask.setUpdate_name("acs");
schBaseTask.setTask_status(StatusEnum.TASK_START_ERROR.getCode());
taskService.save(schBaseTask);
}
return taskdtl_id;
return task.getString("task_id");
}
@Override
@@ -161,26 +174,29 @@ public class WrapCallMaterialTask extends AbstractAcsTask {
@Override
public void pointConfirm(JSONObject taskObj) {
log.info(OPT_NAME+"callMaterial param:{}",JSONObject.toJSONString(taskObj));
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
// 去刻字缓存区找物料
JSONObject point = pointTab.query("region_code = 'A1_KZHC' AND point_status = '" +
StatusEnum.POINT_STATUS_FULL.getCode() + "' AND lock_type = '" + StatusEnum.LOCK_OFF.getCode() +
"' AND is_used = '" + StatusEnum.STATUS_TRUE.getCode() + "' AND is_delete = '" +
StatusEnum.STATUS_FLASE.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(point)) {
// 找到位置
// 点位上锁
point.put("lock_type", StatusEnum.LOCK_ON.getCode());
pointTab.update(point);
// 任务修改
taskObj.put("point_code1", point.getString("point_code"));
taskObj.put("task_status", StatusEnum.TASK_START_END_P.getCode());
// 去刻字缓存区寻找空位
List<Map<String, String>> points = pointService.queryVehicle(
MapOf.of("is_used", "1",
"lock_type", StatusEnum.LOCK_OFF.getCode(),
"region_code", "A1_KZHC",
"material_id", taskObj.getString("material_id")));
if (ObjectUtil.isNotEmpty(points)) {
Map<String, String> map = points.get(0);
if (CollectionUtils.isEmpty(map)|| StringUtils.isEmpty(map.get("point_code"))){
throw new BadRequestException("刻字缓存区没有可用货位.");
}
pointService.update(new UpdateWrapper<SchBasePoint>()
.set("lock_type",StatusEnum.LOCK_ON.getCode())
.eq("point_code",map.get("point_code")));
// 设置点位
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
taskObj.put("point_code1",map.get("point_code"));
SchBaseTask schBaseTask = taskObj.toJavaObject(SchBaseTask.class);
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
schBaseTask.setUpdate_time(new Date());
taskService.updateById(schBaseTask);
} else {
throw new BadRequestException("刻字缓存区没有可用空框.");
throw new BadRequestException("刻字缓存区没有可用货位.");
}
}
}

View File

@@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.StatusEnum;
@@ -15,10 +16,18 @@ import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/**
* @Author: lyd
* @Description: 包装机送空框
@@ -27,7 +36,12 @@ import org.springframework.transaction.annotation.Transactional;
@Slf4j
@Service
public class WrapSendEmptyTask extends AbstractAcsTask {
private static final String OPT_NAME = "包装机#";
@Autowired
private IPdmProduceWorkorderService workorderService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private ISchBasePointService pointService;
@Autowired
private WmsToAcsService wms;
@Override
@@ -148,27 +162,28 @@ public class WrapSendEmptyTask extends AbstractAcsTask {
}
@Override
public void pointConfirm(JSONObject taskObj) {
log.info(OPT_NAME+"sendEmptyVehicle param:{}",JSONObject.toJSONString(taskObj));
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
// 去刻字缓存区找空位
JSONObject point = pointTab.query("region_code = 'A1_KZHC' AND point_status = '" +
StatusEnum.POINT_STATUS_EMPTY.getCode() + "' AND lock_type = '" + StatusEnum.LOCK_OFF.getCode() +
"' AND is_used = '" + StatusEnum.STATUS_TRUE.getCode() + "' AND is_delete = '" +
StatusEnum.STATUS_FLASE.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(point)) {
public void pointConfirm(JSONObject task) {
// 去刻字缓存区寻找空位
List<SchBasePoint> list = pointService.list(new QueryWrapper<SchBasePoint>().isNull("vehicle_code")
.eq("is_used", "1")
.eq("region_code","A1_KZHC")
.eq("lock_type", StatusEnum.LOCK_OFF.getCode()));
if (ObjectUtil.isNotEmpty(list)) {
// 找到位置
// 点位上锁
point.put("lock_type", StatusEnum.LOCK_ON.getCode());
pointTab.update(point);
SchBasePoint point = list.get(0);
point.setLock_type(StatusEnum.LOCK_ON.getCode());
pointService.updateById(point);
// 设置点位
taskObj.put("point_code2", point.getString("point_code"));
taskObj.put("task_status", StatusEnum.TASK_START_END_P.getCode());
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
task.put("update_time", DateUtil.now());
task.put("point_code2",point.getPoint_code());
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
schBaseTask.setUpdate_time(new Date());
taskService.updateById(schBaseTask);
} else {
throw new BadRequestException("刻字缓存区没有可用货位.");
throw new BadRequestException("刻字缓存区没有可用货位.");
}
}
}

View File

@@ -1,51 +1,59 @@
package org.nl.wms.product_manage.sch.tasks.callMaterial;
package org.nl.wms.product_manage.sch.tasks.sendMaterial;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
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 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.enums.WorkerOrderEnum;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtSectattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.IStIvtStructattrService;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtSectattr;
import org.nl.wms.masterdata_manage.storage.service.storage.dao.StIvtStructattr;
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
import org.nl.wms.product_manage.sch.manage.TaskStatusEnum;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.nl.wms.storage_manage.IOSEnum;
import org.nl.wms.storage_manage.productmanage.util.DivRuleCpService;
import org.nl.wms.storage_manage.productmanage.util.RuleUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author: lyd
* @Description: 刻字机送料
* @Date: 2023/4/3
/*
* @author ZZQ
* @Date 2023/6/16 08:40
*/
@Slf4j
@Service
public class PlotterCallMaterialTask extends AbstractAcsTask {
@Slf4j
public class WashSendMaterialTask extends AbstractAcsTask {
@Autowired
private DivRuleCpService divRuleCpService;
@Autowired
private IStIvtSectattrService sectattrService;
@Autowired
private IPdmProduceWorkorderService workorderService;
@Autowired
@@ -55,14 +63,15 @@ public class PlotterCallMaterialTask extends AbstractAcsTask {
@Autowired
private WmsToAcsService wms;
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject param, String status) {
SchBaseTask task = taskService.getById(param.getString("task_id"));
if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_RUNNING.getCode())
.set("task_status", StatusEnum.TASK_RUNNING.getCode())
.set("update_name","acs")
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
.set("update_time", DateUtil.now()).eq("task_id",task.getTask_id()));
}
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
// 完成
@@ -75,6 +84,7 @@ public class PlotterCallMaterialTask extends AbstractAcsTask {
.in("point_code",task.getPoint_code1(),task.getPoint_code2(),task.getPoint_code3()));
}
if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) {
// 完成
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_CANNEL.getCode())
.set("update_name","acs")
@@ -96,32 +106,34 @@ public class PlotterCallMaterialTask extends AbstractAcsTask {
Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code")));
//?刻字满料请求可以存在多个任务
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.eq("point_code1", param.getString("device_code")).lt("task_status", StatusEnum.TASK_FINISH.getCode())
.lt("task_status", StatusEnum.TASK_FINISH.getCode())
.and(wa->wa
.eq("point_code1", param.getString("device_code"))
.or()
.eq("point_code2", param.getString("device_code")))
);
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException(String.format("设备%s存在未完成任务"+list.stream().map(SchBaseTask::getTask_id).collect(Collectors.toList()).toString(), param.getString("device_code")));
}
// 查找任务状态
String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + "";
String taskdtl_id = IdUtil.getStringId();
JSONObject task = new JSONObject();
task.put("task_id", taskdtl_id);
task.put("task_name", AcsTaskEnum.TASK_PLOTTER_MAC.getDesc());
task.put("task_type", AcsTaskEnum.TASK_PLOTTER_MAC.getCode());
task.put("task_name", AcsTaskEnum.REQUEST_WASH_FULL.getDesc());
task.put("task_type", AcsTaskEnum.REQUEST_WASH_FULL.getCode());
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
task.put("acs_task_type", AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20.getCode());
task.put("material_id", order.getMaterial_id());
task.put("task_status", StatusEnum.TASK_CREATE.getCode());
task.put("task_status", TaskStatusEnum.CREATED.getCode());
task.put("point_code1", start_point_code);
task.put("handle_class", this.getClass().getName());
task.put("is_delete", StatusEnum.STATUS_FLASE.getCode());
String currentUserId = SecurityUtils.getCurrentUserId();
task.put("create_id", currentUserId);
task.put("create_name", SecurityUtils.getCurrentNickName());
task.put("update_id", currentUserId);
task.put("update_name", SecurityUtils.getCurrentNickName());
task.put("create_time", DateUtil.now());
task.put("update_time", DateUtil.now());
task.put("priority", "1");
task.put("finished_type", "1");
task.put("agv_system_type", AcsTaskEnum.AGV_SYSTEM_XC.getCode());
task.put("table_fk_id",order.getWorkorder_code());
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
@@ -134,7 +146,8 @@ public class PlotterCallMaterialTask extends AbstractAcsTask {
// 下发
wms.issueTaskToAcs2(data);
} catch (Exception ex) {
log.error("刻字请求异常,error:{}",ex);
// 未找到
log.error("刻字满料请求异常,error:{}",ex);
schBaseTask.setRemark(ex.getMessage());
schBaseTask.setUpdate_time(new Date());
schBaseTask.setUpdate_name("acs");
@@ -155,34 +168,32 @@ public class PlotterCallMaterialTask extends AbstractAcsTask {
/**
* 满料请求
* 从刻字机满料缓存区中获取空位放入就行
* @param taskObj: 任务对象
*/
@Override
public void pointConfirm(JSONObject taskObj) {
@Transactional(timeout=TransactionDefinition.ISOLATION_READ_UNCOMMITTED)
public void pointConfirm(JSONObject task) {
// 去刻字缓存区寻找空位
List<Map<String, String>> points = pointService.queryVehicle(
MapOf.of("is_used", "1",
"lock_type", StatusEnum.LOCK_OFF.getCode(),
"region_code", "A1_KZHC",
"material_id", taskObj.getString("material_id")));
if (ObjectUtil.isNotEmpty(points)) {
Map<String, String> map = points.get(0);
if (CollectionUtils.isEmpty(map)|| StringUtils.isEmpty(map.get("point_code"))){
throw new BadRequestException("刻字缓存区没有可用货位.");
}
pointService.update(new UpdateWrapper<SchBasePoint>()
.set("lock_type",StatusEnum.LOCK_ON.getCode())
.eq("point_code",map.get("point_code")));
// 设置点位
taskObj.put("update_time", DateUtil.now());
taskObj.put("point_code2",map.get("point_code"));
SchBaseTask schBaseTask = taskObj.toJavaObject(SchBaseTask.class);
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
schBaseTask.setUpdate_time(new Date());
taskService.updateById(schBaseTask);
} else {
throw new BadRequestException("刻字缓存区没有可用货位.");
//分配货位下发任务更新主单据状态更新明细任务
StIvtSectattr sect = sectattrService.getOne(new QueryWrapper<StIvtSectattr>().eq("sect_name", "半成品库区"));
JSONObject jo = new JSONObject();
jo.put("sect_id", sect.getSect_id());
jo.put("stor_id", sect.getStor_id());
jo.put("rule_type", RuleUtil.PRODUCTION_IN_1);
StIvtStructattr stIvtStructattr = divRuleCpService.divRuleIn(jo);
//少出入库记录
if (ObjectUtil.isEmpty(stIvtStructattr)) {
throw new BadRequestException("无可分配货位");
}
stIvtStructattr.setLock_type(IOSEnum.LOCK_TYPE.code("入库锁"));
stIvtStructattr.setInv_code(task.getString("task_code"));
// 设置点位
task.put("update_time", DateUtil.now());
task.put("point_code2",stIvtStructattr.getStruct_code());
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
schBaseTask.setUpdate_time(new Date());
schBaseTask.setTask_type(AcsTaskEnum.TASK_STRUCT_IN.getCode());
taskService.updateById(schBaseTask);
}
@Override
@@ -190,7 +201,7 @@ public class PlotterCallMaterialTask extends AbstractAcsTask {
ArrayList<SchBaseTask> Merge = new ArrayList<>();
if (!CollectionUtils.isEmpty(tasks)){
for (SchBaseTask task : tasks) {
task.setTask_group_id(org.nl.common.utils.IdUtil.getStringId());
task.setTask_group_id(IdUtil.getStringId());
Merge.add(task);
}
}

View File

@@ -224,6 +224,6 @@ public class PdmProduceWorkorder implements Serializable {
/**
* 是否删除
*/
private Boolean is_used_fxx = false;
private String package_ext;
}

View File

@@ -91,12 +91,12 @@ public class PdmProduceWorkorderrecord implements Serializable {
private BigDecimal person_finish_qty;
/**
* 开时间
* 开时间
*/
private String operatetime_start;
/**
* 完工时间
* 结束时间
*/
private String operatetime_end;

View File

@@ -128,7 +128,10 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
@Override
public void create(JSONObject form) {
JSONObject ext = form.getJSONObject("package_ext");
form.put("package_ext",null);
PdmProduceWorkorder entity = form.toJavaObject(PdmProduceWorkorder.class);
entity.setPackage_ext(ext.toJSONString());
entity.setWorkorder_id(IdUtil.getStringId());
entity.setWorkorder_code(CodeUtil.getNewCode("PDM_SHIFTORDER"));
entity.setCurrent_produce_person_id(SecurityUtils.getCurrentUserId());
@@ -636,7 +639,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
form.put("material_spec", material.getMaterial_spec());
form.put("device_code", workOrder.getDevice_code());
form.put("is_needmove", workOrder.getIs_needmove() ? 1 : 0);
form.put("is_used_fxx", workOrder.getIs_used_fxx() ? 1 : 0);
form.put("package_ext", workOrder.getPackage_ext());
if (param.containsKey("extra_map")) {
form.put("extra_map", param.getJSONObject("extra_map"));
}
@@ -649,28 +652,32 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
Assert.notNull(new Object[]{param, param.get("report_qty"), param.getString("workorder_id")}, "请求参数不能为空");
PdmProduceWorkorder workorder = this.getOne(new QueryWrapper<PdmProduceWorkorder>().eq("workorder_id", param.getString("workorder_id")));
// if (workorder.getWorkorder_status().equals(WorkerOrderEnum.COMPLETE.getCode()) || workorder.getWorkorder_status().equals(WorkerOrderEnum.FORCE_COMPLETE.getCode())) {
Assert.notNull(workorder, "当前工单不存在");
// if (workorder.getWorkorder_status().equals(WorkerOrderEnum.AUTO_COMPLETE.getCode()) || workorder.getWorkorder_status().equals(WorkerOrderEnum.COMPLETE.getCode()) || workorder.getWorkorder_status().equals(WorkerOrderEnum.FORCE_COMPLETE.getCode())) {
// throw new BadRequestException(param.getString("workorder_id") + "当前工单已经完工不允许报工");
// }
Assert.notNull(workorder, "当前工单不存在");
PdmProduceWorkorderrecord one = reportRecordService.getOne(new QueryWrapper<PdmProduceWorkorderrecord>()
.eq("workorder_id", param.getString("workorder_id")).eq("report_status", ReportEnum.REPORT_STATUS.code("生成")));
Assert.notNull(one, param.getString("workorder_id") + "当前工单没有生成状态的报工记录");
workorder.setReport_qty(workorder.getReport_qty().add(param.getBigDecimal("report_qty")));
if (workorder.getPlan_qty().doubleValue() <= workorder.getReport_qty().doubleValue()) {
workorder.setWorkorder_status(WorkerOrderEnum.COMPLETE.getCode());
JSONArray array = new JSONArray();
JSONObject map = new JSONObject();
map.put("workorder_id", workorder.getWorkorder_id());
map.put("type", WorkerOrderEnum.COMPLETE.getCode());
array.add(map);
wmsToAcsService.orderStatusUpdate(array);
}else {
workorder.setWorkorder_status(WorkerOrderEnum.STOP.getCode());
}
JSONArray array = new JSONArray();
JSONObject map = new JSONObject();
map.put("workorder_id", workorder.getWorkorder_id());
map.put("type", WorkerOrderEnum.COMPLETE.getCode());
array.add(map);
wmsToAcsService.orderStatusUpdate(array);
workorder.setReal_qty(null);
this.updateById(workorder);
reportRecordService.update(new UpdateWrapper<PdmProduceWorkorderrecord>()
.set("report_qty", param.getBigDecimal("report_qty"))
.set("report_status", ReportEnum.REPORT_STATUS.code("报工"))
.set("operatetime_end",DateUtil.now())
.set("needproduct_qty", Math.max(0, workorder.getPlan_qty().intValue() - workorder.getReport_qty().intValue()))
.eq("macoperate_id", one.getMacoperate_id()));
return one.getMacoperate_id();

View File

@@ -11,12 +11,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.masterdata_manage.备份pdm.service.dto.WorkProcedureDto;
import org.nl.wms.product_manage.service.workprocedure.IPdmBiWorkprocedureService;
import org.nl.wms.product_manage.service.workprocedure.dao.PdmBiWorkprocedure;
import org.nl.wms.product_manage.service.workprocedure.dao.mapper.PdmBiWorkprocedureMapper;
import org.nl.wms.system_manage.service.user.dto.CurrentUser;
import org.springframework.stereotype.Service;
import java.util.List;

View File

@@ -5,18 +5,16 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.enums.WorkerOrderEnum;
import org.nl.common.utils.BaseCode;
import org.nl.common.utils.IdUtil;
import org.nl.wms.masterdata_manage.service.material.IMdMeMaterialbaseService;
import org.nl.wms.masterdata_manage.service.material.dao.MdMeMaterialbase;
import org.nl.wms.product_manage.sch.tasks.callMaterial.EngraveCallMaterialTask;
import org.nl.wms.product_manage.sch.tasks.sendMaterial.WashSendMaterialTask;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.storage_manage.productmanage.service.structIvt.dao.StIvtStructivtCp;
import org.nl.wms.storage_manage.semimanage.service.iostorInv.IStIvtIostorinvBcpOutService;
import org.nl.wms.storage_manage.semimanage.service.structIvt.dao.StIvtStructivtBcp;
import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -24,13 +22,16 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/*
* @author ZZQ
* @author ZZQ "'
* //一体机加一个从入库点到刻字机的搬运任务;
* //一体机加一个刻字机到空框回库
* //一体机加一个手动打开气缸按钮
* //一体机加预料上完上到刻字机14号设备虚拟设备
* @Date 2023/6/16 09:21
*/
@Service
@@ -45,7 +46,7 @@ public class EngraveScheduleService {
@Autowired
private IStIvtIostorinvBcpOutService stIvtIostorinvBcpOutService;
@Autowired
private EngraveCallMaterialTask engraveCallMaterialTask;
private WashSendMaterialTask engraveCallMaterialTask;
@Autowired
private IMdMeMaterialbaseService materialbaseService;
@@ -61,6 +62,7 @@ public class EngraveScheduleService {
public void EngravePublish(){
/**
* 1.查询当前正在执行的刻字工单数组
* 3.
* 2.获取相同物料的工单:查询半成品库存物料:有的话则进行半成品出库:出到对接位
* 3.半成品出库完成后:触发刻字机叫料任务:
* 4。根据物料获取工单对应设备生成刻字机叫料任务

View File

@@ -453,7 +453,6 @@ public class StIvtIostorinvCpServiceImpl extends ServiceImpl<StIvtIostorinvCpMap
// 查出对应仓位
attrDao = iStIvtStructattrService.getById(struct_id);
}
if (ObjectUtil.isEmpty(attrDao)) throw new BadRequestException("未找到仓位!");
// 2.更新分配明细、分配、明细、主表

View File

@@ -34,7 +34,7 @@ export default {
},
data() {
return {
title: '海mes系统',
title: '海mes系统',
logo: Logo,
title_param: 'platform'
}

View File

@@ -2,7 +2,7 @@
<div class="login" :style="'background-image:url('+ Background +');'">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" label-position="left" label-width="0px" class="login-form">
<h3 class="title">
mes系统
mes系统
</h3>
<el-form-item prop="username">
<el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">

View File

@@ -157,8 +157,8 @@
<el-table-column prop="nok_qty" label="报废数量" />
<el-table-column prop="repare_qty" label="报修数量" />
<el-table-column prop="person_finish_qty" label="人员期末数量" :min-width="flexWidth('person_finish_qty',tableData,'人员期末数量')"/>
<el-table-column prop="operatetime_start" label="开时间" :min-width="flexWidth('operatetime_start',tableData,'开工时间')"/>
<el-table-column prop="operatetime_end" label="完工时间" />
<el-table-column prop="operatetime_start" label="开时间" :min-width="flexWidth('operatetime_start',tableData,'开工时间')"/>
<el-table-column prop="operatetime_end" label="结束时间" />
<el-table-column prop="report_status" label="报工状态" >
<template slot-scope="scope">
{{ reportStatus[scope.row.report_status-1].label }}

View File

@@ -368,11 +368,47 @@
<el-radio
v-for="item in dict.IS_OR_NOT"
:key="item.id"
v-model="form.is_used_fxx"
v-model="form.package_ext.is_used_fxx"
:label="item.value"
>{{ item.label }}
</el-radio>
</el-form-item>
<el-form-item v-show="form.workprocedure_id == '1535144822984282112'" label="包装模版" prop="package_model">
<el-input-number
v-model="form.package_ext.package_model"
style="width: 200px;"
clearable
@focus="materialShow=true"
@clear="form.material_id='',form.material_code='',form.material_name='',form.material_spec=''"
/>
</el-form-item>
<el-form-item v-show="form.workprocedure_id == '1535144822984282112'" label="拆箱数量" prop="demol_num">
<el-input-number
v-model="form.package_ext.demol_num"
style="width: 200px;"
clearable
@focus="materialShow=true"
@clear="form.material_id='',form.material_code='',form.material_name='',form.material_spec=''"
/>
</el-form-item>
<el-form-item v-show="form.workprocedure_id == '1535144822984282112'" label="总袋量" prop="demol_num">
<el-input-number
v-model="form.package_ext.demol_num"
style="width: 200px;"
clearable
@focus="materialShow=true"
@clear="form.material_id='',form.material_code='',form.material_name='',form.material_spec=''"
/>
</el-form-item>
<el-form-item v-show="form.workprocedure_id == '1535144822984282112'" label="码盘模版" prop="stack_model">
<el-input-number
v-model="form.package_ext.stack_model"
style="width: 200px;"
clearable
@focus="materialShow=true"
@clear="form.material_id='',form.material_code='',form.material_name='',form.material_spec=''"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
@@ -512,7 +548,7 @@ const defaultForm = {
device_code: null,
current_produce_person_id: null,
is_canupdate_update: null,
is_used_fxx: false,
package_ext: {},
workorder_status: null,
is_needmove: null,
sale_id: null,

View File

@@ -94,8 +94,8 @@
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="person_finish_qty" label="人员期末数量" />-->
<el-table-column prop="operatetime_start" label="开时间" :min-width="flexWidth('operatetime_start',crud.data,'开时间')"/>
<el-table-column prop="operatetime_end" label="完时间" :min-width="flexWidth('operatetime_end',crud.data,'完时间')"/>
<el-table-column prop="operatetime_start" label="开时间" :min-width="flexWidth('operatetime_start',crud.data,'开时间')"/>
<el-table-column prop="operatetime_end" label="完时间" :min-width="flexWidth('operatetime_end',crud.data,'完时间')"/>
<el-table-column prop="report_status" label="报工状态" >
<template slot-scope="scope">
{{ reportStatus[scope.row.report_status-1].label }}

View File

@@ -87,8 +87,8 @@
<el-input v-model="scope.row.repare_qty" /></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="operatetime_start" label="开时间" />
<el-table-column prop="operatetime_end" label="结束时间" />
<el-table-column prop="report_status" label="报工状态">
<template slot-scope="scope">
{{ reportStatus[scope.row.report_status-1].label }}