add:清洗代码

This commit is contained in:
zhangzhiqiang
2023-07-19 13:42:04 +08:00
parent 2038cf1fe4
commit 98ef6cf4d4
43 changed files with 933 additions and 463 deletions

View File

@@ -0,0 +1,9 @@
package org.nl.common.domain;
import java.io.IOException;
@FunctionalInterface
public
interface ReturnLockProcess<T> {
T process() throws IOException;
}

View File

@@ -58,7 +58,7 @@ public enum AcsTaskEnum {
REQUEST_PLOTTER_CALL_EMP("4","刻字空框请求"),//ok
REQUEST_WARP_CALL_FULL("5","包装缺料请求"),//ok
REQUEST_WARP_SEND_EMP("6","包装送空框请求"),//ok
REQUEST_WASH_LACK("7","清洗机器缺料请求"),//深坑->清洗:相同物料的重量<150公斤
REQUEST_WASH_SEND_MATERIAL("7","储料仓上料"),//深坑->清洗:相同物料的重量<150公斤
REQUEST_WASH_FULL("9","清洗机器满料请求"),//清洗机满料请求//去半成品入库
REQUEST_WASH_EMP("10","清洗机器空框请求"),//清洗机下料位
REQUEST_WASH_FULL_ERROR("11","清洗机-满料异常请求"),//去半成品入库 异常位

View File

@@ -2,6 +2,7 @@ package org.nl.common.utils;
import lombok.SneakyThrows;
import org.nl.common.domain.LockProcess;
import org.nl.common.domain.ReturnLockProcess;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.util.SpringContextHolder;
import org.redisson.api.RLock;
@@ -42,4 +43,28 @@ public class RedissonUtils {
}
}
}
@SneakyThrows
public static<T> T lockAndReturn(ReturnLockProcess<T> process, String key, Integer seconds){
RedissonClient redissonClient = SpringContextHolder.getBean(RedissonClient.class);
RLock lock = redissonClient.getLock(key);
boolean isLock;
if (seconds == null){
isLock = lock.tryLock();
}else {
isLock = lock.tryLock(seconds, TimeUnit.SECONDS);
}
try {
if (isLock){
T result = process.process();
return result;
} else {
throw new BadRequestException("当前业务 key:"+key+"正在执行请稍后再试");
}
}finally {
if (isLock){
lock.unlock();
}
}
}
}

View File

@@ -7,7 +7,7 @@ import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.wms.ext_manage.acs.service.impl.AcsToWmsServiceImpl;
import org.nl.wms.scheduler_manage.service.extendtask.SpeMachinery.SpeEmpTask;
import org.nl.wms.scheduler_manage.service.extendtask.SpeMachinery.SpeFullTask;
import org.nl.wms.scheduler_manage.service.extendtask.WashMachineryTask;
import org.nl.wms.scheduler_manage.service.extendtask.wash.WashMachineryTask;
import org.nl.wms.scheduler_manage.service.extendtask.plotter.PlotterCallEmptyTask;
import org.nl.wms.scheduler_manage.service.extendtask.wash.WashCallEmptyTask;
import org.nl.wms.scheduler_manage.service.extendtask.packageWrap.WrapCallMaterialTask;
@@ -27,7 +27,7 @@ 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_LACK, SpringContextHolder.getBean(WashMachineryTask.class));
// AcsToWmsServiceImpl.Task_Collent.put(AcsTaskEnum.REQUEST_WASH_SEND_MATERIAL, 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_WARP_CALL_FULL, SpringContextHolder.getBean(WrapCallMaterialTask.class));

View File

@@ -12,7 +12,7 @@ import org.nl.common.utils.api.ResultCode;
import org.nl.modules.common.exception.BizCoreException;
import org.nl.wms.ext_manage.acs.service.AcsToWmsService;
import org.nl.wms.scheduler_manage.service.extendtask.TaskScheduleService;
import org.nl.wms.scheduler_manage.service.extendtask.WashMachineryTask;
import org.nl.wms.scheduler_manage.service.extendtask.wash.WashMachineryTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -73,11 +73,10 @@ public class AcsToWmsController {
return new ResponseEntity<>(acsToWmsService.orderStatus(param), HttpStatus.OK);
}
@PostMapping("/washOrder")
@PostMapping("/washTask")
@Log("ACS给WMS反馈清洗工单完成")
//("ACS给WMS反馈清洗工单完成")
@SaIgnore
public ResponseEntity<Object> washOrderFinish(@RequestBody JSONObject param) {
public ResponseEntity<Object> washTaskFinish(@RequestBody JSONObject param) {
washMachineryTask.updateTaskStatus( param, param.getString("status"));
return new ResponseEntity<>(HttpStatus.OK);
}

View File

@@ -24,7 +24,7 @@ import org.nl.wms.ext_manage.acs.service.AcsToWmsService;
import org.nl.wms.pda_manage.pda.service.CacheLineHandService;
import org.nl.wms.scheduler_manage.service.extendtask.manage.AbstractAcsTask;
import org.nl.wms.scheduler_manage.service.task.TaskService;
import org.nl.wms.scheduler_manage.service.extendtask.WashMachineryTask;
import org.nl.wms.scheduler_manage.service.extendtask.wash.WashMachineryTask;
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;

View File

@@ -5,9 +5,12 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.LockProcess;
import org.nl.common.domain.ReturnLockProcess;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.RedissonUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
@@ -25,6 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
@@ -79,7 +83,7 @@ public class AgvInstService {
task.put("task_type",AcsTaskEnum.TASK_PRODUCT_WASH.getCode());
task.put("task_name",AcsTaskEnum.TASK_PRODUCT_WASH.getDesc());
// query.put("qty",quantity) 深坑物料需要转重量
collect = deviceService.workproceduceDevicesWeight(query);
collect = RedissonUtils.lockAndReturn((ReturnLockProcess<List<Map<String, String>>>) () -> deviceService.workproceduceDevicesWeight(query), "allocation:A1_SKQX", 2);
}else {
collect = deviceService.workproceduceDevicesQty(query);
}

View File

@@ -59,6 +59,7 @@ public class WmsToAcsServiceImpl implements WmsToAcsService{
, "task_group_id", StringUtils.isBlank(task.getString("task_group_id"))? IdUtil.getStringId():task.getString("task_group_id")
, "is_send", task.getBoolean("is_send")?"1":"0"
, "vehicle_code", task.getString("vehicle_code")
, "in_pcsn", task.getString("task_code")
, "agv_system_type", task.getString("agv_system_type")
));
form.add(param);

View File

@@ -271,7 +271,6 @@ public class WmsToSapServiceImpl implements WmsToSapService {
String material_code = row.getString("Matnr").replaceAll("^(0+)", "");
//获取物料对应的物料标识
MdMeMaterialbase mater_jo = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_code", material_code));
deliver_jo.setMaterial_code(material_code);
if (ObjectUtil.isEmpty(mater_jo)) {
deliver_jo.setMaterial_id("");
deliver_jo.setIs_success("0");

View File

@@ -48,7 +48,6 @@ public class PcsDeliveryOrder implements Serializable {
* 物料标识
*/
private String material_id;
private String material_code;
/**
* 状态

View File

@@ -7,6 +7,7 @@
deliveryorder.*,
material.material_code,
material.material_name,
material.material_spec,
unit.unit_name
FROM
PCS_delivery_order deliveryorder
@@ -18,7 +19,7 @@
and deliveryorder.deliver_code like '%${deliver_code}%'
</if>
<if test="status != null and status != ''">
and deliveryorder.sale_code = #{status}
and deliveryorder.status = #{status}
</if>
<if test="product_series != null and product_series != ''">
and material.product_series in ${product_series}

View File

@@ -0,0 +1,253 @@
package org.nl.wms.pda_manage.pda.controller;
/*
* @author ZZQ
* @Date 2023/7/12 21:13
*/
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
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.domain.query.PageQuery;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.RedissonUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.ext_manage.acs.service.WmsToAcsService;
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.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
import org.nl.wms.scheduler_manage.service.extendtask.wash.WashMachineryTask;
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.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
import java.util.stream.Collectors;
@RestController
@Api(tags = "成品手持服务")
@RequestMapping("/api/pda/wash")
@Slf4j
@SaIgnore
public class PdaWashController {
private static double LIMIT_WEIGHT = 150000L;
@Autowired
private IMdMeMaterialbaseService materialbaseService;
@Autowired
private IPdmBiDeviceService iDeviceService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private WashMachineryTask washMachineryTask;
@Autowired
private WmsToAcsService wmsToAcsService;
@PostMapping("/specList")
@SaIgnore
public ResponseEntity<Object> queryAll(@RequestBody JSONObject whereJson){
List<Map> specs = new ArrayList<>();
List<PdmBiDevice> list = iDeviceService.list(new QueryWrapper<PdmBiDevice>()
.eq("workprocedure_id", "1535144552481034240")
.eq("is_used", true)
.ne("material_id", "")
.isNotNull("material_id"));
if (!CollectionUtils.isEmpty(list)){
Set materials = list.stream().map(a->a.getMaterial_id()).collect(Collectors.toSet());
List<MdMeMaterialbase> materialbases = materialbaseService.list(new QueryWrapper<MdMeMaterialbase>()
.in("material_id", materials));
for (MdMeMaterialbase materialbase : materialbases) {
Map item = new HashMap<>();
item.put("label",materialbase.getMaterial_spec());
item.put("value",materialbase.getMaterial_id());
specs.add(item);
}
}
return new ResponseEntity<>(TableDataInfo.build(specs),HttpStatus.OK);
}
@PostMapping("/query")
@Log("深坑物料")
@SaIgnore
public ResponseEntity<Object> query(@RequestBody JSONObject query) {
//设备
QueryWrapper<PdmBiDevice> queryWrapper = new QueryWrapper<PdmBiDevice>()
.eq("workprocedure_id", "1535144552481034240")
.eq("is_used", true)
.eq("product_area",query.getString("product_area"));
if (StringUtils.isNotEmpty(query.getString("material_id"))){
queryWrapper.eq("material_id",query.getString("material_id"));
}
if (StringUtils.isNotEmpty(query.getString("device_code"))){
queryWrapper.eq("device_code",query.getString("device_code"));
}
List<Map<String, Object>> list = iDeviceService.listMaps(queryWrapper);
if (!CollectionUtils.isEmpty(list)){
Set materials = list.stream().map(a->a.get("material_id")).collect(Collectors.toSet());
Set devices = list.stream().map(a->a.get("device_code")).collect(Collectors.toSet());
HashMap<String, SchBaseTask> taskMap = taskService.list(new QueryWrapper<SchBaseTask>().in("point_code2", devices)
.eq("task_status", StatusEnum.TASK_RUNNING.getCode()))
.stream().collect(HashMap::new, (k, v) -> k.put(v.getPoint_code2(), v), HashMap::putAll);
Map<String, MdMeMaterialbase> materialMap = materialbaseService.list(new QueryWrapper<MdMeMaterialbase>()
.in("material_id", materials))
.stream().collect(HashMap::new, (k, v) -> k.put(v.getMaterial_id(), v), HashMap::putAll);
for (Map pdmBiDevice : list) {
MdMeMaterialbase materialbase = materialMap.get(pdmBiDevice.get("material_id"));
SchBaseTask baseTask = taskMap.get(pdmBiDevice.get("device_code"));
pdmBiDevice.put("material_name",materialbase!=null?materialbase.getMaterial_name():"");
pdmBiDevice.put("material_code",materialbase!=null?materialbase.getMaterial_code():"");
pdmBiDevice.put("material_spec",materialbase!=null?materialbase.getMaterial_spec():"");
pdmBiDevice.put("task_code",baseTask!=null?baseTask.getTask_code():"");
}
}
return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK);
}
@PostMapping("/submitWash")
@Log("提交清洗")
@SaIgnore
public ResponseEntity<Object> submitWash(@RequestBody String[] devices) {
if (devices.length>0){
List<PdmBiDevice> list = iDeviceService.list(new QueryWrapper<PdmBiDevice>()
.eq("workprocedure_id", "1535144552481034240")
.in("device_code", devices));
Set<String> collect = list.stream().map(PdmBiDevice::getMaterial_id).collect(Collectors.toSet());
if (!CollectionUtils.isEmpty(collect)){
if (collect.size()>1){
throw new BadRequestException("选择的储料仓必须是相同物料");
}
double sum = list.stream().mapToDouble(a->a.getDeviceinstor_weight().doubleValue()).sum();
if (sum>LIMIT_WEIGHT){
throw new BadRequestException("选择的储料仓必物料总重量大于150公斤");
}
//生成生坑清洗爬坡任务
try {
JSONObject param = new JSONObject(MapOf.of("devices", list));
RedissonUtils.lock( () -> washMachineryTask.createTask(param), "allocation:A1_SKQX", null);
}catch (Exception ex){
log.error("清洗上料任务失败:{}",ex);
throw new BadRequestException("任务创建失败:"+ex.getMessage());
}
}
}
return new ResponseEntity<>(HttpStatus.OK);
}
/*-----------------倒料---------------------*/
@PostMapping("/weighing")
@Log("称重")
@SaIgnore
public ResponseEntity<Object> weighing(@RequestBody JSONObject param) {
List<String> devices = (List<String>) param.get("list");
JSONObject req = new JSONObject();
req.put("device_code",devices.get(0));
JSONObject result = wmsToAcsService.request(req, "api/wms/handWeigh");
if (!StrUtil.equals(result.getString("status"), "200")) {
throw new BadRequestException((String)result.get("message"));
}
List<Map> ws = new ArrayList<>();
Map map = new HashMap<>();
map.put("deviceinstor_weight",StringUtils.isEmpty(result.getString("weight"))?"0":result.getString("weight"));
map.put("device_code",devices.get(0));
ws.add(map);
return new ResponseEntity<>(TableDataInfo.build(ws),HttpStatus.OK);
}
@PostMapping("/weighingFinish")
@Log("深坑倒料确认")
@SaIgnore
public ResponseEntity<Object> weighingFinish(@RequestBody JSONObject form) {
List<Map> list = new ArrayList<>();
String device_code = form.getString("device_code");
MdMeMaterialbase one = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>()
.eq("material_code", form.getString("material_code")));
if (one ==null){
throw new BadRequestException("当前物料编码不存在"+form.getString("material_code"));
}
iDeviceService.update(new UpdateWrapper<PdmBiDevice>()
.set("material_id",one.getMaterial_id())
.set("remark","")
.set("deviceinstor_weight",form.getBigDecimal("deviceinstor_weight"))
.eq("device_code",device_code));
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/materialList")
@Log("物料列表")
@SaIgnore
public ResponseEntity<Object> materialList(@RequestBody JSONObject query, PageQuery page) {
List<Map> list = new ArrayList<>();
QueryWrapper<MdMeMaterialbase> queryWrapper = new QueryWrapper<>();
if (StringUtils.isNotEmpty(query.getString("material_code"))){
queryWrapper.eq("material_code",query.getString("material_code"));
}
Page<MdMeMaterialbase> result = materialbaseService.page(page.build(),queryWrapper);
return new ResponseEntity<>(TableDataInfo.build(result),HttpStatus.OK);
}
/*-----------------清洗下料---------------------*/
@PostMapping("/washTasks")
@Log("物料列表")
@SaIgnore
public ResponseEntity<Object> washTasks(@RequestBody JSONObject query) {
List<Map<String, Object>> taskMap = taskService.listMaps(new QueryWrapper<SchBaseTask>()
.eq("task_status", StatusEnum.TASK_FINISH.getCode()).eq("task_step", 2));
if (!CollectionUtils.isEmpty(taskMap)){
Set materials = taskMap.stream().map(a->a.get("material_id")).collect(Collectors.toSet());
Map<String, MdMeMaterialbase> materialMap = materialbaseService.list(new QueryWrapper<MdMeMaterialbase>()
.in("material_id", materials))
.stream().collect(HashMap::new, (k, v) -> k.put(v.getMaterial_id(), v), HashMap::putAll);
for (Map task : taskMap) {
MdMeMaterialbase materialbase = materialMap.get(task.get("material_id"));
task.put("material_name",materialbase!=null?materialbase.getMaterial_name():"");
task.put("material_code",materialbase!=null?materialbase.getMaterial_code():"");
task.put("material_spec",materialbase!=null?materialbase.getMaterial_spec():"");
}
}
return new ResponseEntity<>(TableDataInfo.build(taskMap),HttpStatus.OK);
}
@PostMapping("//washTaskFinish")
@Log("强制完成任务")
@SaIgnore
public ResponseEntity<Object> washTaskFinish(@RequestBody JSONObject query) {
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_step",3)
.eq("task_id",query.getString("task_id")));
return new ResponseEntity<>(HttpStatus.OK);
}
@PostMapping("/washVechileInfo")
@Log("物料列表")
@SaIgnore
public ResponseEntity<Object> washVechileInfo(@RequestBody JSONObject query) {
JSONObject req = new JSONObject();
req.put("device_code","A1_CPQXJ_01_X");
JSONObject result = wmsToAcsService.request(req, "api/wms/handWeight");
if (!StrUtil.equals(result.getString("status"), "200")) {
throw new BadRequestException((String)result.get("message"));
}
List<Object> list = new ArrayList<>();
list.add(MapOf.of("weight",result.get("weight"),"vechile_code",result.getString("vechile_code")));
return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK);
}
}

View File

@@ -15,6 +15,7 @@ import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.RedissonUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.ext_manage.acs.service.WmsToAcsService;
import org.nl.wms.scheduler_manage.service.extendtask.plotter.PlotterCallEmptyTask;
@@ -25,6 +26,7 @@ import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -51,7 +53,7 @@ public class TmpKZController {
* @param param
* @return
*/
@RequestMapping("deviceinstorQty")
@PostMapping("deviceinstorQty")
@SaIgnore
public ResponseEntity<Object> deviceinstorQty(@RequestBody JSONObject param){
SchBasePoint one = basePointService.getOne(new QueryWrapper<SchBasePoint>()
@@ -70,7 +72,7 @@ public class TmpKZController {
return new ResponseEntity<>( HttpStatus.OK);
}
@RequestMapping("callVechile")
@PostMapping("callVechile")
@SaIgnore
public ResponseEntity<Object> callVechile(@RequestBody JSONObject param){
plotterCallEmptyTask.callEmpVechile(param.getString("device_code"));
@@ -78,7 +80,7 @@ public class TmpKZController {
}
//鞋料
@RequestMapping("kzunload")
@PostMapping("kzunload")
@SaIgnore
public ResponseEntity<Object> kzunload(@RequestBody JSONObject param) {
JSONObject jo = new JSONObject();
@@ -89,45 +91,51 @@ public class TmpKZController {
}
return new ResponseEntity<>( HttpStatus.OK);
}
@RequestMapping("kzresidue")
@PostMapping("kzresidue")
@SaIgnore
public ResponseEntity<Object> kzresidue(@RequestBody JSONObject param){
JSONObject jo = new JSONObject();
jo.put("next_point_code", param.getString("device_code"));
jo.put("start_point_code", "A1_KZ_SL");
jo.put("weight", param.getString("qty"));
JSONObject result = wmsToAcsService.request(jo, "api/wms/putOver");
if (!StrUtil.equals(result.getString("status"), "200")) {
throw new BadRequestException((String)result.get("message"));
}
RedissonUtils.lock(()->{
JSONObject jo = new JSONObject();
jo.put("next_point_code", param.getString("device_code"));
jo.put("start_point_code", "A1_KZ_SL");
jo.put("weight", param.getString("qty"));
JSONObject result = wmsToAcsService.request(jo, "api/wms/putOver");
if (!StrUtil.equals(result.getString("status"), "200")) {
throw new BadRequestException((String)result.get("message"));
}
},"kzresidue",null);
return new ResponseEntity<>( HttpStatus.OK);
}
@RequestMapping("tmpcallVechile")
@PostMapping("tmpcallVechile")
@SaIgnore
public ResponseEntity<Object> tmpcallVechile(@RequestBody JSONObject param){
JSONObject moveTask =taskService.createMoveTask("A1_BCPRKW_SD", "A1_KZ_SL", AcsTaskEnum.TASK_POINT_TO_POINT, AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20);
JSONArray data = new JSONArray();
data.add(moveTask);
Map<String, Object> result = wmsToAcsService.issueTaskToAcs2(data);
if (StrUtil.equals((String)result.get("status"), "400")) {
throw new BadRequestException((String)result.get("message"));
}
moveTask.put("task_status",StatusEnum.TASK_PUBLISH.getCode());
taskService.save(moveTask.toJavaObject(SchBaseTask.class));
RedissonUtils.lock(()->{
JSONObject moveTask =taskService.createMoveTask("A1_BCPRKW_SD", "A1_KZ_SL", AcsTaskEnum.TASK_POINT_TO_POINT, AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20);
JSONArray data = new JSONArray();
data.add(moveTask);
Map<String, Object> result = wmsToAcsService.issueTaskToAcs2(data);
if (StrUtil.equals((String)result.get("status"), "400")) {
throw new BadRequestException((String)result.get("message"));
}
moveTask.put("task_status",StatusEnum.TASK_FINISH.getCode());
taskService.save(moveTask.toJavaObject(SchBaseTask.class));
},"刻字上料呼叫载具",null);
return new ResponseEntity<>( HttpStatus.OK);
}
@RequestMapping("tmpsendVechile")
@PostMapping("tmpsendVechile")
@SaIgnore
public ResponseEntity<Object> tmpsendVechile(@RequestBody JSONObject param){
JSONObject moveTask = taskService.createMoveTask("A1_KZ_SL", "A1_BCPRKW_SD", AcsTaskEnum.TASK_POINT_TO_POINT, AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20);
JSONArray data = new JSONArray();
data.add(moveTask);
Map<String, Object> result = wmsToAcsService.issueTaskToAcs2(data);
if (StrUtil.equals((String)result.get("status"), "400")) {
throw new BadRequestException((String)result.get("message"));
}
moveTask.put("task_status",StatusEnum.TASK_PUBLISH.getCode());
taskService.save(moveTask.toJavaObject(SchBaseTask.class));
RedissonUtils.lock(()->{
JSONObject moveTask = taskService.createMoveTask("A1_KZ_SL", "A1_BCPRKW_SD", AcsTaskEnum.TASK_POINT_TO_POINT, AcsTaskEnum.ACS_TASK_TYPE_NON_WEIGHING_TASK_OF_PS20);
JSONArray data = new JSONArray();
data.add(moveTask);
Map<String, Object> result = wmsToAcsService.issueTaskToAcs2(data);
if (StrUtil.equals((String)result.get("status"), "400")) {
throw new BadRequestException((String)result.get("message"));
}
moveTask.put("task_status",StatusEnum.TASK_FINISH.getCode());
taskService.save(moveTask.toJavaObject(SchBaseTask.class));
},"刻字上料送载具",null);
return new ResponseEntity<>( HttpStatus.OK);
}

View File

@@ -3,6 +3,7 @@ package org.nl.wms.product_manage.controller.device;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -15,6 +16,8 @@ import org.nl.common.utils.SecurityUtils;
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.device.dto.DeviceQuery;
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.备份pdm.service.DeviceService;
import org.nl.wms.product_manage.备份pdm.service.dto.DeviceDto;
import org.springframework.beans.factory.annotation.Autowired;
@@ -40,6 +43,9 @@ public class PdmBiDeviceController {
private DeviceService deviceService;
@Autowired
private IPdmBiDeviceService iDeviceService;
@Autowired
private IPdmBiWorkprocedureService pdmBiWorkprocedureService;
@GetMapping
@Log("查询生产设备")
@@ -96,10 +102,8 @@ public class PdmBiDeviceController {
@GetMapping("/getWorkprocedure")
@Log("工序下拉")
//("工序下拉")
//@PreAuthorize("@el.check('device:list')")
public ResponseEntity<Object> getWorkprocedure () {
return new ResponseEntity<>(deviceService.getWorkprocedure(), HttpStatus.OK);
return new ResponseEntity<>(pdmBiWorkprocedureService.list(new QueryWrapper<PdmBiWorkprocedure>().eq("is_used",true)), HttpStatus.OK);
}
@GetMapping("/getDeviceList")

View File

@@ -2,6 +2,7 @@ package org.nl.wms.product_manage.controller.device;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -67,7 +68,7 @@ public class SpecialDeviceController {
@Log("更新物料")
//("更新物料")
@SaIgnore
public ResponseEntity<Object> queryList (@RequestBody JSONObject query){
public ResponseEntity<Object> update (@RequestBody JSONObject query){
String device_code = query.getString("device_code");
if (StringUtils.isNotEmpty(device_code)){
iDeviceService.update(new UpdateWrapper<PdmBiDevice>()
@@ -93,5 +94,15 @@ public class SpecialDeviceController {
}
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
}
@PostMapping("/setUsed")
@Log("设置启停")
@SaIgnore
public ResponseEntity<Object> setUsed (@RequestBody JSONObject query){
Assert.notNull(new Object[]{query,query.getString("device_code"),query.get("is_used")},"请求参数不能为空");
iDeviceService.update(new UpdateWrapper<PdmBiDevice>()
.set("is_used",query.getBoolean("is_used"))
.eq("device_code",query.getString("device_code")));
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -14,8 +14,10 @@ import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.WqlUtil;
import org.nl.wms.product_manage.service.workprocedure.IPdmBiWorkprocedureService;
import org.nl.wms.product_manage.备份pdm.service.DeviceService;
import org.nl.wms.product_manage.备份pdm.service.dto.DeviceDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -33,6 +35,8 @@ import java.util.Map;
@RequiredArgsConstructor
@Slf4j
public class DeviceServiceImpl implements DeviceService {
@Autowired
private IPdmBiWorkprocedureService pdmBiWorkprocedureService;
@Override
public Map<String,Object> queryAll(Map whereJson, Pageable page){

View File

@@ -1,164 +0,0 @@
package org.nl.wms.scheduler_manage.service.extendtask;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import groovy.lang.GroovyShell;
import groovy.lang.Script;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.ConstantParam;
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.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext_manage.acs.service.WmsToAcsService;
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.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWashorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWashorder;
import org.nl.wms.scheduler_manage.service.extendtask.manage.AbstractAcsTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* 专机任务
*/
@Slf4j
@Service
public class WashMachineryTask extends AbstractAcsTask {
private static final String SK_WORKPRODURE_ID = "1535144552481034240";
@Autowired
private IPdmProduceWashorderService iPdmProduceWashorderService;
@Autowired
private WmsToAcsService wmsToAcsService;
@Autowired
private IMdMeMaterialbaseService materialbaseService;
@Autowired
private IPdmBiDeviceService deviceService;
FileSystemResourceLoader loader = new FileSystemResourceLoader();
GroovyShell groovyShell = new GroovyShell();
@Override
@Transactional
public void updateTaskStatus(JSONObject param,String status) {
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
Assert.notEmpty(new Object[]{param,param.getString("workorder_id")},"参数不能为空");
String inDevices = param.getString("in_devices");
String workorderId = param.getString("workorder_id");
if (!StringUtils.isBlank(inDevices)){
String sql = Arrays.stream(inDevices.split(",")).collect(Collectors.joining("','"));
//跟新工单:状态为完成;跟新点位 material_id is not null and point_status = '2'
pointTab.update(MapOf.of("material_id","","point_status","1"),"point_code in ('"+sql+"')");
QueryWrapper<PdmProduceWashorder> query = new QueryWrapper<>();
PdmProduceWashorder update = new PdmProduceWashorder();
update.setIs_error(false);
update.setError_info("");
update.setUpdate_time(DateUtil.now());
update.setCreate_name("acs");
update.setStatus(StatusEnum.TASK_FINISH.getCode());
iPdmProduceWashorderService.update(update,new QueryWrapper<PdmProduceWashorder>().eq("workorder_id",workorderId));
}
}
@Override
@SneakyThrows
public String createTask(JSONObject param) {
//清洗机是否有物料重量上线?{"device_code":"A1_CPQXJ_01_S","type":"7"}
PdmProduceWashorder status = iPdmProduceWashorderService.getOne(new QueryWrapper<PdmProduceWashorder>().lt("status", WorkerOrderEnum.COMPLETE.getCode()));
if (status!=null){
return "";
}
//TODO:判断是否人工仓优先:人工仓一台一台爬,机械仓根据物料爬
QueryWrapper<PdmBiDevice> query = new QueryWrapper<PdmBiDevice>()
.gt("deviceinstor_qty", 0)
.eq("is_used", true)
.eq("workprocedure_id", SK_WORKPRODURE_ID)
.isNotNull("material_id")
.orderByDesc("deviceinstor_qty");
List<PdmBiDevice> SKQX = deviceService.list(query);
//查询深坑相同物料类型的点位:深坑单位:重量
if (SKQX.size()>0){
Map<String, List<PdmBiDevice>> collect = SKQX.stream().collect(Collectors.groupingBy(PdmBiDevice::getMaterial_id));
//查询清洗设备最大重量
Resource resource = loader.getResource("classpath:/groovyFile.groovy");
Script script = groovyShell.parse(resource.getFile());
ArrayList<JSONObject> result = (ArrayList)script.invokeMethod("getPoints", new Object[]{SKQX, collect, 9999999d});
//确认acs参数 创建工单下发acs
if (!CollectionUtils.isEmpty(result)){
String material_id = result.get(0).getString("material_id");
MdMeMaterialbase material = materialbaseService.getOne(new QueryWrapper<MdMeMaterialbase>().eq("material_id", material_id).eq("is_delete", false));
PdmProduceWashorder washorder = new PdmProduceWashorder();
washorder.setWorkorder_id(IdUtil.getStringId());
washorder.setWorkorder_code(IdUtil.getStringId());
washorder.setDevice_code(param.getString("device_code"));
washorder.setWeight(new BigDecimal(result.stream().mapToDouble(value -> value.getDouble("weight")).sum()));
washorder.setQty(new BigDecimal(result.stream().mapToDouble(value -> value.getDouble("qty")).sum()));
washorder.setMaterial_code(material.getMaterial_code());
washorder.setMaterial_spec(material.getMaterial_spec());
washorder.setMaterial_id(material.getMaterial_id());
washorder.setCreate_time(DateUtil.now());
washorder.setIn_devices(result.stream().map(a->a.getString("device_code")).collect(Collectors.joining(",")));
washorder.setProduct_area("A1");
washorder.setCreate_id("1");
washorder.setCreate_name("acs");
washorder.setStatus(StatusEnum.TASK_CREATE.getCode());
//下发:"人工框:一个一个爬坡:是人工仓优先还是自动仓优先
JSONArray request = new JSONArray();
JSONObject jsonObject = new JSONObject(MapOf.of("workorder_id", washorder.getWorkorder_id()
, "workorder_code", washorder.getWorkorder_code()
, "qty", washorder.getQty()
,"weight",washorder.getWeight()
, "material_code", washorder.getMaterial_code()
, "material_spec", washorder.getMaterial_spec()
, "device_code", washorder.getDevice_code()
, "in_devices", washorder.getIn_devices()
));
request.add(jsonObject);
Map<String, Object> response = wmsToAcsService.order(request);
if (response.get("status").equals(HttpStatus.BAD_REQUEST)){
washorder.setError_info((String) response.get("message"));
washorder.setStatus(StatusEnum.TASK_START_ERROR.getCode());
washorder.setIs_error(true);
}
iPdmProduceWashorderService.save(washorder);
}
}
return null;
}
@Override
public void cancel(String taskId) {
}
@Override
public void pointConfirm(JSONObject param) {
//查询深坑相同物料类型的点位
WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point");
JSONArray points = pointTab.query("material_id is not null and point_status = 1 and is_used = 1 and lock_type = 0 and region_code = '" + ConstantParam.SK_REGION + "'").getResultJSONArray(0);
}
}

View File

@@ -6,6 +6,7 @@ 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;
@@ -35,7 +36,7 @@ public abstract class AbstractAcsTask {
public void notifyAcs(JSONArray param){};
public List<SchBaseTask> schedulerTask(List<SchBaseTask> tasks){
return tasks;
return new ArrayList<>();
};

View File

@@ -110,7 +110,10 @@ public class WrapCallMaterialTask extends AbstractAcsTask {
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())
.nested(i -> i
.eq("point_code1", param.getString("device_code")).or()
.eq("point_code3", 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")));

View File

@@ -105,10 +105,13 @@ public class WrapSendEmptyTask extends AbstractAcsTask {
throw new BadRequestException("起点不能为空!");
}
// 判断当前点是否有未完成的任务
JSONObject taskObj = taskTab.query("is_delete='0' and point_code1 = '" + start_point_code + "' " +
"and task_status <> '" + StatusEnum.TASK_FINISH.getCode() + "' " +
"and task_status <> '" + StatusEnum.TASK_CANNEL.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj)) {
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.nested(i -> i
.eq("point_code1", param.getString("device_code")).or()
.eq("point_code3", param.getString("device_code")))
.lt("task_status", StatusEnum.TASK_FINISH.getCode())
);
if (ObjectUtil.isNotEmpty(list)) {
throw new BadRequestException("当前点位" + start_point_code + "存在未完成的任务");
}
String taskdtl_id = IdUtil.getSnowflake(1, 1).nextId() + "";

View File

@@ -0,0 +1,178 @@
package org.nl.wms.scheduler_manage.service.extendtask.wash;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
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 groovy.lang.GroovyShell;
import groovy.lang.Script;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.domain.ConstantParam;
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;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext_manage.acs.service.WmsToAcsService;
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.storage.service.storage.dao.StIvtStructattr;
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.IPdmProduceWashorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWashorder;
import org.nl.wms.scheduler_manage.service.extendtask.manage.AbstractAcsTask;
import org.nl.wms.scheduler_manage.service.extendtask.manage.TaskStatusEnum;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* 专机任务
*/
@Slf4j
@Service
public class WashMachineryTask extends AbstractAcsTask {
private static String SK_WORKPRODURE_ID = "1535144552481034240";
@Autowired
private ISchBaseTaskService taskService;
@Autowired
private WmsToAcsService wmsToAcsService;
@Autowired
private IPdmBiDeviceService deviceService;
@Override
@Transactional
public void updateTaskStatus(JSONObject param,String status) {
QueryWrapper<SchBaseTask> query = new QueryWrapper<>();
if (StringUtils.isNotEmpty(param.getString("in_pcsn"))){
query.eq("task_code",param.getString("in_pcsn"));
}
if (StringUtils.isNotEmpty(param.getString("task_id"))){
query.eq("task_id",param.getString("task_id"));
}
SchBaseTask taskDao = taskService.getOne(query);
// 更新任务状态为完成
if (taskDao.getTask_status().equals(TaskStatusEnum.FINISHED.getCode())||taskDao.getTask_status().equals(TaskStatusEnum.CANCEL.getCode())){
return;
}
if (status.equals(AcsTaskEnum.STATUS_FINISH.getCode())) {
taskDao.setTask_step(2);
taskDao.setTask_status(TaskStatusEnum.FINISHED.getCode());
taskDao.setUpdate_time(new Date());
taskDao.setFinished_type(AcsTaskEnum.AUTO_TASK_FINISHED_TYPE.getCode());
taskDao.setUpdate_name("acs");
deviceService.update(new UpdateWrapper<PdmBiDevice>()
.set("material_id","")
.set("is_used",true)
.set("deviceinstor_qty",0)
.set("deviceinstor_weight",0)
.set("update_time",DateUtil.now())
.in("device_code",taskDao.getPoint_code1().split(",")));
}
if (status.equals(AcsTaskEnum.STATUS_START.getCode())) {
taskDao.setTask_status(TaskStatusEnum.EXECUTING.getCode());
}
if (status.equals(AcsTaskEnum.STATUS_CANNEL.getCode())) {
taskDao.setTask_status(TaskStatusEnum.CANCEL.getCode());
deviceService.update(new UpdateWrapper<PdmBiDevice>()
.set("is_used",true)
.set("update_time",DateUtil.now())
.set("remark","")
.in("device_code",taskDao.getPoint_code1().split(",")));
}
taskService.updateById(taskDao);
}
@Override
@Transactional
public String createTask(JSONObject param) {
//清洗机是否有物料重量上线?{"devices":"string[]","material_id":"7"}
List<PdmBiDevice> devices = (List<PdmBiDevice>) param.get("devices");
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.in("point_code2", devices.stream().map(PdmBiDevice::getDevice_code).collect(Collectors.toList()))
.lt("task_status", StatusEnum.TASK_FINISH.getCode()));
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException("当前点位存在正在执行的任务:"
+list.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
}
JSONArray data = new JSONArray();
JSONArray items = new JSONArray();
ArrayList<String> start_points = new ArrayList<>();
JSONObject task = new JSONObject();
task.put("task_id", IdUtil.getStringId());
task.put("task_name", AcsTaskEnum.REQUEST_WASH_SEND_MATERIAL.getDesc());
task.put("task_type", AcsTaskEnum.REQUEST_WASH_SEND_MATERIAL.getCode());
task.put("task_code", CodeUtil.getNewCode("TASK_CODE"));
task.put("task_status", StatusEnum.TASK_PUBLISH.getCode());
task.put("point_code3", "A1_SKQXJ_01_S");//A1_SKQXJ_01_X
task.put("handle_class", this.getClass().getName());
task.put("is_send", "1");
task.put("is_delete", StatusEnum.STATUS_FLASE.getCode());
task.put("create_id", SecurityUtils.getCurrentUserId());
task.put("create_name", SecurityUtils.getCurrentNickName());
task.put("create_time", DateUtil.now());
task.put("is_auto_issue", false);
task.put("priority", "1");
task.put("task_step", 1);
task.put("material_id",devices.get(0).getMaterial_id());
task.put("material_qty",devices.stream().mapToInt(a->a.getDeviceinstor_weight().intValue()).sum());
task.put("point_code1",devices.stream().map(PdmBiDevice::getDevice_code).collect(Collectors.joining(",")));
taskService.save(task.toJavaObject(SchBaseTask.class));
// 下发
JSONObject acsRequest = new JSONObject(MapOf.of("device_code","A1_CPQXJ_01_S","in_pcsn",task.getString("task_code"),"in_devices",task.getString("point_code1")));
JSONObject result = wmsToAcsService.request(acsRequest, "api/wms/cleaningIn");
if (!StrUtil.equals(result.getString("status"), "200")) {
throw new BadRequestException((String)result.get("message"));
}
deviceService.update(new UpdateWrapper<PdmBiDevice>()
.set("is_used",false)
.set("update_time",DateUtil.now())
.set("remark",task.getString("task_id"))
.in("device_code",devices.stream().map(PdmBiDevice::getDevice_code).collect(Collectors.toList())));
return null;
}
@Override
@Transactional
public void cancel(String taskId) {
SchBaseTask taskDao = taskService.getById(taskId);
if (taskDao !=null){
taskDao.setTask_status(TaskStatusEnum.CANCEL.getCode());
deviceService.update(new UpdateWrapper<PdmBiDevice>()
.set("is_used",true)
.eq("device_code",taskDao.getPoint_code1()));
taskService.updateById(taskDao);
}
}
@Override
public void pointConfirm(JSONObject param) {
}
}

View File

@@ -66,7 +66,6 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
String task_id = MapUtil.getStr(map, "task_id");
String method_name = MapUtil.getStr(map, "method_name");
SchBaseTask taskObj = this.getOne(new QueryWrapper<SchBaseTask>().eq("task_id", task_id));
switch (method_name) { // forceFinish, cancel
case "immediateNotifyAcs":
if (Integer.valueOf(taskObj.getTask_status())<Integer.valueOf(TaskStatusEnum.EXECUTING.getCode())){

View File

@@ -1,12 +1,18 @@
package org.nl.wms.storage_manage.productmanage.controller.moreOrLess;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
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.wms.mps_manage.deliveryorder.service.IPcsDeliveryOrderService;
import org.nl.wms.storage_manage.productmanage.service.moreOrLess.IStIfDeliveryorderCpService;
import org.nl.wms.storage_manage.productmanage.service.moreOrLess.dto.DeliveQuery;
import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +22,9 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
* <p>
* 销售发货单表 前端控制器
@@ -34,11 +43,18 @@ public class StIfDeliveryorderCpController {
@Autowired
private IStIfDeliveryorderCpService iStIfDeliveryorderCpService;
@Autowired
private IPcsDeliveryOrderService pcsDeliveryOrderService;
@GetMapping
@Log("查询生产订单")
//("查询生产订单")
public ResponseEntity<Object> query(DeliveQuery query, PageQuery page){
return new ResponseEntity<>(iStIfDeliveryorderCpService.pageQuery(query,page), HttpStatus.OK);
Page<Object> pageable = PageHelper.startPage(page.getPage() + 1, page.getSize());
List<Map> mst_detail = pcsDeliveryOrderService.queryAll((Map) JSON.toJSON(query));
TableDataInfo<Map> build = TableDataInfo.build(mst_detail);
build.setTotalElements(pageable.getTotal());
return new ResponseEntity<>(build, HttpStatus.OK);
}
}

View File

@@ -97,18 +97,21 @@ public class StIvtIostorinvdtlCpServiceImpl extends ServiceImpl<StIvtIostorinvdt
.eq(MpsSaleOrder::getSale_code, row.getBase_bill_code())
.eq(MpsSaleOrder::getSeq_no, row.getBase_bill_table())
);
if (ObjectUtil.isEmpty(orderDao))
throw new BadRequestException("销售单不存在!");
// if (ObjectUtil.isEmpty(orderDao)) {
// throw new BadRequestException("销售单不存在!");
// }
row.setBase_billdtl_id(orderDao.getSale_id().toString());
row.setBase_bill_code(orderDao.getSale_code());
row.setBase_bill_type(orderDao.getSale_type());
row.setBase_bill_table(orderDao.getSeq_no().toString());
row.setBase_billdtl_id(orderDao==null?"":orderDao.getSale_id().toString());
row.setBase_bill_code(row.getBase_bill_code());
row.setBase_bill_type(orderDao==null?"":orderDao.getSale_type());
row.setBase_bill_table(row.getBase_bill_table());
if (IOSEnum.IO_TYPE.code("入库").equals(mstDao.getIo_type())){
// 入库: 更新销售单状态
orderDao.setStatus(IOSEnum.ORDER_STATUS.code("提交"));
iMpsSaleOrderService.updateById(orderDao);
if (orderDao!=null){
orderDao.setStatus(IOSEnum.ORDER_STATUS.code("提交"));
iMpsSaleOrderService.updateById(orderDao);
}
} else {
// 出库: 更新发货单状态
iStIfDeliveryorderCpService.update(
@@ -130,6 +133,8 @@ public class StIvtIostorinvdtlCpServiceImpl extends ServiceImpl<StIvtIostorinvdt
row.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
row.setReal_qty(row.getPlan_qty());
row.setUnassign_qty(row.getPlan_qty());
row.setQty_unit_id("16");
row.setQty_unit_name("\\");
this.save(row);
total_qty += row.getPlan_qty().doubleValue();
}

View File

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.anno.Log;
import org.nl.common.TableDataInfo;
import org.nl.common.domain.query.PageQuery;
@@ -39,14 +40,20 @@ public class SysDictController {
private final ISysDictService dictService;
@GetMapping
//("查询字典")
public ResponseEntity<Object> query(@RequestParam Map whereJson, PageQuery pageable){
return new ResponseEntity<>(TableDataInfo.build(dictService.queryAll(whereJson,pageable)), HttpStatus.OK);
}
@PostMapping("all")
@SaIgnore
public ResponseEntity<Object> queryAll(@RequestBody JSONObject whereJson){
List<Dict> list = dictService.list(new QueryWrapper<Dict>()
.eq("code", StringUtils.isEmpty(whereJson.getString("code"))?"product_area":whereJson.getString("code"))
.select("code","label","value"));
return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK);
}
@Log("新增字典")
@PostMapping
//("新增字典")
public ResponseEntity<Object> create(@RequestBody Dict dict){
dictService.create(dict);
return new ResponseEntity<>(HttpStatus.CREATED);
@@ -54,30 +61,24 @@ public class SysDictController {
@PutMapping
@Log("修改字典")
//("修改字典")
//@SaCheckPermission("@el.check('dict:edit')")
public ResponseEntity<Object> updateDict(@Validated @RequestBody Dict dto){
dictService.updateDict(dto);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@Log("删除字典")
//("删除字典")
@DeleteMapping
// @SaCheckPermission("dict:del")
public ResponseEntity<Object> delete(@RequestBody Set<String> ids){
dictService.deleteBatchByIds(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
@GetMapping("/dictDetail")
//("查询字典详情")
public ResponseEntity<Object> queryDetails(@RequestParam Map criteria, PageQuery pageable){
DictQuery dictQuery = JSONObject.parseObject(JSONObject.toJSONString(criteria), DictQuery.class);
return new ResponseEntity<>(TableDataInfo.build(dictService.queryAllDetail(dictQuery,pageable)),HttpStatus.OK);
}
//("查询多个字典详情")
@GetMapping(value = "/dictDetail/map")
public ResponseEntity<Object> getDictDetailMaps(@RequestParam String dictName){
String[] names = dictName.split("[,]");
@@ -89,9 +90,7 @@ public class SysDictController {
}
@Log("新增字典详情")
//("新增字典详情")
@PostMapping("/dictDetail")
// @SaCheckPermission("dict:add")
public ResponseEntity<Object> createDetail(@RequestBody Dict resources){
dictService.createDetail(resources);
return new ResponseEntity<>(HttpStatus.CREATED);

View File

@@ -131,7 +131,7 @@ generator:
#是否开启 swagger-ui
swagger:
enabled: true
enabled: false
# IP 本地解析
ip:

View File

@@ -2,7 +2,7 @@ spring:
freemarker:
check-template-location: false
profiles:
active: dev
active: dev3
jackson:
time-zone: GMT+8
data:

View File

@@ -19,7 +19,7 @@ https://juejin.cn/post/6844903775631572999
<!--引入默认的一些设置-->
<!-- <include resource="log/AutoCreateInst.xml"/>-->
<appender name="esLogAppender" class="com.internetitem.logback.elasticsearch.ElasticsearchAppender">
<url>http://127.0.0.1:9200/_bulk</url>
<url>http://192.168.46.225:9200/_bulk</url>
<index>${esIndex}</index>
<type>mes_log</type>
<loggerName>es-logger</loggerName> <!-- optional -->