From e11d91580db474e9657b0902896b9fd527831e84 Mon Sep 17 00:00:00 2001 From: "ZHOUZ\\Noble'lift" <1014987728@qq.com> Date: Mon, 14 Aug 2023 18:05:12 +0800 Subject: [PATCH] =?UTF-8?q?rev:=E6=96=B0=E5=A2=9E=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E7=9B=91=E6=8E=A7=E5=8A=9F=E8=83=BD=EF=BC=9B?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=82=B9=E4=BD=8D=E6=9F=A5=E8=AF=A2=E5=92=8C?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E4=BF=AE=E6=94=B9=EF=BC=9B=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E4=B8=8B=E6=96=B9ACSAGV=E5=8F=82=E6=95=B0=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=9B=E7=83=98=E7=AE=B1=E6=B8=A9=E5=BA=A6=E5=92=8C=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E7=94=A8redis=E8=BF=9B=E8=A1=8C=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E5=92=8C=E6=9F=A5=E8=AF=A2=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/user/UserController.java | 30 +- .../master/rest/DeviceStatusController.java | 59 ++++ .../master/service/DeviceStatusService.java | 44 +++ .../service/impl/DeviceStatusServiceImpl.java | 101 ++++++ .../java/org/nl/wms/basedata/st/wql/stivt.xls | Bin 309248 -> 309248 bytes .../wms/ext/acs/rest/AcsToWmsController.java | 7 + .../wms/ext/acs/service/AcsToWmsService.java | 9 + .../acs/service/impl/AcsToWmsServiceImpl.java | 38 ++- .../acs/service/impl/WmsToAcsServiceImpl.java | 12 +- .../mes/service/impl/MesToLmsServiceImpl.java | 8 + .../wms/ext/sap/rest/SapToLmsController.java | 8 + .../wms/ext/sap/service/SapToLmsService.java | 2 + .../sap/service/impl/SapToLmsServiceImpl.java | 87 +++++ .../mps/service/impl/BakingServiceImpl.java | 76 +++-- .../mps/service/impl/RawFoilServiceImpl.java | 3 + .../wms/pda/mps/wql/PDA_OVENINANDOUT_01.wql | 103 ++++-- .../pda/st/rest/ProductInstorController.java | 6 +- .../impl/ProductInstorServiceImpl.java | 8 + .../java/org/nl/wms/pda/st/wql/PDA_ST_01.wql | 6 +- .../service/impl/HotPointIvtServiceImpl.java | 16 + .../src/main/java/org/nl/wms/pdm/wql/em.xls | Bin 203776 -> 169984 bytes .../src/main/java/org/nl/wms/pdm/wql/pdm.xls | Bin 251904 -> 252928 bytes .../wms/sch/manage/AutoQueryDeviceStatus.java | 12 +- .../org/nl/wms/sch/manage/AutoSendFeiShu.java | 93 ++++++ .../org/nl/wms/sch/rest/PointController.java | 13 + .../sch/service/impl/PointServiceImpl.java | 8 +- .../org/nl/wms/sch/tasks/CallEmpReelTask.java | 6 +- .../org/nl/wms/sch/tasks/CoolCutTask.java | 6 +- .../org/nl/wms/sch/tasks/CutTrussTask.java | 6 +- .../org/nl/wms/sch/tasks/InCoolIvtTask.java | 6 +- .../java/org/nl/wms/sch/tasks/InHotTask.java | 6 +- .../java/org/nl/wms/sch/tasks/OutHotTask.java | 6 +- .../service/impl/InBillQueryServiceImpl.java | 3 + .../nl/wms/stat/wql/ST_IVT_INBILLQUERY.wql | 6 + lms/nladmin-ui/src/views/system/user/user.js | 10 +- .../wms/agvrush/devicestatus/devicestatus.js | 27 ++ .../views/wms/agvrush/devicestatus/index.vue | 195 +++++++++++ lms/nladmin-ui/src/views/wms/pdm/bi/index.vue | 308 ++++++++++++------ .../src/views/wms/sch/point/index.vue | 6 +- .../src/views/wms/sch/point/point.js | 10 +- .../src/views/wms/stat/inbillquery/index.vue | 5 +- 41 files changed, 1157 insertions(+), 198 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/DeviceStatusController.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/DeviceStatusService.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/DeviceStatusServiceImpl.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendFeiShu.java create mode 100644 lms/nladmin-ui/src/views/wms/agvrush/devicestatus/devicestatus.js create mode 100644 lms/nladmin-ui/src/views/wms/agvrush/devicestatus/index.vue diff --git a/lms/nladmin-system/src/main/java/org/nl/system/controller/user/UserController.java b/lms/nladmin-system/src/main/java/org/nl/system/controller/user/UserController.java index 45bc1d652..e04a23320 100644 --- a/lms/nladmin-system/src/main/java/org/nl/system/controller/user/UserController.java +++ b/lms/nladmin-system/src/main/java/org/nl/system/controller/user/UserController.java @@ -40,6 +40,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.util.List; import java.util.Map; import java.util.Set; @@ -59,15 +60,22 @@ public class UserController { @ApiOperation("查询用户") @GetMapping - public ResponseEntity query(UserQuery query, PageQuery page){ - return new ResponseEntity(userService.getUserDetail(query, page),HttpStatus.OK); + public ResponseEntity query(UserQuery query, PageQuery page) { + return new ResponseEntity(userService.getUserDetail(query, page), HttpStatus.OK); + } + + @ApiOperation("查询用户") + @PostMapping(value = "/getUserList") + public ResponseEntity query() { + List userList = userService.list(new QueryWrapper().eq("is_used", true)); + return new ResponseEntity(userList, HttpStatus.OK); } @Log("新增用户") @ApiOperation("新增用户") @PostMapping // @SaCheckPermission("user:add") - public ResponseEntity create(@RequestBody Map user){ + public ResponseEntity create(@RequestBody Map user) { userService.create(user); return new ResponseEntity<>(HttpStatus.CREATED); } @@ -76,7 +84,7 @@ public class UserController { @ApiOperation("修改用户") @PutMapping // @SaCheckPermission("user:edit") - public ResponseEntity update( @RequestBody Map resources) throws Exception { + public ResponseEntity update(@RequestBody Map resources) throws Exception { userService.update(resources); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } @@ -84,8 +92,8 @@ public class UserController { @Log("修改用户:个人中心") @ApiOperation("修改用户:个人中心") // @PutMapping(value = "center") - public ResponseEntity center(@RequestBody SysUser resources){ - if(!resources.getUserId().equals(StpUtil.getLoginIdAsLong())){ + public ResponseEntity center(@RequestBody SysUser resources) { + if (!resources.getUserId().equals(StpUtil.getLoginIdAsLong())) { throw new BadRequestException("不能修改他人资料"); } userService.saveOrUpdate(resources); @@ -110,20 +118,20 @@ public class UserController { @ApiOperation("修改头像") @PostMapping(value = "/updateAvatar") - public ResponseEntity updateAvatar(@RequestParam MultipartFile avatar){ + public ResponseEntity updateAvatar(@RequestParam MultipartFile avatar) { return new ResponseEntity<>(userService.updateAvatar(avatar), HttpStatus.OK); } @Log("修改邮箱") @ApiOperation("修改邮箱") @PostMapping(value = "/updateEmail/{code}") - public ResponseEntity updateEmail(@PathVariable String code,@RequestBody SysUser user) throws Exception { - String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey,user.getPassword()); + public ResponseEntity updateEmail(@PathVariable String code, @RequestBody SysUser user) throws Exception { + String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, user.getPassword()); SysUser userInfo = userService.getOne(new QueryWrapper().eq("username", SecurityUtils.getCurrentUsername())); - if(!SaSecureUtil.md5BySalt(userInfo.getPassword(), "salt").equals(SaSecureUtil.md5BySalt(password, "salt"))){ + if (!SaSecureUtil.md5BySalt(userInfo.getPassword(), "salt").equals(SaSecureUtil.md5BySalt(password, "salt"))) { throw new BadRequestException("密码错误"); } - userService.update(new UpdateWrapper().set(userInfo.getUsername(),user.getEmail())); + userService.update(new UpdateWrapper().set(userInfo.getUsername(), user.getEmail())); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/DeviceStatusController.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/DeviceStatusController.java new file mode 100644 index 000000000..9e9286112 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/DeviceStatusController.java @@ -0,0 +1,59 @@ + +package org.nl.wms.basedata.master.rest; + + +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.basedata.master.service.DeviceStatusService; +import org.nl.wms.basedata.master.service.dto.CustomerbaseDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @author ldjun + * @date 2021-12-06 + **/ +@RestController +@RequiredArgsConstructor +@Api(tags = "设备状态监控") +@RequestMapping("/api/devicestatus") +@Slf4j +public class DeviceStatusController { + + private final DeviceStatusService deviceStatusService; + + @GetMapping + @Log("查询设备状态监控") + @ApiOperation("查询设备状态监控") + //@PreAuthorize("@el.check('customerbase:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(deviceStatusService.queryAll(whereJson, page), HttpStatus.OK); + } + + @PutMapping + @Log("修改客户基础表") + @ApiOperation("修改客户基础表") + //@PreAuthorize("@el.check('customerbase:edit')") + public ResponseEntity update(@RequestBody JSONObject jo) { + deviceStatusService.update(jo); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除客户基础表") + @ApiOperation("删除客户基础表") + //@PreAuthorize("@el.check('customerbase:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + deviceStatusService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/DeviceStatusService.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/DeviceStatusService.java new file mode 100644 index 000000000..a77074ce2 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/DeviceStatusService.java @@ -0,0 +1,44 @@ + +package org.nl.wms.basedata.master.service; + +import com.alibaba.fastjson.JSONObject; +import org.nl.wms.basedata.master.service.dto.CustomerbaseDto; +import org.springframework.data.domain.Pageable; + +import java.util.List; +import java.util.Map; + +/** + * @description 服务接口 + * @author ldjun + * @date 2021-12-06 + **/ +public interface DeviceStatusService { + + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 查询所有数据不分页 + * @param whereJson 条件参数 + * @return List + */ + List queryAll(Map whereJson); + + /** + * 编辑 + * @param dto / + */ + void update(JSONObject jo); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/DeviceStatusServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/DeviceStatusServiceImpl.java new file mode 100644 index 000000000..6fe25ae2a --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/DeviceStatusServiceImpl.java @@ -0,0 +1,101 @@ + +package org.nl.wms.basedata.master.service.impl; + + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.wql.core.bean.ResultBean; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.nl.wms.basedata.master.service.DeviceStatusService; +import org.nl.wms.basedata.master.service.dto.CustomerbaseDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author ldjun + * @description 服务实现 + * @date 2021-12-06 + **/ +@Service +@RequiredArgsConstructor +@Slf4j +public class DeviceStatusServiceImpl implements DeviceStatusService { + @Autowired + private DeviceStatusService deviceStatusService; + + @Override + public Map queryAll(Map whereJson, Pageable page) { + String where = ""; + WQLObject wo = WQLObject.getWQLObject("em_bi_devicestatus"); + String search = (String) whereJson.get("search"); + if (!StrUtil.isEmpty(search)) { + where = "AND (device_code like '%" + search + "%' OR device_name like '%" + search + "%')"; + } + ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), "1=1" + where, "device_code desc"); + final JSONObject json = rb.pageResult(); + return json; + } + + @Override + public List queryAll(Map whereJson) { + WQLObject wo = WQLObject.getWQLObject("md_cs_customerbase"); + JSONArray arr = wo.query().getResultJSONArray(0); + List list = arr.toJavaList(CustomerbaseDto.class); + return list; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(JSONObject jo) { + WQLObject wo = WQLObject.getWQLObject("em_bi_devicestatus"); + String device_code = jo.getString("device_code"); + if (!jo.containsKey("need_update_flag")){ + JSONArray rows = jo.getJSONArray("upload_user"); + HashMap map = new HashMap<>(); + String msg = ""; + for (int i = 0; i < rows.size(); i++) { + if (i!=rows.size()-1){ + msg += rows.getString(i)+","; + }else { + msg += rows.getString(i); + } + } + map.put("upload_user",msg); + wo.update(map,"device_code = '"+device_code+"'"); + }else { + wo.update(jo); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("md_cs_customerbase"); + for (Long cust_id : ids) { + JSONObject param = new JSONObject(); + param.put("cust_id", String.valueOf(cust_id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + } + } +} 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 a540af1571255a57616d8070e2e148312c6a9af2..e0cc1c651e57681a5203d6f26d4440dd605d2e00 100644 GIT binary patch delta 60 zcmZqpAk^?dXhRMQn}L4h!^=lE7qM&;<>g{v@XJriNmb9uOe>jeD3#niL#lm-6eAEb N0WtIT8B#16a{;=(6~+Jn delta 57 zcmZqpAk^?dXhRMQ+l8Qriv|Za7qM&;Wn*Sw@QH|=>?jpJIY3Idd4^Q`3@Jt+W&&d7 L?K7lUGUfsRY(acsToWmsService.shipDeviceUpdate(jo), HttpStatus.OK); } + @PostMapping("/sendDeviceStatus") + @ApiOperation("设备状态变更上报") + @SaIgnore + public ResponseEntity sendDeviceStatus(@RequestBody JSONObject jo) { + return new ResponseEntity<>(acsToWmsService.sendDeviceStatus(jo), HttpStatus.OK); + } + @PostMapping("/initialize") @Log(value = "仓位初始化", isInterfaceLog = true,interfaceLogType= InterfaceLogType.ACS_TO_LMS) @ApiOperation("仓位初始化") diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java index ddf7eb2cf..22cc8576d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/AcsToWmsService.java @@ -78,6 +78,15 @@ public interface AcsToWmsService { */ JSONObject shipDeviceUpdate(JSONObject whereJson); + /** + * ACS客户端--->LMS服务端 + * 输送线光电无货上报 + * + * @param whereJson 条件 + * @return JSONObject + */ + JSONObject sendDeviceStatus(JSONObject whereJson); + /** * 仓位初始化 */ diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index accad3c13..581347bf2 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -714,8 +714,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { } else if (type.equals("3")) { //判断AGV是否启用 String device_code = whereJson.getString("device_code"); - String product_area = device_code.substring(0,2); - String agv_status = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode(product_area+"_agv_status").getValue(); + String product_area = device_code.substring(0, 2); + String agv_status = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode(product_area + "_agv_status").getValue(); if ("0".equals(agv_status)) { log.info("当前AGV未启用,不启用自动出烘箱功能!"); @@ -806,6 +806,40 @@ public class AcsToWmsServiceImpl implements AcsToWmsService { return result; } + @Override + public JSONObject sendDeviceStatus(JSONObject whereJson) { + WQLObject wo = WQLObject.getWQLObject("em_bi_devicestatus"); + String device_code = whereJson.getString("device_code"); + if (StrUtil.isEmpty(device_code)) { + log.info("未传入设备号,输入参数为:" + whereJson.toString()); + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "反馈成功!"); + return result; + } else { + JSONObject device = wo.query("device_code = '" + device_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(device)) { + log.info("未查询到对应的设备:" + device_code); + } else { + HashMap map = new HashMap<>(); + if (whereJson.containsKey("mode")) { + map.put("mode", whereJson.getString("mode")); + map.put("mode_update_time", DateUtil.now()); + } + if (whereJson.containsKey("error")) { + map.put("error", whereJson.getString("error")); + map.put("error_msg", whereJson.getString("error_msg")); + map.put("error_update_time", DateUtil.now()); + } + wo.update(map, "device_code = '" + device_code + "'"); + } + } + JSONObject result = new JSONObject(); + result.put("status", HttpStatus.OK.value()); + result.put("message", "反馈成功!"); + return result; + } + @Override @Transactional(rollbackFor = Exception.class) public JSONObject shipDeviceUpdate(JSONObject whereJson) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java index 202e8534a..6b53a8dab 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/WmsToAcsServiceImpl.java @@ -337,17 +337,25 @@ public class WmsToAcsServiceImpl implements WmsToAcsService { String car_no = whereJson.getString("car_no"); JSONObject jsonParam = new JSONObject(); - if ("2,3,4,5".contains(car_no)) { + /*if ("2,3,4,5".contains(car_no)) { jsonParam.put("agv_system", "2"); - jsonParam.put("car_no", car_no); + } else if ("1".contains(car_no)) { jsonParam.put("agv_system", "1"); jsonParam.put("car_no", car_no); } else if ("6,7,8,9".contains(car_no)) { jsonParam.put("agv_system", "3"); jsonParam.put("car_no", car_no); + }*/ + if ("1".contains(car_no)) { + jsonParam.put("agv_system", "1"); + jsonParam.put("car_no", car_no); + }else { + jsonParam.put("agv_system", "2"); + jsonParam.put("car_no", car_no); } + try { String resultMsg = HttpRequest.post(url) .body(String.valueOf(jsonParam)) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java index f89c5b055..de5206783 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/mes/service/impl/MesToLmsServiceImpl.java @@ -986,6 +986,7 @@ public class MesToLmsServiceImpl implements MesToLmsService { String box_length = param.getString("Attribute2"); // 木箱料号 String box_width = param.getString("Attribute3"); // 木箱料号 String box_high = param.getString("Attribute4"); // 木箱料号 + String sub_type = param.getString("Attribute5"); // 包装关系类型 JSONArray details = param.getJSONArray("details"); if (ObjectUtil.isEmpty(details)) throw new BadRequestException("明细为空"); for (int i = 0; i < details.size(); i++) { @@ -1009,6 +1010,9 @@ public class MesToLmsServiceImpl implements MesToLmsService { String sap_pcsn = detail.getString("Attribute1");//SAP批次 String thickness_request = detail.getString("Attribute2");//物料主数据厚度 String width_standard = detail.getString("Attribute3");//要求幅宽 + String demand_limit = detail.getString("Attribute4");//客户需求抗拉下限 + String standard_limit = detail.getString("Attribute5");//内控标准抗拉下限 + String actual_value = detail.getString("Attribute6");//生产实际抗拉值 //查询库内是否存在相同的子卷号 JSONObject container_jo = WQLObject.getWQLObject("PDM_BI_SubPackageRelation").query("container_name = '" + ContainerName + "'").uniqueResult(0); @@ -1020,10 +1024,14 @@ public class MesToLmsServiceImpl implements MesToLmsService { jo.put("workorder_id", IdUtil.getSnowflake(1, 1).nextId()); jo.put("package_box_sn", PackageBoxSN); jo.put("sap_pcsn", sap_pcsn); + jo.put("sub_type", sub_type); jo.put("box_type", box_type); jo.put("box_length", box_length); jo.put("box_width", box_width); jo.put("box_high", box_high); + jo.put("demand_limit", demand_limit); + jo.put("standard_limit", standard_limit); + jo.put("actual_value", actual_value); jo.put("quanlity_in_box", QuanlityInBox); if (StrUtil.equals(BoxWeight, "0")) { BoxWeight2 = NumberUtil.add(BoxWeight2, NetWeight).toString(); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/SapToLmsController.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/SapToLmsController.java index fc936da2e..cec925f0a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/SapToLmsController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/rest/SapToLmsController.java @@ -56,4 +56,12 @@ public class SapToLmsController { return new ResponseEntity<>(sapToLmsService.getCannibalize(jo), HttpStatus.OK); } + @SaIgnore + @PostMapping("/getReCutInfo") + @Log("SAP给LMS推送改切出库单") + @ApiOperation("SAP给LMS推送改切出库单") + public ResponseEntity getReCutInfo(@RequestBody JSONObject jo) { + return new ResponseEntity<>(sapToLmsService.getReCutInfo(jo), HttpStatus.OK); + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/SapToLmsService.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/SapToLmsService.java index c1ecdb330..2202c8952 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/SapToLmsService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/SapToLmsService.java @@ -21,4 +21,6 @@ public interface SapToLmsService { * SAP给LMS推送调拨出库单 * */ JSONObject getCannibalize(JSONObject jo); + + JSONObject getReCutInfo(JSONObject jo); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/SapToLmsServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/SapToLmsServiceImpl.java index 3b3047325..95c55a7f1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/SapToLmsServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/ext/sap/service/impl/SapToLmsServiceImpl.java @@ -28,6 +28,93 @@ public class SapToLmsServiceImpl implements SapToLmsService { private final RawAssistIStorService rawAssistIStorService; + @Override + public JSONObject getReCutInfo(JSONObject jo) { + log.info("getReCutInfo的输入参数为:------------------------" + jo.toString()); + + JSONObject jsonMst = new JSONObject(); + + JSONObject result = new JSONObject(); + + String msg = "改切出库单据推送成功!"; + try { + String LGORT = jo.getString("LGORT"); + JSONObject stor_jo = WQLObject.getWQLObject("ST_IVT_BSRealStorAttr").query("ext_id = '" + LGORT + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(stor_jo)) { + result.put("RTYPE", "E"); + result.put("RTMSG", "操作失败!" + "未查询到外部标识为:" + LGORT + "对应的仓库!"); + result.put("RTOAL", 1); + result.put("RTDAT", null); + return result; + } + + jsonMst.put("stor_id", stor_jo.getString("stor_id")); + jsonMst.put("stor_code", stor_jo.getString("stor_code")); + jsonMst.put("stor_name", stor_jo.getString("stor_name")); + jsonMst.put("detail_count", "1"); + jsonMst.put("bill_status", "10"); + jsonMst.put("create_mode", "03"); + jsonMst.put("bill_type", "1003"); + jsonMst.put("biz_date", DateUtil.now()); + jsonMst.put("user", "sap"); + + JSONArray dtls = new JSONArray(); + String sap_pcsn = jo.getString("CHARG"); + if (StrUtil.isEmpty("sap_pcsn")) { + throw new BadRequestException("请求参数SAP批次不能为空!"); + } + JSONObject sub_jo = WQLObject.getWQLObject("PDM_BI_SubPackageRelation").query("sap_pcsn = '" + sap_pcsn + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(sub_jo)) { + throw new BadRequestException("LMS中不存在SAP批次为【" + sap_pcsn + "】的包装关系"); + } + String container_name = sub_jo.getString("container_name"); + JSONObject struct_ivt = WQLObject.getWQLObject("st_ivt_structivt").query("pcsn = '" + container_name + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(struct_ivt)) { + throw new BadRequestException("SAP批次为【" + sap_pcsn + "】的成品卷不存在或已经出库!"); + } else { + if (struct_ivt.getDoubleValue("frozen_qty") > 0) { + msg = "SAP批次为【" + sap_pcsn + "】的成品卷已经被分配或出库中"; + }else { + JSONObject dtl = new JSONObject(); + //查询该物料 + JSONObject mater_jo = WQLObject.getWQLObject("md_me_materialbase").query("material_code = '" + sub_jo.getString("product_name") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(mater_jo)) { + throw new BadRequestException("未查询到物料:" + sub_jo.getString("product_name") + ",信息!"); + } + dtl.put("material_id", mater_jo.getString("material_id")); + dtl.put("pcsn", container_name); + dtl.put("box_no", sub_jo.getString("package_box_sn")); + JSONObject unit = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id = '" + mater_jo.getString("base_unit_id") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(unit)) { + throw new BadRequestException("未查询到物料计量单位:" + mater_jo.getString("base_unit_id") + ",信息!"); + } + dtl.put("qty_unit_id", unit.getString("measure_unit_id")); + dtl.put("qty_unit_name", unit.getString("unit_name")); + dtl.put("plan_qty", sub_jo.getString("net_weight")); + dtls.add(dtl); + + + jsonMst.put("tableData", dtls); + String iostorinv_id = checkOutBillService.insertDtl(jsonMst); + + //调用自动分配 + JSONObject out_jo = new JSONObject(); + out_jo.put("iostorinv_id", iostorinv_id); + checkOutBillService.allDiv(out_jo); + } + } + } catch (Exception exception) { + result.put("TYPE", "E"); + result.put("MESSAGE", "推送失败!" + exception.getMessage()); + log.info("getMaterialInfo的输出参数为:------------------------" + result.toString()); + return result; + } + result.put("TYPE", "S"); + result.put("MESSAGE", msg); + log.info("getMaterialInfo的输出参数为:------------------------" + result.toString()); + return result; + } + @Override public JSONObject getMaterialInfo(JSONObject jo) { JSONArray rows = jo.getJSONArray("DATAS"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java index 14cf26e98..42805e610 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/BakingServiceImpl.java @@ -12,6 +12,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.modules.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.utils.RedisUtils; import org.nl.modules.system.util.CodeUtil; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; @@ -25,6 +26,7 @@ import org.nl.wms.sch.tasks.CutConveyorTask; import org.nl.wms.sch.tasks.InCoolIvtTask; import org.nl.wms.sch.tasks.InHotTask; import org.nl.wms.sch.tasks.OutHotTask; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -33,6 +35,9 @@ import org.springframework.transaction.annotation.Transactional; @Slf4j public class BakingServiceImpl implements BakingService { + @Autowired + private RedisUtils redisUtils; + /* * 业务流程: * 入烤箱: @@ -112,8 +117,8 @@ public class BakingServiceImpl implements BakingService { */ JSONObject jsonPointZc = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(jsonPointZc)) { - if (!in_area_id.contains(jsonPointZc.getString("product_area"))){ - throw new BadRequestException("当前登录人员暂无【"+jsonPointZc.getString("product_area")+"】操作权限"); + if (!in_area_id.contains(jsonPointZc.getString("product_area"))) { + throw new BadRequestException("当前登录人员暂无【" + jsonPointZc.getString("product_area") + "】操作权限"); } /* * 暂存区入烘箱 @@ -123,10 +128,23 @@ public class BakingServiceImpl implements BakingService { jsonMap.put("flag", "1"); jsonMap.put("product_area", jsonPointZc.getString("product_area")); //获取温度幅度 - jsonMap.put("min_temperature", (NumberUtil.sub(temperature, temperature_lose)).toString()); - jsonMap.put("max_temperature", (NumberUtil.add(temperature, temperature_lose)).toString()); + /*jsonMap.put("min_temperature", (NumberUtil.sub(temperature, temperature_lose)).toString()); + jsonMap.put("max_temperature", (NumberUtil.add(temperature, temperature_lose)).toString());*/ jsonMap.put("point_location", jsonPointZc.getString("point_location")); - JSONObject jsonHotIvt = WQL.getWO("PDA_BAKING_01").addParamMap(jsonMap).process().uniqueResult(0); + JSONArray hot_rows = WQL.getWO("PDA_BAKING_01").addParamMap(jsonMap).process().getResultJSONArray(0); + JSONObject jsonHotIvt = new JSONObject(); + for (int i = 0; i < hot_rows.size(); i++) { + JSONObject hot_row = hot_rows.getJSONObject(i); + String point_code = hot_row.getString("point_code"); + String point_temperature = (String) redisUtils.hget(point_code, "temperature"); + if (!ObjectUtil.isEmpty(point_temperature)) { + if (point_temperature.equals(temperature)) { + jsonHotIvt = hot_row; + break; + } + } + } + if (ObjectUtil.isEmpty(jsonHotIvt)) { throw new BadRequestException("烘烤区没有合适温度的空位!"); } @@ -175,8 +193,8 @@ public class BakingServiceImpl implements BakingService { String point_location = jsonCoolIvt.getString("point_location"); // 位置 String reging_id = ""; - if (!in_area_id.contains(product_area)){ - throw new BadRequestException("当前登录人员暂无【"+product_area+"】操作权限"); + if (!in_area_id.contains(product_area)) { + throw new BadRequestException("当前登录人员暂无【" + product_area + "】操作权限"); } switch (product_area) { case "A1": @@ -215,10 +233,22 @@ public class BakingServiceImpl implements BakingService { JSONObject jsonMap = new JSONObject(); jsonMap.put("flag", "1"); jsonMap.put("product_area", product_area); - jsonMap.put("min_temperature", NumberUtil.sub(temperature, temperature_lose) + ""); - jsonMap.put("max_temperature", NumberUtil.add(temperature, temperature_lose) + ""); + /*jsonMap.put("min_temperature", NumberUtil.sub(temperature, temperature_lose) + ""); + jsonMap.put("max_temperature", NumberUtil.add(temperature, temperature_lose) + "");*/ jsonMap.put("point_location", map.getString("point_location")); - JSONObject jsonHotIvt = WQL.getWO("PDA_BAKING_01").addParamMap(jsonMap).process().uniqueResult(0); + JSONArray hot_rows = WQL.getWO("PDA_BAKING_01").addParamMap(jsonMap).process().getResultJSONArray(0); + JSONObject jsonHotIvt = new JSONObject(); + for (int i = 0; i < hot_rows.size(); i++) { + JSONObject hot_row = hot_rows.getJSONObject(i); + String point_code = hot_row.getString("point_code"); + String point_temperature = (String) redisUtils.hget(point_code, "temperature"); + if (!ObjectUtil.isEmpty(point_temperature)) { + if (point_temperature.equals(temperature)) { + jsonHotIvt = hot_row; + break; + } + } + } if (ObjectUtil.isEmpty(jsonHotIvt)) { throw new BadRequestException("烘烤区没有合适温度的空位!"); } @@ -308,8 +338,8 @@ public class BakingServiceImpl implements BakingService { } // 1.查询暂存位有没有空位 String product_area = jsonHotIvt.getString("product_area"); - if (!in_area_id.contains(product_area)){ - throw new BadRequestException("当前登录人员暂无【"+product_area+"】操作权限"); + if (!in_area_id.contains(product_area)) { + throw new BadRequestException("当前登录人员暂无【" + product_area + "】操作权限"); } String reging_id = ""; switch (product_area) { @@ -443,8 +473,8 @@ public class BakingServiceImpl implements BakingService { throw new BadRequestException("请扫描点位类型为出箱的烘箱对接位!"); } - if (!in_area_id.contains(jsonPoint.getString("product_area"))){ - throw new BadRequestException("当前登录人员暂无【"+jsonPoint.getString("product_area")+"】操作权限"); + if (!in_area_id.contains(jsonPoint.getString("product_area"))) { + throw new BadRequestException("当前登录人员暂无【" + jsonPoint.getString("product_area") + "】操作权限"); } // 2.找冷却区空货位 JSONObject map = new JSONObject(); @@ -570,8 +600,8 @@ public class BakingServiceImpl implements BakingService { public JSONObject release(JSONObject whereJson) { JSONArray rows = new JSONArray(); JSONObject jo = new JSONObject(); - JSONObject point_jo = WQLObject.getWQLObject("sch_base_point").query("point_code = '"+whereJson.getString("point_code")+"'").uniqueResult(0); - if (ObjectUtil.isEmpty(point_jo)){ + JSONObject point_jo = WQLObject.getWQLObject("sch_base_point").query("point_code = '" + whereJson.getString("point_code") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(point_jo)) { throw new BadRequestException("未查询到对应的报警灯点位!"); } jo.put("device_code", whereJson.getString("point_code")); @@ -594,7 +624,7 @@ public class BakingServiceImpl implements BakingService { String point_code = whereJson.getString("point_code"); JSONObject json = new JSONObject(); - if (point_code.endsWith("BJD")){ + if (point_code.endsWith("BJD")) { JSONObject result = new JSONObject(); result.put("data", json); result.put("message", "操作成功!"); @@ -609,24 +639,24 @@ public class BakingServiceImpl implements BakingService { if (ObjectUtil.isNotEmpty(jsonCool) && ObjectUtil.isNotEmpty(jsonCool.getString("container_name"))) { json.put("container_name", jsonCool.getString("container_name")); String product_area = jsonCool.getString("product_area"); - if (!in_area_id.contains(product_area)){ - throw new BadRequestException("当前登录人员暂无【"+product_area+"】操作权限"); + if (!in_area_id.contains(product_area)) { + throw new BadRequestException("当前登录人员暂无【" + product_area + "】操作权限"); } } else { JSONObject jsonHot = hotIvtTab.query("point_code = '" + point_code + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(jsonHot) && ObjectUtil.isNotEmpty(jsonHot.getString("container_name"))) { json.put("container_name", jsonHot.getString("container_name")); String product_area = jsonHot.getString("product_area"); - if (!in_area_id.contains(product_area)){ - throw new BadRequestException("当前登录人员暂无【"+product_area+"】操作权限"); + if (!in_area_id.contains(product_area)) { + throw new BadRequestException("当前登录人员暂无【" + product_area + "】操作权限"); } } else { JSONObject jsonPoint = pointIvtTab.query("point_code = '" + point_code + "'").uniqueResult(0); if (ObjectUtil.isNotEmpty(jsonPoint) && ObjectUtil.isNotEmpty(jsonPoint.getString("material_code"))) { json.put("container_name", jsonPoint.getString("material_code")); String product_area = jsonPoint.getString("product_area"); - if (!in_area_id.contains(product_area)){ - throw new BadRequestException("当前登录人员暂无【"+product_area+"】操作权限"); + if (!in_area_id.contains(product_area)) { + throw new BadRequestException("当前登录人员暂无【" + product_area + "】操作权限"); } } else { if (ObjectUtil.isEmpty(jsonCool) && ObjectUtil.isEmpty(jsonHot) && ObjectUtil.isEmpty(jsonPoint)) { diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java index d98a58b7c..e8451da8b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/service/impl/RawFoilServiceImpl.java @@ -136,6 +136,9 @@ public class RawFoilServiceImpl implements RawFoilService { JSONObject jo = new JSONObject(); jo.put("data", resultJSONArray.getJSONArray("content")); jo.put("size", resultJSONArray.getString("totalElements")); + if (StrUtil.isNotEmpty(whereJson.getString("container_name")) && ObjectUtil.isEmpty(resultJSONArray.getJSONArray("content"))){ + throw new BadRequestException("当前输入的母卷工单已结束或不存在!"); + } jo.put("message", "查询成功!"); return jo; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_OVENINANDOUT_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_OVENINANDOUT_01.wql index 938a37673..7098539c1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_OVENINANDOUT_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/mps/wql/PDA_OVENINANDOUT_01.wql @@ -51,33 +51,90 @@ sch_base_point a INNER JOIN ( SELECT - COUNT( task.task_id ) AS num, - point_code + COUNT( c.task_id ) AS num, + c.point_code FROM - SCH_BASE_Point po - LEFT JOIN sch_base_task task ON ( task.point_code1 = po.point_code OR task.point_code2 = po.point_code OR task.point_code3 = po.point_code ) - AND task.task_status < '07' - AND task.is_delete = '0' - WHERE - po.is_delete = '0' - AND po.is_used = '1' + ( + SELECT + task.task_id, + point_code + FROM + SCH_BASE_Point po + LEFT JOIN sch_base_task task ON task.point_code1 = po.point_code + AND task.task_status < '07' + AND task.is_delete = '0' + WHERE + po.is_delete = '0' + AND po.is_used = '1' + OPTION 输入.reging_id <> "" + po.region_id = 输入.reging_id + ENDOPTION - OPTION 输入.reging_id <> "" - po.region_id = 输入.reging_id - ENDOPTION + OPTION 输入.point_location <> "" + po.point_location = 输入.point_location + ENDOPTION - OPTION 输入.point_location <> "" - po.point_location = 输入.point_location - ENDOPTION + OPTION 输入.point_type <> "" + po.point_type = 输入.point_type + ENDOPTION + OPTION 输入.point_type = "5" + IFNULL(po.material_code,'') = '' + ENDOPTION + UNION + SELECT + task.task_id, + point_code + FROM + SCH_BASE_Point po + LEFT JOIN sch_base_task task ON task.point_code1 = po.point_code + AND task.task_status < '07' + AND task.is_delete = '0' + WHERE + po.is_delete = '0' + AND po.is_used = '1' + OPTION 输入.reging_id <> "" + po.region_id = 输入.reging_id + ENDOPTION - OPTION 输入.point_type <> "" - po.point_type = 输入.point_type - ENDOPTION - OPTION 输入.point_type = "5" - IFNULL(po.material_code,'') = '' - ENDOPTION - GROUP BY - po.point_code + OPTION 输入.point_location <> "" + po.point_location = 输入.point_location + ENDOPTION + + OPTION 输入.point_type <> "" + po.point_type = 输入.point_type + ENDOPTION + OPTION 输入.point_type = "5" + IFNULL(po.material_code,'') = '' + ENDOPTION + UNION + SELECT + task.task_id, + point_code + FROM + SCH_BASE_Point po + LEFT JOIN sch_base_task task ON task.point_code1 = po.point_code + AND task.task_status < '07' + AND task.is_delete = '0' + WHERE + po.is_delete = '0' + AND po.is_used = '1' + OPTION 输入.reging_id <> "" + po.region_id = 输入.reging_id + ENDOPTION + + OPTION 输入.point_location <> "" + po.point_location = 输入.point_location + ENDOPTION + + OPTION 输入.point_type <> "" + po.point_type = 输入.point_type + ENDOPTION + OPTION 输入.point_type = "5" + IFNULL(po.material_code,'') = '' + ENDOPTION + ) c + GROUP BY + c.point_code ) b ON b.point_code = a.point_code ORDER BY num,a.point_code ENDSELECT diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/rest/ProductInstorController.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/rest/ProductInstorController.java index daa24afe0..06a9dd003 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/rest/ProductInstorController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/rest/ProductInstorController.java @@ -23,7 +23,7 @@ import org.springframework.web.bind.annotation.RestController; **/ @RestController @RequiredArgsConstructor -@Api(tags = "半成品入库") +@Api(tags = "成品入库") @RequestMapping("/api/pda/st") @Slf4j public class ProductInstorController { @@ -38,8 +38,8 @@ public class ProductInstorController { } @PostMapping("/confirm") - @Log("查询子卷包装关系") - @ApiOperation("查询子卷包装关系") + @Log("手持生产入库确认") + @ApiOperation("手持生产入库确认") public ResponseEntity confirm(@RequestBody JSONObject whereJson){ return new ResponseEntity<>(productInstorService.confirm(whereJson),HttpStatus.OK); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/impl/ProductInstorServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/impl/ProductInstorServiceImpl.java index 2069d3050..2f0e33914 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/impl/ProductInstorServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/service/impl/ProductInstorServiceImpl.java @@ -129,6 +129,14 @@ public class ProductInstorServiceImpl implements ProductInstorService { if (option.equals("4")) { mst_jo.put("bill_type", "0005"); } + HashMap box_map = box_rows.get(0); + Object sub_type = box_map.get("sub_type"); + if (ObjectUtil.isNotEmpty(sub_type)){ + if (sub_type.equals("1")){ + //如果为返检的包装关系则变为返检入库 + mst_jo.put("bill_type", "0006"); + } + } //查询成品库仓库 JSONObject stor = WQLObject.getWQLObject("st_ivt_bsrealstorattr").query("is_delete = '0' AND is_used = '1' AND is_productstore = '1'").uniqueResult(0); mst_jo.put("stor_id", stor.getString("stor_id")); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/wql/PDA_ST_01.wql b/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/wql/PDA_ST_01.wql index ff3c534d3..24b5d0393 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/wql/PDA_ST_01.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pda/st/wql/PDA_ST_01.wql @@ -70,7 +70,8 @@ container_name, product_name, product_description, - net_weight + net_weight, + sub_type FROM pdm_bi_subpackagerelation sub WHERE @@ -85,7 +86,8 @@ sub.container_name, sub.product_name, sub.product_description, - sub.net_weight + sub.net_weight, + sub_type FROM st_ivt_iostorinvdis dis LEFT JOIN st_ivt_iostorinv mst ON mst.iostorinv_id = dis.iostorinv_id diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/HotPointIvtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/HotPointIvtServiceImpl.java index 29a9cc9ed..7e2bab5be 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/HotPointIvtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/ivt/service/impl/HotPointIvtServiceImpl.java @@ -13,6 +13,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.modules.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.utils.RedisUtils; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; @@ -22,6 +23,7 @@ import org.nl.wms.basedata.st.service.impl.UserAreaServiceImpl; import org.nl.wms.ext.mes.service.impl.LmsToMesServiceImpl; import org.nl.wms.pdm.ivt.service.HotPointIvtService; import org.nl.wms.pdm.ivt.service.dto.HotPointIvtDto; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -40,6 +42,9 @@ import java.util.Map; @Slf4j public class HotPointIvtServiceImpl implements HotPointIvtService { + @Autowired + private RedisUtils redisUtils; + @Override public Map queryAll(Map whereJson, Pageable page) { //获取人员对应的区域 @@ -59,6 +64,17 @@ public class HotPointIvtServiceImpl implements HotPointIvtService { if (ObjectUtil.isNotEmpty(in_area_id)) map.put("in_area_id", in_area_id); JSONObject json = WQL.getWO("ST_IVT_HOTPOINTIVT").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "product_area,point_code"); + JSONArray rows = json.getJSONArray("content"); + JSONArray new_rows = new JSONArray(); + for (int i = 0; i < rows.size(); i++) { + JSONObject row = rows.getJSONObject(i); + String temperature = (String) redisUtils.hget(row.getString("point_code"), "temperature"); + String last_time = (String) redisUtils.hget(row.getString("point_code"), "last_time"); + row.put("temperature",temperature); + row.put("last_time",last_time); + new_rows.add(row); + } + json.put("content",new_rows); return json; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/em.xls b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/em.xls index f233bc5333ed6349a96a73044fd57368de06228f..59e3a4fd214cd01dca74251f962967f59d75c177 100644 GIT binary patch delta 17486 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 Ve3Bun{83qFbQBpyRc<2V{{t*Ep-un* delta 46139 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 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls b/lms/nladmin-system/src/main/java/org/nl/wms/pdm/wql/pdm.xls index 7fbdc0041e0eae1179ddc658fc3136df408e22b2..766e39b43f8af7f3e448a87efc7e34e5a5ed75db 100644 GIT binary patch delta 14092 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 delta 13248 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 S7P0@W;RQ>>cI(dZX8#9TG`1W7 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoQueryDeviceStatus.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoQueryDeviceStatus.java index b34c8f1a9..314f66ef0 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoQueryDeviceStatus.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoQueryDeviceStatus.java @@ -6,10 +6,12 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.utils.RedisUtils; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.wms.ext.acs.service.WmsToAcsService; import org.nl.wms.sch.tasks.URLEnum; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.HashMap; @@ -18,9 +20,12 @@ import java.util.HashMap; @Component @RequiredArgsConstructor public class AutoQueryDeviceStatus { + @Autowired + private RedisUtils redisUtils; private final WmsToAcsService wmsToAcsService; public void run() { + WQLObject ivtTab = WQLObject.getWQLObject("st_ivt_hotpointivt"); for (URLEnum url : URLEnum.values()) { try { String product_area = url.getProduct_area(); @@ -30,13 +35,12 @@ public class AutoQueryDeviceStatus { continue; } JSONObject jo = wmsToAcsService.getHotPointStatus(device_rows); - WQLObject ivtTab = WQLObject.getWQLObject("st_ivt_hotpointivt"); JSONArray de_rows = jo.getJSONArray("data"); for (int i = 0; i < de_rows.size(); i++) { JSONObject row = de_rows.getJSONObject(i); String device_code = row.getString("device_code"); HashMap map = new HashMap<>(); - map.put("temperature", row.getString("temperature")); + map.put("temperature", row.getString("now_temperature")); //获取倒计时,分,秒 String countdown_house = row.getString("countdown_house"); String countdown_min = row.getString("countdown_min"); @@ -53,7 +57,9 @@ public class AutoQueryDeviceStatus { } String last_time = countdown_house + "小时" + countdown_min + "分钟"; map.put("last_time", last_time); - ivtTab.update(map,"point_code = '"+device_code+"'"); + redisUtils.hset(device_code,"temperature",row.getString("temperature")); + redisUtils.hset(device_code,"last_time",last_time); + //ivtTab.update(map,"point_code = '"+device_code+"'"); } } catch (Exception e) { log.info(e.getMessage()); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendFeiShu.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendFeiShu.java new file mode 100644 index 000000000..2e46d219d --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/manage/AutoSendFeiShu.java @@ -0,0 +1,93 @@ +package org.nl.wms.sch.manage; + + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.common.config.RedisConfig; +import org.nl.modules.common.utils.RedisUtils; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.ext.acs.service.WmsToAcsService; +import org.nl.wms.sch.tasks.URLEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.util.HashMap; + +@Slf4j +@Component +@RequiredArgsConstructor +public class AutoSendFeiShu { + public void run() { + + WQLObject wo = WQLObject.getWQLObject("em_bi_devicestatus"); + //查询故障了还未发送的 + JSONArray send_rows = wo.query("error = '1' AND is_upload = '0' AND upload_flag = '1'").getResultJSONArray(0); + this.sendInfo(send_rows); + + //查询已经发送了但是还是故障中的 + String resend_time = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("FEISHU_URL").getValue(); + JSONArray resend_rows = wo.query("error = '1' AND is_upload = '1' AND upload_flag = '1' AND TIMESTAMPDIFF(MINUTE,upload_time,NOW()) > " + resend_time).getResultJSONArray(0); + this.sendInfo(resend_rows); + + + } + + void sendInfo(JSONArray device_rows) { + WQLObject wo = WQLObject.getWQLObject("em_bi_devicestatus"); + for (int i = 0; i < device_rows.size(); i++) { + JSONObject row = device_rows.getJSONObject(i); + String device_code = row.getString("device_code"); + String device_name = row.getString("device_name"); + String product_area = row.getString("product_area"); + String error_msg = row.getString("error_msg"); + String upload_user = row.getString("upload_user"); + String[] split = upload_user.split(","); + JSONArray UserList = new JSONArray(); + if (split.length > 0) { + for (String s : split) { + JSONObject jo = new JSONObject(); + jo.put("User", s); + UserList.add(jo); + } + } else { + continue; + } + + String Message = product_area + "区域的设备:" + device_code + "[" + device_name + "],发生故障。故障信息为:" + error_msg; + JSONObject jo = new JSONObject(); + jo.put("SendType", "L"); + jo.put("Title", "LMS设备故障信息"); + jo.put("WarnType", "string"); + jo.put("MessageType", "P"); + jo.put("UserList", UserList); + jo.put("Message", Message); + + String url = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("FEISHU_URL").getValue(); + String api = "/FeiShuNoticesWebApi/CommunalApi"; + url = url + api; + try { + String resultMsg = HttpRequest.post(url) + .body(String.valueOf(jo)) + .execute().body(); + log.info("飞书输入参数为:-------------------" + jo); + log.info("飞书输出参数为:-------------------" + resultMsg); + HashMap map = new HashMap<>(); + map.put("is_upload", "1"); + map.put("upload_time", DateUtil.now()); + wo.update(map, "device_code = '" + device_code + "'"); + } catch (Exception e) { + log.info(e.getMessage()); + } + } + + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/PointController.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/PointController.java index 0769aaa70..85260b3c3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/PointController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/rest/PointController.java @@ -2,6 +2,7 @@ package org.nl.wms.sch.rest; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -84,6 +85,18 @@ public class PointController { return new ResponseEntity<>(HttpStatus.NO_CONTENT); } + @PutMapping("/changeActives") + @Log("批量修改点位启用状态") + @ApiOperation("批量修改点位启用状态") + //@SaCheckPermission("store:edit") + public ResponseEntity update2(@RequestBody JSONArray rows) { + for (int i = 0; i < rows.size(); i++) { + JSONObject json = rows.getJSONObject(i); + pointService.changeActive(json); + } + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + @PostMapping("/getPoint") @Log("查询点位下拉框") @ApiOperation("查询点位下拉框") diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java index 0a43d83ba..49719f43a 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java @@ -50,7 +50,13 @@ public class PointServiceImpl implements PointService { map.put("point_status", whereJson.get("point_status")); map.put("is_used", whereJson.get("is_used")); map.put("point_type", whereJson.get("point_type")); - map.put("name", whereJson.get("name")); + Object name = whereJson.get("name"); + if (ObjectUtil.isNotEmpty(name)){ + String search = (String) name; + String[] split = search.split("_"); + name = String.join("\\_", split); + map.put("name", name); + } JSONObject json = WQL.getWO("QSCH_BASE_POINT").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "point_code asc"); JSONArray content = json.getJSONArray("content"); JSONArray res = new JSONArray(); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpReelTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpReelTask.java index 527363b0a..f062792ae 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpReelTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CallEmpReelTask.java @@ -45,13 +45,13 @@ public class CallEmpReelTask extends AbstractAcsTask { JSONObject json = arr.getJSONObject(i); String product_area = json.getString("product_area"); - String agv_system_type = ""; - if (product_area.equals("A1") || product_area.equals("A2")) { + String agv_system_type = "2"; + /*if (product_area.equals("A1") || product_area.equals("A2")) { agv_system_type = "2"; } if (product_area.equals("A3") || product_area.equals("A4")) { agv_system_type = "3"; - } + }*/ AcsTaskDto dto = AcsTaskDto.builder() .ext_task_id(json.getString("task_id")) .task_code(json.getString("task_code")) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CoolCutTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CoolCutTask.java index 355f4a256..ec4e50bf9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CoolCutTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CoolCutTask.java @@ -44,13 +44,13 @@ public class CoolCutTask extends AbstractAcsTask { JSONObject json = arr.getJSONObject(i); String product_area = json.getString("product_area"); - String agv_system_type = ""; - if (product_area.equals("A1") || product_area.equals("A2")) { + String agv_system_type = "2"; + /*if (product_area.equals("A1") || product_area.equals("A2")) { agv_system_type = "2"; } if (product_area.equals("A3") || product_area.equals("A4")) { agv_system_type = "3"; - } + }*/ AcsTaskDto dto = AcsTaskDto.builder() .ext_task_id(json.getString("task_id")) .task_code(json.getString("task_code")) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutTrussTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutTrussTask.java index 5af116414..507ba1aca 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutTrussTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/CutTrussTask.java @@ -42,13 +42,13 @@ public class CutTrussTask extends AbstractAcsTask { JSONObject json = arr.getJSONObject(i); String product_area = json.getString("product_area"); - String agv_system_type = ""; - if (product_area.equals("A1") || product_area.equals("A2")) { + String agv_system_type = "2"; + /*if (product_area.equals("A1") || product_area.equals("A2")) { agv_system_type = "2"; } if (product_area.equals("A3") || product_area.equals("A4")) { agv_system_type = "3"; - } + }*/ //添加过滤,如果为分切机B轴的下料位,要判断该分切机A轴的点位是否存在未下发的任务,存在则也不允许下发 String point_code1 = json.getString("point_code1"); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InCoolIvtTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InCoolIvtTask.java index 49b135942..06982d6b9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InCoolIvtTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InCoolIvtTask.java @@ -47,13 +47,13 @@ public class InCoolIvtTask extends AbstractAcsTask { JSONObject json = arr.getJSONObject(i); String product_area = json.getString("product_area"); - String agv_system_type = ""; - if (product_area.equals("A1") || product_area.equals("A2")) { + String agv_system_type = "2"; + /*if (product_area.equals("A1") || product_area.equals("A2")) { agv_system_type = "2"; } if (product_area.equals("A3") || product_area.equals("A4")) { agv_system_type = "3"; - } + }*/ AcsTaskDto dto = AcsTaskDto.builder() .ext_task_id(json.getString("task_id")) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InHotTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InHotTask.java index 432959296..1725eceda 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InHotTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/InHotTask.java @@ -45,13 +45,13 @@ public class InHotTask extends AbstractAcsTask { JSONObject json = arr.getJSONObject(i); String product_area = json.getString("product_area"); - String agv_system_type = ""; - if (product_area.equals("A1") || product_area.equals("A2")) { + String agv_system_type = "2"; + /*if (product_area.equals("A1") || product_area.equals("A2")) { agv_system_type = "2"; } if (product_area.equals("A3") || product_area.equals("A4")) { agv_system_type = "3"; - } + }*/ AcsTaskDto dto = AcsTaskDto.builder() .ext_task_id(json.getString("task_id")) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutHotTask.java b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutHotTask.java index 4e10ae2f5..f014fe643 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutHotTask.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/sch/tasks/OutHotTask.java @@ -45,13 +45,13 @@ public class OutHotTask extends AbstractAcsTask { JSONObject json = arr.getJSONObject(i); String product_area = json.getString("product_area"); - String agv_system_type = ""; - if (product_area.equals("A1") || product_area.equals("A2")){ + String agv_system_type = "2"; + /*if (product_area.equals("A1") || product_area.equals("A2")){ agv_system_type = "2"; } if (product_area.equals("A3") || product_area.equals("A4")){ agv_system_type = "3"; - } + }*/ AcsTaskDto dto = AcsTaskDto.builder() .ext_task_id(json.getString("task_id")) diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/InBillQueryServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/InBillQueryServiceImpl.java index a432d5bc4..98182133d 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/InBillQueryServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/InBillQueryServiceImpl.java @@ -227,6 +227,9 @@ public class InBillQueryServiceImpl implements InBillQueryService { mp.put("居中度(mm)", "±1"); mp.put("塌边(mm)", "≤10"); mp.put("米数(长度)", NumberUtil.round(json.getString("length"), 1)); + mp.put("生产实际抗拉值", json.getString("actual_value")); + mp.put("内控标准抗拉下限", json.getString("standard_limit")); + mp.put("客户需求抗拉下限", json.getString("demand_limit")); mp.put("生产日期", json.getString("date_of_production").replace("-","/")); mp.put("入库日期", json.getString("confirm_time").substring(0,10).replace("-","/")); list.add(mp); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_INBILLQUERY.wql b/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_INBILLQUERY.wql index 0458b9237..a92ccada8 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_INBILLQUERY.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_INBILLQUERY.wql @@ -78,6 +78,9 @@ sub.thickness_request, sub.width_standard, sub.mass_per_unit_area, + sub.demand_limit, + sub.standard_limit, + sub.actual_value, (case when plan.parent_container_name <> '' then plan.parent_container_name else plan.restruct_container_name end) AS parent_container_name, mst.remark, (case when DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) >='08:00:00' AND DATE_FORMAT( mst.confirm_time, '%H:%i:%s' ) <= '19:59:59' then '白班' @@ -315,6 +318,9 @@ sub.thickness, sub.box_weight, sub.length, + sub.actual_value, + sub.standard_limit, + sub.demand_limit, sub.thickness_request, sub.width_standard, sub.mass_per_unit_area, diff --git a/lms/nladmin-ui/src/views/system/user/user.js b/lms/nladmin-ui/src/views/system/user/user.js index ee918b1b1..4c8f58902 100644 --- a/lms/nladmin-ui/src/views/system/user/user.js +++ b/lms/nladmin-ui/src/views/system/user/user.js @@ -33,6 +33,14 @@ export function editUser(data) { }) } +export function getUserList(data) { + return request({ + url: 'api/users/getUserList', + method: 'post', + data + }) +} + export function updatePass(user) { const data = { oldPass: encrypt(user.oldPass), @@ -57,5 +65,5 @@ export function updateEmail(form) { }) } -export default { add, edit, del, updatePass } +export default { add, edit, del, updatePass, getUserList } diff --git a/lms/nladmin-ui/src/views/wms/agvrush/devicestatus/devicestatus.js b/lms/nladmin-ui/src/views/wms/agvrush/devicestatus/devicestatus.js new file mode 100644 index 000000000..424a096e5 --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/agvrush/devicestatus/devicestatus.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/devicestatus', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/devicestatus/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/devicestatus', + method: 'put', + data + }) +} + +export default { add, edit, del } diff --git a/lms/nladmin-ui/src/views/wms/agvrush/devicestatus/index.vue b/lms/nladmin-ui/src/views/wms/agvrush/devicestatus/index.vue new file mode 100644 index 000000000..9dcc5e37c --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/agvrush/devicestatus/index.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/lms/nladmin-ui/src/views/wms/pdm/bi/index.vue b/lms/nladmin-ui/src/views/wms/pdm/bi/index.vue index 4cbe2c59f..024860e9c 100644 --- a/lms/nladmin-ui/src/views/wms/pdm/bi/index.vue +++ b/lms/nladmin-ui/src/views/wms/pdm/bi/index.vue @@ -85,8 +85,7 @@ style="width: 185px" value-format="yyyy-MM-dd" @change="hand" - > - + /> - + /> --> - + @@ -179,196 +177,219 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -379,94 +400,175 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - - + + + - + diff --git a/lms/nladmin-ui/src/views/wms/sch/point/index.vue b/lms/nladmin-ui/src/views/wms/sch/point/index.vue index dbaf43e8f..fbf93f318 100644 --- a/lms/nladmin-ui/src/views/wms/sch/point/index.vue +++ b/lms/nladmin-ui/src/views/wms/sch/point/index.vue @@ -357,7 +357,7 @@