diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/indoor_manipulator/IndoorManipulatorDeviceDriver.java b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/indoor_manipulator/IndoorManipulatorDeviceDriver.java index 9c9b1ce2d..ad89dd0c2 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/indoor_manipulator/IndoorManipulatorDeviceDriver.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/device_driver/basedriver/indoor_manipulator/IndoorManipulatorDeviceDriver.java @@ -251,6 +251,10 @@ public class IndoorManipulatorDeviceDriver extends AbstractOpcDeviceDriver imple inst = null; message = null; } + if(mode == 2 && requireSucess){ + this.setRequireSucess(false); + logServer.deviceExecuteLog(this.device_code, "", "", "再次信号复位requireSuccess:" + requireSucess); + } logServer.deviceItemValue(this.device_code, "mode", String.valueOf(mode)); logServer.deviceExecuteLog(this.device_code, "", "", "信号mode:" + last_mode + "->" + mode); } diff --git a/acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index 34740dbfd..5f82b1174 100644 --- a/acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs/nladmin-system/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -279,7 +279,15 @@ public class TaskServiceImpl implements TaskService, ApplicationAutoInitial { map.put("point_code", point_code); } if (!StrUtil.isEmpty(create_time) && !StrUtil.isEmpty(end_time)) { + // 将字符串时间解析为日期对象 + Date date = DateUtil.parse(create_time.replace("Z", " UTC"), "yyyy-MM-dd'T'HH:mm:ss.SSS Z"); + // 将日期对象加上8小时 + /*Date newDate = DateUtil.offsetHour(date, 8);*/ + // 将新日期对象格式化为字符串时间 + create_time = DateUtil.formatDateTime(date); map.put("create_time", create_time); + Date date1 = DateUtil.parse(end_time.replace("Z", " UTC"), "yyyy-MM-dd'T'HH:mm:ss.SSS Z"); + end_time = DateUtil.formatDateTime(date1); map.put("end_time", end_time); } JSONObject jsonObject1 = diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java index 4af089dc2..f4c18fdda 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java @@ -30,7 +30,6 @@ import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import java.util.Date; -import java.util.List; import static org.nl.acs.agv.server.impl.NDCAgvServiceImpl.Bytes2HexString; @@ -233,13 +232,14 @@ public class TwoNDCSocketConnectionAutoRun extends AbstractAutoRunnable { if (device.getDeviceDriver() instanceof StandardAutodoorDeviceDriver) { standardAutodoorDeviceDriver = (StandardAutodoorDeviceDriver) device.getDeviceDriver(); try { - standardAutodoorDeviceDriver.writing("to_command", 1); + standardAutodoorDeviceDriver.writing("to_open", "1"); + standardAutodoorDeviceDriver.writing("to_close", "0"); } catch (Exception e) { log.info("下发电气信号失败:" + e.getMessage()); e.printStackTrace(); } - if (standardAutodoorDeviceDriver.getAction() == 1 && standardAutodoorDeviceDriver.getTo_command() == 1) { - log.info("下发开门信号值为:{}", standardAutodoorDeviceDriver.getTo_command()); + if (standardAutodoorDeviceDriver.getOpen() == 1 && standardAutodoorDeviceDriver.getToOpen() == 1 ) { + log.info("下发开门信号值为:{},下发关门信号值为:{}", standardAutodoorDeviceDriver.getToOpen(), standardAutodoorDeviceDriver.getToClose()); data = ndcAgvService.sendAgvTwoModeInst(phase, index, 0); } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/ItemProtocol.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/ItemProtocol.java index 719a56825..ba8e72069 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/ItemProtocol.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/ItemProtocol.java @@ -1,5 +1,6 @@ package org.nl.acs.device_driver.autodoor.standard_autodoor; +import cn.hutool.core.util.StrUtil; import lombok.extern.slf4j.Slf4j; import org.nl.acs.device.device_driver.standard_inspect.ItemDto; @@ -8,13 +9,10 @@ import java.util.List; @Slf4j public class ItemProtocol { - public static String item_heartbeat = "heartbeat"; - public static String item_mode = "mode"; - public static String item_state = "state"; - public static String item_action = "action"; - public static String item_error = "error"; - public static String item_to_command = "to_command"; - public static String item_to_state = "to_state"; + public static String item_open = "open"; + public static String item_close = "close"; + public static String item_to_open = "to_open"; + public static String item_to_close = "to_close"; private StandardAutodoorDeviceDriver driver; @@ -23,35 +21,27 @@ public class ItemProtocol { this.driver = driver; } - public int getHeartbeat() { - return this.getOpcIntegerValue(item_heartbeat); + public int getOpen() { + return this.getOpcIntegerValue(item_open); } - public int getMode() { - return this.getOpcIntegerValue(item_mode); + public int getClose() { + return this.getOpcIntegerValue(item_close); } - public int getAction() { - return this.getOpcIntegerValue(item_action); + + public int getToOpen() { + return this.getOpcIntegerValue(item_to_open); } - public int getError() { - return this.getOpcIntegerValue(item_error); + public int getToClose() { + return this.getOpcIntegerValue(item_to_close); } - public int getToCommand() { - return this.getOpcIntegerValue(item_to_command); - } - - public int getToState() { - return this.getOpcIntegerValue(item_to_state); - } - - public int getOpcIntegerValue(String protocol) { Integer value = this.driver.getIntegeregerValue(protocol); if (value == null) { -// log.error("读取错误!"); + // log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!"); } else { return value; } @@ -59,22 +49,34 @@ public class ItemProtocol { } + public String getOpcStringValue(String protocol) { + String value = this.driver.getStringValue(protocol); + if (StrUtil.isEmpty(value)) { + + } else { + return value; + } + return "0"; + } + public static List getReadableItemDtos() { ArrayList list = new ArrayList(); - list.add(new ItemDto(item_heartbeat, "心跳", "DB600.B0")); - list.add(new ItemDto(item_mode, "工作模式", "DB600.B1", Boolean.valueOf(true))); - list.add(new ItemDto(item_state, "工作状态", "DB600.B2")); - list.add(new ItemDto(item_action, "动作信号", "DB600.B3")); - list.add(new ItemDto(item_error, "报警信号", "DB600.B4")); + list.add(new ItemDto(item_open, "开到位", "10001")); + list.add(new ItemDto(item_close, "关到位", "10002")); return list; } public static List getWriteableItemDtos() { ArrayList list = new ArrayList(); - list.add(new ItemDto(item_to_command, "作业命令", "DB601.W2", Boolean.valueOf(true))); - list.add(new ItemDto(item_to_state, "下发状态", "DB601.W3", Boolean.valueOf(true))); + list.add(new ItemDto(item_to_open, "下发开门", "00001" )); + list.add(new ItemDto(item_to_close, "下发关门", "00002")); return list; } + + @Override + public String toString() { + return ""; + } } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/StandardAutodoorDefination.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/StandardAutodoorDefination.java index c37bb0cff..77ae81092 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/StandardAutodoorDefination.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/StandardAutodoorDefination.java @@ -2,12 +2,11 @@ package org.nl.acs.device_driver.autodoor.standard_autodoor; import org.nl.acs.device.device_driver.standard_inspect.ItemDto; import org.nl.acs.device.domain.Device; +import org.nl.acs.device.enums.DeviceType; import org.nl.acs.device_driver.DeviceDriver; import org.nl.acs.device_driver.defination.OpcDeviceDriverDefination; -import org.nl.acs.device.enums.DeviceType; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.LinkedList; import java.util.List; @@ -31,6 +30,7 @@ public class StandardAutodoorDefination implements OpcDeviceDriverDefination { return "标准版-自动门"; } + @Override public DeviceDriver getDriverInstance(Device device) { return (new StandardAutodoorDeviceDriver()).setDevice(device).setDriverDefination(this); @@ -49,18 +49,10 @@ public class StandardAutodoorDefination implements OpcDeviceDriverDefination { return types; } + @Override public List getReadableItemDtos() { - return getReadableItemDtos2(); - } - - public static List getReadableItemDtos2() { - List list = new ArrayList(); - list.add(new ItemDto(ItemProtocol.item_heartbeat, "心跳", "DB600.B0")); - list.add(new ItemDto(ItemProtocol.item_mode, "工作状态", "DB600.B1", true)); - list.add(new ItemDto(ItemProtocol.item_action, "动作信号", "DB600.B2")); - list.add(new ItemDto(ItemProtocol.item_error, "报警信号", "DB600.B4")); - return list; + return ItemProtocol.getReadableItemDtos(); } @Override diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/StandardAutodoorDeviceDriver.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/StandardAutodoorDeviceDriver.java index d86e60da9..edcfcfced 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/StandardAutodoorDeviceDriver.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/autodoor/standard_autodoor/StandardAutodoorDeviceDriver.java @@ -4,98 +4,41 @@ import com.alibaba.fastjson.JSONObject; import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.nl.acs.common.base.CommonFinalParam; import org.nl.acs.device.domain.Device; -import org.nl.acs.ext.wms.data.one.feedBackTaskStatus.FeedBackTaskStatusRequest; -import org.nl.acs.ext.wms.service.AcsToWmsService; -import org.nl.acs.utils.ReadUtil; -import org.nl.acs.device.service.DeviceService; import org.nl.acs.device_driver.DeviceDriver; import org.nl.acs.device_driver.driver.AbstractOpcDeviceDriver; import org.nl.acs.device_driver.driver.ExecutableDeviceDriver; -import org.nl.acs.instruction.service.InstructionService; -import org.nl.acs.route.service.RouteLineService; -import org.nl.acs.task.service.TaskService; +import org.nl.acs.log.service.DeviceExecuteLogService; +import org.nl.acs.monitor.DeviceStageMonitor; +import org.nl.acs.utils.ReadUtil; import org.nl.config.SpringContextHolder; import org.openscada.opc.lib.da.Server; -import java.util.Date; import java.util.HashMap; import java.util.Map; + /** * 自动门驱动 */ @Slf4j @Data @RequiredArgsConstructor -public class StandardAutodoorDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver { +public class StandardAutodoorDeviceDriver extends AbstractOpcDeviceDriver implements DeviceDriver, ExecutableDeviceDriver, DeviceStageMonitor { protected ItemProtocol itemProtocol = new ItemProtocol(this); + DeviceExecuteLogService logServer = SpringContextHolder.getBean("deviceExecuteLogServiceImpl"); - InstructionService instructionService = SpringContextHolder.getBean("instructionServiceImpl"); + int open = 0; + int close = 0; - DeviceService deviceservice = SpringContextHolder.getBean("deviceServiceImpl"); + int last_open = 0; + int last_close = 0; - RouteLineService routelineserver = SpringContextHolder.getBean("routeLineServiceImpl"); - - TaskService taskserver = SpringContextHolder.getBean("taskServiceImpl"); - - AcsToWmsService acsToWmsService = SpringContextHolder.getBean("acsToWmsServiceImpl"); - String container; - String container_type_desc; - String last_container_type_desc; - String last_container; - //放货准备锁 - String putReadyLock = null; - //有货标记 - protected boolean has_goods_tag = false; - String devicecode; - int mode = 0; - int action = 0; - int error = 0; - Boolean iserror = false; - - int move = 0; - int task = 0; - int state = 0; - int last_state = 0; - int last_action = 0; - int last_mode = 0; - int last_error = 0; - int last_move = 0; - int last_task = 0; - - boolean hasVehicle = false; - boolean isReady = false; - protected int instruction_num = 0; - protected int instruction_num_truth = 0; - protected boolean hasGoods = false; - boolean isFold = false; - private String assemble_check_tag; - private Boolean sampleMode0; - private Boolean sampleMode3; - private Integer sampleError; - private Boolean sampleOnline; - protected String displayMessage = null; - public int display_message_time_out = 30000; - public Date display_message_time; - protected String current_stage_instruction_message; - protected String last_stage_instruction_message; - Integer heartbeat_tag; - private Date instruction_require_time = new Date(); - private Date instruction_finished_time = new Date(); - - int to_command = 0; - int last_to_command = 0; - - - - private int instruction_require_time_out; - boolean requireSucess = false; - - private int instruction_finished_time_out; - - int branchProtocol = 0; + int toOpen = 0; + int last_toOpen = 0; + int toClose = 0; + int last_toClose = 0; + String device_code = null; @Override public Device getDevice() { @@ -107,55 +50,44 @@ public class StandardAutodoorDeviceDriver extends AbstractOpcDeviceDriver implem public void execute() { String message = null; - String device_code = this.getDevice().getDevice_code(); - mode = this.itemProtocol.getMode(); - action = this.itemProtocol.getAction(); - error = this.itemProtocol.getError(); - to_command = this.itemProtocol.getToCommand(); - if (mode != last_mode) { + device_code = this.getDevice().getDevice_code(); + open = this.itemProtocol.getOpen(); + close = this.itemProtocol.getClose(); + toOpen = this.itemProtocol.getToOpen(); + toClose = this.itemProtocol.getToClose(); + if (open != last_open) { + logServer.deviceExecuteLog(this.device_code, "", "", "信号open:" + last_open + "->" + open); } - if (action != last_action) { + if (close != last_close) { + logServer.deviceExecuteLog(this.device_code, "", "", "信号close:" + last_close + "->" + close); + if(close ==1 ){ + this.writing("to_close","0"); + } } - if (error != last_error) { - } - if (state != last_state) { - //固化室状态变更后通知lms更新固化室状态 - FeedBackTaskStatusRequest request = new FeedBackTaskStatusRequest(); - request.setState(String.valueOf(state)); - request.setDevice_code(this.devicecode); - request.setType(CommonFinalParam.ONE); - acsToWmsService.notify(request); - } - last_action = action; - last_mode = mode; - last_error = error; - last_state = state; - last_to_command = to_command; - //message = StringFormatUtl.format("设备报警:{}", new Object[]{}); - -// String manual_create_task = this.getDevice().getExtraValue().get("manual_create_task").toString(); + if (toClose != last_toClose) { + logServer.deviceExecuteLog(this.device_code, "", "", "信号toClose:" + last_toClose + "->" + toClose); + } + if (toOpen != last_toOpen) { + logServer.deviceExecuteLog(this.device_code, "", "", "信号toOpen:" + last_toOpen + "->" + toOpen); + } + last_open = open; + last_close = close; + last_toClose = toClose; + last_toOpen = toOpen; } - public synchronized String getStatus() { - JSONObject jo = new JSONObject(); - if (action == 1) { - jo.put("name", this.getDevice().getDevice_code()); - jo.put("status", "OPEN"); + public void writing(String param, String value) { + String to_param = this.getDevice().getOpc_server_code() + "." + this.getDevice().getOpc_plc_code() + "." + this.getDevice().getDevice_code() + + "." + param; + Map itemMap = new HashMap(); + itemMap.put(to_param, Integer.parseInt(value)); - } else if (action == 2) { - jo.put("name", this.getDevice().getDevice_code()); - jo.put("status", "CLOSE"); - - } else { - jo.put("name", this.getDevice().getDevice_code()); - jo.put("status", "ERROR"); - } - return jo.toString(); + this.control(itemMap); + logServer.deviceExecuteLog(device_code, "", "", "下发电气信号设备号:" + device_code + ",下发电气:" + to_param + ",下发电气值:" + value); } - public void writing(String param, int command) { String to_command = String.format("%s.%s.%s.%s", this.getDevice().getOpc_server_code(), this.getDevice().getOpc_plc_code(), this.getDevice().getDevice_code(), param); @@ -165,19 +97,37 @@ public class StandardAutodoorDeviceDriver extends AbstractOpcDeviceDriver implem itemMap.put(to_command, command); ReadUtil.write(itemMap, server); log.info("下发PLC信号:{},{}", to_command, command); - System.out.println("设备:" + devicecode + ",下发PLC信号:" + to_command + ",value:" + command); + System.out.println("设备:" + this.device_code + ",下发PLC信号:" + to_command + ",value:" + command); } - public synchronized void OpenOrClose(String type) { - - //开门 - if (CommonFinalParam.ONE.equals(type)) { - writing(ItemProtocol.item_to_command, 1); - } else { - writing(ItemProtocol.item_to_command, 2); + @Override + public JSONObject getDeviceStatusName() { + JSONObject jo = new JSONObject(); + String open = ""; + String close = ""; + if (this.getOpen() == 0) { + open = "未知"; + } else if (this.getOpen() == 1) { + open = "开到位"; } + if (this.getClose() == 0) { + open = "未知"; + } else if (this.getClose() == 1) { + open = "关到位"; + } + jo.put("device_name", this.getDevice().getDevice_name()); + jo.put("open", open); + jo.put("close", close); + jo.put("isOnline", true); + + return jo; + } + + @Override + public void setDeviceStatus(JSONObject data) { } + } diff --git a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index 4856c9122..a20ce577a 100644 --- a/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/acs2/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -1,6 +1,8 @@ package org.nl.acs.instruction.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.ListUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; @@ -368,6 +370,15 @@ public class InstructionServiceImpl extends CommonServiceImpl instructionMybatis = instructionMapper.selectList(Wrappers.lambdaQuery(InstructionMybatis.class) + .eq(InstructionMybatis::getTask_code, dto.getTask_code())); + if(CollUtil.isNotEmpty(instructionMybatis) && instructionMybatis.stream().anyMatch(inst -> inst.getStart_device_code() + .equals(start_device_code))){ + return; + } + } String currentUsername = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); if (StrUtil.isEmpty(dto.getRoute_plan_code())) { @@ -430,7 +441,7 @@ public class InstructionServiceImpl extends CommonServiceImpl shortPathsList = diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/autotask/CleanTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/autotask/CleanTask.java new file mode 100644 index 000000000..2feac49b0 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/autotask/CleanTask.java @@ -0,0 +1,27 @@ +package org.nl.wms.autotask; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.system.service.param.ISysParamService; +import org.springframework.stereotype.Component; + +/** + * 自动清除日志(操作日志、异常日志)数据 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CleanTask { + private final ISysParamService paramService; + + public void run() { + //delete from sys_log where DATE(create_time) <= DATE(DATE_SUB(NOW(),INTERVAL 30 day)) limit 10; + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); + int days = Integer.parseInt(paramService.findByCode("task_day").getValue()); + taskTab.delete("DATE(create_time) <= DATE(DATE_SUB(NOW(),INTERVAL " + days + " day))"); + + log.info("自动清理任务执行成功...!"); + } + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialbaseController.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialbaseController.java index 5b7e71d47..c960062d2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialbaseController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialbaseController.java @@ -83,15 +83,6 @@ public class MaterialbaseController { return new ResponseEntity<>(MaterOptTypeEnum.getObj(materOpt_code), HttpStatus.OK); } - @PostMapping("/synchronize") - @Log("物料同步") - - //@PreAuthorize("@el.check('materialtype:list')") - public ResponseEntity synchronize(@RequestBody Map whereJson) { - materialBaseService.synchronize(whereJson); - return new ResponseEntity<>(HttpStatus.OK); - } - @Log("查询产品系列类型") @GetMapping("/getProductSeries") diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialbaseService.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialbaseService.java index 7b69d9d38..ed22cc14f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialbaseService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialbaseService.java @@ -88,8 +88,6 @@ public interface MaterialbaseService { */ JSONObject getMaterOptType(String materOpt_code); - void synchronize(Map whereJson); - JSONArray getProductSeries(String parent_class_id); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java index 3ad1abbb6..6ea777cfa 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java @@ -39,7 +39,6 @@ import java.util.Set; @Slf4j public class MaterialbaseServiceImpl implements MaterialbaseService { private final ClassstandardService classstandardService; - //private final WmsToErpService wmsToErpService; @Override public Map queryAll(Map whereJson, Pageable page) { @@ -214,12 +213,6 @@ public class MaterialbaseServiceImpl implements MaterialbaseService { return MaterOptTypeEnum.getObj(materOpt_code); } - @Override - public void synchronize(Map whereJson) { - /* wmsToErpService.getClassInfo(null); - wmsToErpService.getMaterialInfo(null);*/ - } - @Override public JSONArray getProductSeries(String parent_class_id) { WQLObject wo = WQLObject.getWQLObject("MD_PB_ClassStandard"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructivtController.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructivtController.java index bd0b2b469..c5b40bc46 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructivtController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/rest/StructivtController.java @@ -39,6 +39,7 @@ public class StructivtController { //@PreAuthorize("@el.check('structivt:list')") public ResponseEntity query(@RequestParam Map whereJson, Pageable page, String[] product_area, String[] ivt_flag) { return new ResponseEntity<>(structivtService.queryAll(whereJson, page, product_area, ivt_flag), HttpStatus.OK); + } @PostMapping diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructattrServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructattrServiceImpl.java index e7bd880af..3fe0b3eef 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructattrServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/StructattrServiceImpl.java @@ -28,10 +28,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.function.BiConsumer; import java.util.stream.Collectors; @@ -541,8 +538,9 @@ public class StructattrServiceImpl implements StructattrService { int createNum = whereJson.getIntValue("num"); // 开始生成数 int createNum_start = 1; + // 前缀 - String prefix = whereJson.getString("prefix"); + String prefix = ""; if (ObjectUtil.isNotEmpty(jsonAttr)) { String struct_code = jsonAttr.getString("struct_code"); @@ -559,6 +557,21 @@ public class StructattrServiceImpl implements StructattrService { createNum_start += Integer.parseInt(result); prefix = struct_code.substring(0, firstIndex); + } else { + // 截取第一个 - 之前的数据集合 + + List attrList = WQL.getWO("QST_STRUCT_ATTR").addParam("flag", "2").process() + .getResultJSONArray(0).toJavaList(JSONObject.class); + + List subStringList = attrList.stream() + .filter(row -> row.getString("struct_code").contains("-")) + .map(row -> row.getString("struct_code").substring(0, row.getString("struct_code").indexOf("-"))) + .distinct() + .sorted() + .filter(row -> row.matches("-?\\d+(\\.\\d+)?")) + .collect(Collectors.toList()); + + prefix = String.valueOf(Integer.parseInt(subStringList.get(subStringList.size() - 1)) + 1); } /* @@ -651,13 +664,16 @@ public class StructattrServiceImpl implements StructattrService { /* * 判断前缀是否存在 */ - List attrList = attrTab.query("1 = 1").getResultJSONArray(0).toJavaList(JSONObject.class); + List attrList = WQL.getWO("QST_STRUCT_ATTR").addParam("flag", "2").process() + .getResultJSONArray(0).toJavaList(JSONObject.class); // 截取第一个 - 之前的数据集合 List subStringList = attrList.stream() .filter(row -> row.getString("struct_code").contains("-")) .map(row -> row.getString("struct_code").substring(0, row.getString("struct_code").indexOf("-"))) .distinct() + .sorted() + .filter(row -> row.matches("-?\\d+(\\.\\d+)?")) .collect(Collectors.toList()); // 判断是否有相同的前缀 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCT_ATTR.wql b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCT_ATTR.wql index a90e95868..29a15aa70 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCT_ATTR.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STRUCT_ATTR.wql @@ -86,5 +86,19 @@ ENDPAGEQUERY ENDIF + IF 输入.flag = "2" + QUERY + SELECT + struct.* + FROM + st_ivt_structattr struct + LEFT JOIN st_ivt_sectattr sect ON sect.sect_id = struct.sect_id + WHERE + sect.sect_type_attr = '09' + + ENDSELECT + ENDQUERY + ENDIF + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls index 2a54c742c..706870f48 100644 Binary files a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls and b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/stivt.xls differ diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_TASK_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_TASK_01.wql index 3373402ea..0b37c4b2a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_TASK_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/wql/QSCH_TASK_01.wql @@ -55,11 +55,13 @@ SELECT task.*, md.class_name task_type_name, + user.person_name AS create_name1, dict.label task_status_name, case when task.task_type like '0105%' then 'LK' ELSE task.product_area end AS final_product_area FROM sch_base_task task LEFT JOIN md_pb_classstandard md ON task.task_type = md.class_code + LEFT JOIN sys_user user ON user.username = task.create_name LEFT JOIN sys_dict dict ON dict.`value` = task.task_status AND dict.`code` = 'task_status' WHERE 1=1 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/CheckOutBillService.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/CheckOutBillService.java index 20f1c8e0e..f1cf33c5a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/CheckOutBillService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/CheckOutBillService.java @@ -295,4 +295,12 @@ public interface CheckOutBillService { * @throws IOException / */ void download(Map map, HttpServletResponse response, String[] stor_id, String[] bill_status, String[] bill_type) throws IOException; + + /** + * 更新是否超期 + * @param whereJson { + * 主表数据 + * } + */ + JSONObject updataIsOverdue(JSONObject whereJson); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/QST_IVT_RAWASSISTISTOR.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/QST_IVT_RAWASSISTISTOR.wql index 9249da216..c7746bbf1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/QST_IVT_RAWASSISTISTOR.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/wql/QST_IVT_RAWASSISTISTOR.wql @@ -340,57 +340,6 @@ ENDQUERY ENDIF - IF 输入.flag = "8" - PAGEQUERY - SELECT - pp.CREATE_DATE AS receive_date, - pp.VBILLCODE AS source_bill_code, - mb.material_code, - mb.material_name, - class.class_desc, - mb.material_id, - pp.QTY AS receive_qty, - ( CASE WHEN a.real_qty IS NULL THEN pp.QTY ELSE ( pp.QTY - a.real_qty ) END ) AS need_qty, - mu.unit_name AS qty_unit_name, - '采购订单' AS source_type_name, - mu.measure_unit_id AS qty_unit_id, - pp.id AS source_billdtl_id, - 'PO' AS source_bill_type, - 'PCS_IF_PurchaseOrderProc' AS source_bill_table, - pp.id AS base_billdtl_id, - 'PO' AS base_bill_type, - '' AS base_bill_code, - 'PCS_IF_PurchaseOrderProc' AS base_bill_table - FROM - pcs_if_purchaseorderproc pp - LEFT JOIN md_me_materialbase mb ON mb.ext_id = pp.ITEM_ID - INNER JOIN md_pb_classstandard class ON class.class_id = mb.material_type_id - INNER JOIN md_pb_measureunit mu ON mu.ext_id = pp.M_UNIT_ID - LEFT JOIN ( SELECT dtl.source_billdtl_id, SUM( dtl.real_qty ) AS real_qty FROM st_ivt_iostorinvdtl dtl GROUP BY source_billdtl_id ) a ON a.source_billdtl_id = pp.id - WHERE - pp.proc_status IN ( '01', '02' ) - AND - pp.DR='0' - AND - mb.material_type_id IN 输入.clsss_ids - OPTION 输入.material_search <> "" - (mb.material_code like 输入.material_search - OR - mb.material_name like 输入.material_search) - ENDOPTION - OPTION 输入.bill_code <> "" - pp.VBILLCODE like 输入.bill_code - ENDOPTION - OPTION 输入.begin_time <> "" - pp.CREATE_DATE >= 输入.begin_time - ENDOPTION - OPTION 输入.end_time <> "" - pp.CREATE_DATE <= 输入.end_time - ENDOPTION - ENDSELECT - ENDPAGEQUERY - ENDIF - IF 输入.flag = "9" PAGEQUERY SELECT diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/ProductScrapServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/ProductScrapServiceImpl.java index 9d1f70e4a..1de86337c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/ProductScrapServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/ProductScrapServiceImpl.java @@ -479,6 +479,10 @@ public class ProductScrapServiceImpl implements ProductScrapService { .addParam("flag", "3").addParam("stor_id", stor_id).addParam("in_stor_id",in_stor_id) .process().getResultJSONArray(0).toJavaList(JSONObject.class); + // 查询不合格品来源字典 + List dictList = WQL.getWO("QST_IVT_PRODUCTSCRAP").addParam("flag", "3") + .process().getResultJSONArray(0).toJavaList(JSONObject.class); + // 循环获取的数据 ArrayList resultList = new ArrayList<>(); for (int i = 0; i < read.size(); i++) { @@ -488,10 +492,14 @@ public class ProductScrapServiceImpl implements ProductScrapService { String pcsn = list.get(0).toString(); // sap批次号 String sap_pcsn = list.get(1).toString(); - // 木箱号 +/* // 木箱号 String box_no = list.get(2).toString(); // 重量 - String qty = list.get(3).toString(); + String qty = list.get(3).toString();*/ + // 不合格品来源 + String fail_source = list.get(4).toString(); + // 不合格描述 + String remark = list.get(5).toString(); // 子卷号和批次号必须有一个不为空 if (ObjectUtil.isEmpty(pcsn) && ObjectUtil.isEmpty(sap_pcsn)) { @@ -513,6 +521,23 @@ public class ProductScrapServiceImpl implements ProductScrapService { .filter(row -> row.getString("storagevehicle_code").equals(json.getString("storagevehicle_code"))) .collect(Collectors.toList()); + // 匹配不合格品来源 + String value = ""; + List label = dictList.stream() + .filter(row -> row.getString("label").equals(fail_source)) + .collect(Collectors.toList()); + + if (ObjectUtil.isNotEmpty(label)) { + value = label.get(0).getString("value"); + } + + // 插入不合格品来源、不合格品描述 + String finalValue = value; + boxList.forEach(row -> { + row.put("fail_source", finalValue); + row.put("remark",remark); + }); + resultList.addAll(boxList); } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_PRODUCTSCRAP.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_PRODUCTSCRAP.wql index d3dcb1ca1..cae98e5cd 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_PRODUCTSCRAP.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_PRODUCTSCRAP.wql @@ -109,4 +109,16 @@ order by dtl.seq_no ENDSELECT ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + * + FROM + sys_dict + WHERE + code = 'FAIL_SOURCE' + ENDSELECT + ENDQUERY ENDIF \ No newline at end of file diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java index 800368551..67455fed7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java @@ -312,4 +312,11 @@ public class CheckOutBillController { public void download(@RequestParam Map map, HttpServletResponse response, String[] stor_id, String[] bill_status, String[] bill_type) throws IOException { checkOutBillService.download(map, response, stor_id, bill_status, bill_type); } + + + @PostMapping("/updataIsOverdue") + @Log("更新是否超期") + public ResponseEntity updataIsOverdue(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(checkOutBillService.updataIsOverdue(whereJson),HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java index 35440c6c6..185fbcb52 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java @@ -1022,6 +1022,32 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { FileUtil.downloadExcel(list, response); } + @Override + public JSONObject updataIsOverdue(JSONObject whereJson) { + // 出入库主表 + WQLObject mstTab = WQLObject.getWQLObject("st_ivt_iostorinv"); + // 出入库分配明细表 + WQLObject disTab = WQLObject.getWQLObject("st_ivt_iostorinvdis"); + + // 更新主表 + JSONObject jsonMst = mstTab.query("iostorinv_id = '" + whereJson.getString("iostorinv_id") + "'").uniqueResult(0); + jsonMst.put("is_overdue", whereJson.getString("is_overdue")); + mstTab.update(jsonMst); + + // 计算超期数量 + List disList = disTab.query("iostorinvdtl_id = '" + whereJson.getString("iostorinvdtl_id") + "' AND is_overdue = '1'") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + double overdue_qyt = disList.stream() + .map(row -> row.getDoubleValue("plan_qty")) + .reduce(Double::sum).orElse(0.00); + + JSONObject result = new JSONObject(); + result.put("overdue_qyt",overdue_qyt); + result.put("mst", jsonMst); + return result; + } + @Override @Transactional(rollbackFor = Exception.class) public void update(JSONObject whereJson) { @@ -1290,11 +1316,12 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { dtl.put("work_status", "00"); } - // 判断是否超期 - if (ivt2.getString("is_overdue").equals("1")) { - dtl.put("work_status", "01"); + if (jo_mst.getString("is_overdue").equals("1")) { + // 判断是否超期 + if (ivt2.getString("is_overdue").equals("1")) { + dtl.put("work_status", "01"); + } } - wo_dis.insert(dtl); } //记录需锁定的仓位 @@ -1358,9 +1385,12 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { } // 判断是否超期 - if (jsonIvt.getString("is_overdue").equals("1")) { - dtl.put("work_status", "01"); + if (jo_mst.getString("is_overdue").equals("1")) { + if (jsonIvt.getString("is_overdue").equals("1")) { + dtl.put("work_status", "01"); + } } + wo_dis.insert(dtl); //记录需锁定的仓位 (如果此明细有相同物料的且子卷号不能为空的则在最后一个明细分配完成后锁定仓位) @@ -1534,6 +1564,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { dtl.put("is_issued", "0"); dtl.put("plan_qty", ivt2.getDoubleValue("change_qty")); dtl.put("real_qty", ivt2.getDoubleValue("change_qty")); + dtl.put("is_overdue", ivt2.getString("is_overdue")); dtl.put("instorage_time", ivt2.getString("instorage_time")); // 如果所属仓位是虚拟区 则将分配明细状态变为生成 JSONObject jsonSect = wo_sect.query("sect_id = '" + ivt2.getString("sect_id") + "'").uniqueResult(0); @@ -1542,6 +1573,14 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { } else { dtl.put("work_status", "00"); } + + if (jo_mst.getString("is_overdue").equals("1")) { + // 判断是否超期 + if (ivt2.getString("is_overdue").equals("1")) { + dtl.put("work_status", "01"); + } + } + wo_dis.insert(dtl); } //记录需锁定的仓位 @@ -1594,6 +1633,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { dtl.put("is_issued", "0"); dtl.put("plan_qty", jsonIvt.getDoubleValue("change_qty")); dtl.put("real_qty", jsonIvt.getDoubleValue("change_qty")); + dtl.put("is_overdue", jsonIvt.getString("is_overdue")); dtl.put("instorage_time", jsonIvt.getString("instorage_time")); // 如果所属仓位是虚拟区 则将分配明细状态变为生成 JSONObject jsonSect = wo_sect.query("sect_id = '" + jsonIvt.getString("sect_id") + "'").uniqueResult(0); @@ -1602,6 +1642,14 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { } else { dtl.put("work_status", "00"); } + + if (jo_mst.getString("is_overdue").equals("1")) { + // 判断是否超期 + if (jsonIvt.getString("is_overdue").equals("1")) { + dtl.put("work_status", "01"); + } + } + wo_dis.insert(dtl); //记录需锁定的仓位 Struct_map.put(jsonIvt.getString("struct_id"), jsonIvt); @@ -1658,6 +1706,8 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { json.put("is_issued", "0"); json.put("plan_qty", ivt.getDoubleValue("change_qty")); json.put("real_qty", ivt.getDoubleValue("change_qty")); + json.put("is_overdue", ivt.getString("is_overdue")); + json.put("instorage_time", ivt.getString("instorage_time")); // 如果所属仓位是虚拟区 则将分配明细状态变为生成 JSONObject jsonSect = wo_sect.query("sect_id = '" + ivt.getString("sect_id") + "'").uniqueResult(0); if (StrUtil.equals(jsonSect.getString("sect_type_attr"), "09")) { @@ -1665,6 +1715,14 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { } else { json.put("work_status", "00"); } + + // 判断是否超期 + if (jo_mst.getString("is_overdue").equals("1")) { + if (ivt.getString("is_overdue").equals("1")) { + json.put("work_status", "01"); + } + } + wo_dis.insert(json); // 更新明细 @@ -4384,6 +4442,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { dtl.put("is_issued", "0"); dtl.put("plan_qty", ivt.getDoubleValue("change_qty")); dtl.put("real_qty", ivt.getDoubleValue("change_qty")); + dtl.put("is_overdue", ivt.getString("is_overdue")); dtl.put("instorage_time", ivt.getString("instorage_time")); // 如果所属仓位是虚拟区 则将分配明细状态变为生成 JSONObject jsonSect = wo_sect.query("sect_id = '" + ivt.getString("sect_id") + "'").uniqueResult(0); @@ -4392,6 +4451,14 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { } else { dtl.put("work_status", "00"); } + + // 判断是否超期 + if (jo_mst.getString("is_overdue").equals("1")) { + if (ivt.getString("is_overdue").equals("1")) { + dtl.put("work_status", "01"); + } + } + wo_dis.insert(dtl); //记录需锁定的仓位 Struct_map.put(ivt.getString("struct_id"), ivt); @@ -4453,6 +4520,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { json.put("is_issued", "0"); json.put("plan_qty", ivt.getDoubleValue("change_qty")); json.put("real_qty", ivt.getDoubleValue("change_qty")); + json.put("is_overdue", ivt.getString("is_overdue")); json.put("instorage_time", ivt.getString("instorage_time")); // 如果所属仓位是虚拟区 则将分配明细状态变为生成 JSONObject jsonSect = wo_sect.query("sect_id = '" + ivt.getString("sect_id") + "'").uniqueResult(0); @@ -4461,6 +4529,14 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { } else { json.put("work_status", "00"); } + + // 判断是否超期 + if (jo_mst.getString("is_overdue").equals("1")) { + if (ivt.getString("is_overdue").equals("1")) { + json.put("work_status", "01"); + } + } + wo_dis.insert(json); // 更新明细 @@ -4585,8 +4661,12 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { dis.put("bill_code", jo_mst.getString("bill_code")); dis.put("bill_table", "ST_IVT_IOStorInv"); - if (dis.getString("is_overdue").equals("1")) { - storPublicService.IOStor(dis, "12"); + if (jo_mst.getString("is_overdue").equals("1")) { + if (dis.getString("is_overdue").equals("1")) { + storPublicService.IOStor(dis, "12"); + } else { + storPublicService.IOStor(dis, "21"); + } } else { storPublicService.IOStor(dis, "21"); } @@ -4596,15 +4676,23 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { from_start.put("struct_id", dis.getString("struct_id")); from_start.put("lock_type", "1"); from_start.put("is_overdue", dis.getString("is_overdue")); - if (dis.getString("is_overdue").equals("1")) { - from_start.put("storagevehicle_code", dis.getString("box_no")); + + if (jo_mst.getString("is_overdue").equals("1")) { + if (dis.getString("is_overdue").equals("1")) { + from_start.put("storagevehicle_code", dis.getString("box_no")); + } else { + from_start.put("storagevehicle_code", ""); + } } else { from_start.put("storagevehicle_code", ""); } + storPublicService.updateStructAndPoint(from_start); - if (dis.getString("is_overdue").equals("1")) { - continue; + if (jo_mst.getString("is_overdue").equals("1")) { + if (dis.getString("is_overdue").equals("1")) { + continue; + } } //查询对应明细 @@ -4664,7 +4752,14 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { } JSONObject mst_row = mst_wql.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); - JSONArray dis_rows = dis_wql.query("iostorinv_id = '" + iostorinv_id + "' and is_overdue = '0'").getResultJSONArray(0); + + JSONArray dis_rows = new JSONArray(); + + if (jo_mst.getString("is_overdue").equals("1")) { + dis_rows = dis_wql.query("iostorinv_id = '" + iostorinv_id + "' and is_overdue = '0'").getResultJSONArray(0); + } else { + dis_rows = dis_wql.query("iostorinv_id = '" + iostorinv_id + "'").getResultJSONArray(0); + } //生成手工入库单 String new_iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; @@ -4767,7 +4862,13 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { if ("1003".equals(out_jo.getString("bill_type")) || "1006".equals(out_jo.getString("bill_type"))) { //如果为返检出库或者改切出库删除对应的包装关系 - JSONArray dis_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinv_id = '" + iostorinv_id + "' and is_overdue = '0'").getResultJSONArray(0); + JSONArray dis_rows = new JSONArray(); + if (jo_mst.getString("is_overdue").equals("1")) { + dis_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinv_id = '" + iostorinv_id + "' and is_overdue = '0'").getResultJSONArray(0); + } else { + dis_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinv_id = '" + iostorinv_id + "'").getResultJSONArray(0); + } + for (int i = 0; i < dis_rows.size(); i++) { JSONObject dis_row = dis_rows.getJSONObject(i); String sect_code = dis_row.getString("sect_code"); @@ -5329,12 +5430,15 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { // 回传sap JSONObject jsonMst = mstTab.query("iostorinv_id = '" + whereJson.getString("iostorinv_id") + "'").uniqueResult(0); - JSONArray jsonArr = new JSONArray(); - jsonArr.add(jsonMst); + // 判断单据是否是完成状态:只回传完成状态的单据 + if (jsonMst.getString("bill_status").equals("99")) { + JSONArray jsonArr = new JSONArray(); + jsonArr.add(jsonMst); - JSONObject param = new JSONObject(); - param.put("rows", jsonArr); - inAndOutReturnService.uploadSAP(param); + JSONObject param = new JSONObject(); + param.put("rows", jsonArr); + inAndOutReturnService.uploadSAP(param); + } } @Override diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/QST_IVT_CHECKOUTBILL.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/QST_IVT_CHECKOUTBILL.wql index 9f3c310f5..7a3c9cb0f 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/QST_IVT_CHECKOUTBILL.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/QST_IVT_CHECKOUTBILL.wql @@ -97,6 +97,7 @@ cu.cust_simple_name, a.plan_qty, attr.stor_name AS out_stor_name + FROM ST_IVT_IOStorInv ios LEFT JOIN md_cs_customerbase cu ON ios.cust_code = cu.cust_code @@ -106,15 +107,32 @@ LEFT JOIN pdm_bi_subpackagerelationrecord sub ON sub.container_name = dis.pcsn AND dis.box_no = sub.package_box_sn AND sub.bill_code = ios.bill_code LEFT JOIN ( SELECT - SUM(a.assign_qty) AS plan_qty, + SUM(a.plan_qty) AS plan_qty, a.iostorinv_id FROM - st_ivt_iostorinvdtl a + st_ivt_iostorinvdis a LEFT JOIN ST_IVT_IOStorInv b ON a.iostorinv_id = b.iostorinv_id WHERE b.io_type = '1' and b.is_delete='0' + and a.is_overdue = '0' + and b.is_overdue = '1' GROUP BY a.iostorinv_id + + UNION + + SELECT + SUM(a.plan_qty) AS plan_qty, + a.iostorinv_id + FROM + st_ivt_iostorinvdis a + LEFT JOIN ST_IVT_IOStorInv b ON a.iostorinv_id = b.iostorinv_id + WHERE + b.io_type = '1' + and b.is_delete='0' + and b.is_overdue = '0' + GROUP BY a.iostorinv_id + ) a ON a.iostorinv_id = ios.iostorinv_id WHERE ios.io_type = '1' @@ -369,7 +387,14 @@ struct.storagevehicle_id, struct.storagevehicle_code, point.point_id, - sub.sap_pcsn + sub.sap_pcsn, + CASE + WHEN SUBSTRING(sub.container_name,1,1) = 'B' AND DATEDIFF( NOW(), sub.date_of_production ) > '180' + THEN '1' + WHEN SUBSTRING(sub.container_name,1,1) != 'B' AND DATEDIFF( NOW(), sub.date_of_production ) > '90' + THEN '1' + ELSE '0' + END AS is_overdue FROM ST_IVT_StructIvt ivt LEFT JOIN st_ivt_structattr struct ON struct.struct_id = ivt.struct_id @@ -437,7 +462,14 @@ struct.storagevehicle_id, struct.storagevehicle_code, point.point_id, - sub.sap_pcsn + sub.sap_pcsn, + CASE + WHEN SUBSTRING(sub.container_name,1,1) = 'B' AND DATEDIFF( NOW(), sub.date_of_production ) > '180' + THEN '1' + WHEN SUBSTRING(sub.container_name,1,1) != 'B' AND DATEDIFF( NOW(), sub.date_of_production ) > '90' + THEN '1' + ELSE '0' + END AS is_overdue FROM ST_IVT_StructIvt ivt2 LEFT JOIN st_ivt_structattr struct ON struct.struct_id = ivt2.struct_id diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_OUTIVT01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_OUTIVT01.wql index ebd2006ad..189f4aaed 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_OUTIVT01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/wql/ST_OUTIVT01.wql @@ -62,7 +62,11 @@ attr.struct_name, attr.struct_code, CASE - WHEN DATEDIFF( NOW(), sub.date_of_production ) > '90' THEN '1' ELSE '0' + WHEN SUBSTRING(sub.container_name,1,1) = 'B' AND DATEDIFF( NOW(), sub.date_of_production ) > '180' + THEN '1' + WHEN SUBSTRING(sub.container_name,1,1) != 'B' AND DATEDIFF( NOW(), sub.date_of_production ) > '90' + THEN '1' + ELSE '0' END AS is_overdue FROM ST_IVT_StructIvt ivt @@ -164,7 +168,11 @@ attr.struct_name, attr.struct_code, CASE - WHEN DATEDIFF( NOW(), sub.date_of_production ) > '90' THEN '1' ELSE '0' + WHEN SUBSTRING(sub.container_name,1,1) = 'B' AND DATEDIFF( NOW(), sub.date_of_production ) > '180' + THEN '1' + WHEN SUBSTRING(sub.container_name,1,1) != 'B' AND DATEDIFF( NOW(), sub.date_of_production ) > '90' + THEN '1' + ELSE '0' END AS is_overdue FROM ST_IVT_StructIvt ivt diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/SendReceiveQuery.wql b/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/SendReceiveQuery.wql index 65021bc4f..472ff5511 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/SendReceiveQuery.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/SendReceiveQuery.wql @@ -18,7 +18,6 @@ 输入.begin_time TYPEAS s_string 输入.end_time TYPEAS s_string 输入.material_code TYPEAS s_string - 输入.classIds TYPEAS f_string 输入.pcsn TYPEAS s_string 输入.sap_pcsn TYPEAS s_string 输入.package_box_sn TYPEAS s_string @@ -53,14 +52,9 @@ stor.stor_name, da.sect_date, da.pcsn, - da.quality_scode, - class.class_name, - class.class_code, mater.material_id, mater.material_code, mater.material_name, - mater.material_model, - unit.unit_name, da.start_num, da.in_num, da.out_num, @@ -77,22 +71,17 @@ sum(end_num) AS end_num, sum(more_num) AS more_num, sum(less_num) AS less_num, - max(material_id) AS material_id, + max( material_id ) AS material_id, max(stor_id) AS stor_id, - max(sect_date) AS sect_date, - max(quality_scode) AS quality_scode, - max(pcsn) AS pcsn + sect_date, + pcsn FROM ST_IVT_IOStorDaily a GROUP BY - a.material_id, - a.quality_scode, a.pcsn, a.sect_date ) AS da LEFT JOIN MD_ME_MaterialBase mater ON da.material_id = mater.material_id - LEFT JOIN md_pb_classstandard class ON mater.material_type_id = class.class_id - LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = mater.base_unit_id LEFT JOIN st_ivt_bsrealstorattr stor ON stor.stor_id = da.stor_id LEFT JOIN pdm_bi_subpackagerelation sub ON sub.container_name = da.pcsn WHERE 1=1 @@ -127,10 +116,6 @@ sub.package_box_sn like 输入.package_box_sn ENDOPTION - OPTION 输入.classIds <> "" - class.class_id in 输入.classIds - ENDOPTION - ENDSELECT ENDPAGEQUERY ENDIF diff --git a/lms/nladmin-ui/src/views/login.vue b/lms/nladmin-ui/src/views/login.vue index 59876e706..fecaae2f5 100644 --- a/lms/nladmin-ui/src/views/login.vue +++ b/lms/nladmin-ui/src/views/login.vue @@ -56,7 +56,7 @@ export default { cookiePass: '', loginForm: { username: 'admin', - password: '123456', + password: '', rememberMe: false, code: '', uuid: '' diff --git a/lms/nladmin-ui/src/views/wms/basedata/master/material/index.vue b/lms/nladmin-ui/src/views/wms/basedata/master/material/index.vue index 13a7cd9a5..6f317bc34 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/master/material/index.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/master/material/index.vue @@ -36,18 +36,7 @@ - - - 同步 - - + { - this.fullscreenLoading = false - this.crud.notify('同步成功!', CRUD.NOTIFICATION_TYPE.SUCCESS) - }).catch(() => { - this.fullscreenLoading = false - }) - }, queryClassId() { const param = { 'class_idStr': this.class_idStr diff --git a/lms/nladmin-ui/src/views/wms/basedata/master/material/materialbase.js b/lms/nladmin-ui/src/views/wms/basedata/master/material/materialbase.js index 719b2a112..3b3f371f3 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/master/material/materialbase.js +++ b/lms/nladmin-ui/src/views/wms/basedata/master/material/materialbase.js @@ -40,14 +40,6 @@ export function isAlongMaterType(data) { }) } -export function synchronize(data) { - return request({ - url: 'api/Materialbase/synchronize', - method: 'post', - data - }) -} - export function getProductSeries() { return request({ url: 'api/Materialbase/getProductSeries', @@ -55,4 +47,4 @@ export function getProductSeries() { }) } -export default { add, edit, del, getMaterOptType, isAlongMaterType, synchronize, getProductSeries } +export default { add, edit, del, getMaterOptType, isAlongMaterType, getProductSeries } diff --git a/lms/nladmin-ui/src/views/wms/basedata/st/ivt/index.vue b/lms/nladmin-ui/src/views/wms/basedata/st/ivt/index.vue index 5c7ff08f1..329ee1879 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/st/ivt/index.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/st/ivt/index.vue @@ -241,7 +241,7 @@ - + diff --git a/lms/nladmin-ui/src/views/wms/basedata/st/struct/OneCreateDialog.vue b/lms/nladmin-ui/src/views/wms/basedata/st/struct/OneCreateDialog.vue index 5d77938be..f4b5ff0a7 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/st/struct/OneCreateDialog.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/st/struct/OneCreateDialog.vue @@ -25,11 +25,11 @@ - + @@ -126,10 +126,6 @@ export default { return this.crud.notify('库区不能为空', CRUD.NOTIFICATION_TYPE.INFO) } - if (this.formMst.prefix === '') { - return this.crud.notify('前缀不能为空', CRUD.NOTIFICATION_TYPE.INFO) - } - if (this.formMst.num === '') { return this.crud.notify('数量不能为空', CRUD.NOTIFICATION_TYPE.INFO) } diff --git a/lms/nladmin-ui/src/views/wms/pdm/ivt/cutpointivt/index.vue b/lms/nladmin-ui/src/views/wms/pdm/ivt/cutpointivt/index.vue index d85b120b6..1a1a28ffc 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/ivt/cutpointivt/index.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/ivt/cutpointivt/index.vue @@ -175,7 +175,7 @@ - + @@ -338,7 +355,8 @@ export default { invtypelist: [], pointList: [], rules: { - } + }, + overdue_qyt: 0 } }, watch: { @@ -459,6 +477,7 @@ export default { deleteRow(row) { checkoutbill.oneCancel(row).then(res => { this.queryTableDtl() + this.updataIsOverdue() }) }, handleDtlCurrentChange(current) { @@ -517,6 +536,7 @@ export default { checkoutbill.allDiv(this.mstrow).then(res => { this.crud.notify('分配成功!', CRUD.NOTIFICATION_TYPE.INFO) this.queryTableDtl() + this.updataIsOverdue() this.loadingAlldiv = false }).catch(() => { this.loadingAlldiv = false @@ -532,6 +552,7 @@ export default { this.mstrow.iostorinvdtl_id = this.currentRow.iostorinvdtl_id checkoutbill.allDivOne(this.mstrow).then(res => { this.queryTableDtl() + this.updataIsOverdue() this.loadingAutodiv = false }).catch(() => { this.loadingAutodiv = false @@ -542,6 +563,7 @@ export default { this.loadingAlldiv = true checkoutbill.allCancel(this.mstrow).then(res => { this.queryTableDtl() + this.updataIsOverdue() this.loadingAlldiv = false }).catch(() => { this.loadingAlldiv = false @@ -553,6 +575,7 @@ export default { checkoutbill.allCancel(this.currentRow).then(res => { this.queryTableDtl() this.loadingAlldiv = false + this.updataIsOverdue() }).catch(() => { this.loadingAlldiv = false }) @@ -673,6 +696,10 @@ export default { this.tableDtl = res }) }, + queryTableDtl2() { + this.queryTableDtl() + this.updataIsOverdue() + }, queryTableDdis(iostorinvdtl_id) { checkoutbill.getOutBillDis2({ 'iostorinvdtl_id': iostorinvdtl_id, 'bill_status': '01' }).then(res => { this.tabledis = res @@ -689,6 +716,23 @@ export default { return 'background: yellow' } } + }, + rowStyle({ row, rowIndex }) { + const stylejson = {} + + if (this.rowmst.is_overdue === '1') { + if (row.is_overdue === '1') { + stylejson.background = '#f3f071' + return stylejson + } + } + }, + updataIsOverdue() { + this.rowmst.iostorinvdtl_id = this.currentRow.iostorinvdtl_id + checkoutbill.updataIsOverdue(this.rowmst).then(res => { + this.overdue_qyt = res.overdue_qyt + this.rowmst = res.mst + }) } } } diff --git a/lms/nladmin-ui/src/views/wms/st/outbill/checkoutbill.js b/lms/nladmin-ui/src/views/wms/st/outbill/checkoutbill.js index f63c48161..289a2d586 100644 --- a/lms/nladmin-ui/src/views/wms/st/outbill/checkoutbill.js +++ b/lms/nladmin-ui/src/views/wms/st/outbill/checkoutbill.js @@ -241,4 +241,11 @@ export function outReturn(data) { data }) } -export default { add, edit, del, allDiv, allCancel, getOutBillDtl, getOutBillDis, getOutBillDis2, setPoint, oneSetPoint, getOutBillTask, getStructIvt, manualDiv, confirm, issueTask, finishTask, cancleTaskfinish, getInvTypes, paramByCodeType, schAreaType, backConfirm, getOutBillDisDtl, getType, allDivOne, moneySubmit, getDisNum, queryBox, getOutBillTask2, oneCancel, cancelTask, allSetPoint, oneSetPoint2, outReturn } +export function updataIsOverdue(data) { + return request({ + url: '/api/checkoutbill/updataIsOverdue', + method: 'post', + data + }) +} +export default { add, edit, del, allDiv, allCancel, getOutBillDtl, getOutBillDis, getOutBillDis2, setPoint, oneSetPoint, getOutBillTask, getStructIvt, manualDiv, confirm, issueTask, finishTask, cancleTaskfinish, getInvTypes, paramByCodeType, schAreaType, backConfirm, getOutBillDisDtl, getType, allDivOne, moneySubmit, getDisNum, queryBox, getOutBillTask2, oneCancel, cancelTask, allSetPoint, oneSetPoint2, outReturn, updataIsOverdue } diff --git a/lms/nladmin-ui/src/views/wms/st/outbill/index.vue b/lms/nladmin-ui/src/views/wms/st/outbill/index.vue index 8362bc70a..36df88fc5 100644 --- a/lms/nladmin-ui/src/views/wms/st/outbill/index.vue +++ b/lms/nladmin-ui/src/views/wms/st/outbill/index.vue @@ -319,6 +319,7 @@ + @@ -375,7 +376,7 @@ export default { }, mixins: [presenter(), header(), crud()], // 数据字典 - dicts: ['io_bill_status', 'ST_CREATE_MODE', 'ST_INV_OUT_TYPE', 'is_upload'], + dicts: ['io_bill_status', 'ST_CREATE_MODE', 'ST_INV_OUT_TYPE', 'is_upload', 'IS_OR_NOT'], data() { return { height: document.documentElement.clientHeight - 180 + 'px;', @@ -510,6 +511,9 @@ export default { create_modeFormat(row) { return this.dict.label.ST_CREATE_MODE[row.create_mode] }, + isOverdue(row) { + return this.dict.label.IS_OR_NOT[row.is_overdue] + }, handleCurrentChange(current) { if (current === null) { this.dis_flag = true diff --git a/lms/nladmin-ui/src/views/wms/stat/pastivt/index.vue b/lms/nladmin-ui/src/views/wms/stat/pastivt/index.vue index a347415b9..d56bfa50e 100644 --- a/lms/nladmin-ui/src/views/wms/stat/pastivt/index.vue +++ b/lms/nladmin-ui/src/views/wms/stat/pastivt/index.vue @@ -129,17 +129,6 @@ @keyup.enter.native="crud.toQuery" /> - - - + + + - + diff --git a/lms/nladmin-ui/src/views/wms/statistics/sendReceiveQuery/index.vue b/lms/nladmin-ui/src/views/wms/statistics/sendReceiveQuery/index.vue index 0ef07bedf..381deb5b8 100644 --- a/lms/nladmin-ui/src/views/wms/statistics/sendReceiveQuery/index.vue +++ b/lms/nladmin-ui/src/views/wms/statistics/sendReceiveQuery/index.vue @@ -96,25 +96,15 @@ - - - - - - - - - -