From 03529342c5cda1a61c5c3944820659784a0afa75 Mon Sep 17 00:00:00 2001 From: erdanergou Date: Thu, 10 Nov 2022 08:15:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=BA=93=E5=AD=98=E7=9B=98?= =?UTF-8?q?=E7=82=B9=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../depository_manage/config/QyWxConfig.java | 76 ++- .../config/WebMvcConfig.java | 3 +- .../controller/DepositoryController.java | 29 + .../DepositoryRecordController.java | 35 +- .../controller/MaterialController.java | 404 ++++++++++++-- .../controller/PageController.java | 77 +-- .../controller/PlaceController.java | 69 +++ .../controller/QyWxOperationController.java | 120 ++++- .../controller/StockTakingController.java | 21 +- .../converter/ExcelMaterialCodeConverter.java | 8 +- .../entity/ExcelInfoByInventory.java | 2 +- .../entity/PidOrDidAndCode.java | 30 ++ .../intercepter/UserInterceptor.java | 2 +- .../mapper/MaterialMapper.java | 2 + .../mapper/MaterialMapper.xml | 2 + .../mapper/MaterialTypeMapper.xml | 2 +- .../depository_manage/mapper/QrCodeMapper.xml | 143 +++++ .../depository_manage/pojo/PlaceP.java | 5 + .../depository_manage/pojo/RestResponse.java | 10 +- .../service/DepositoryRecordService.java | 6 +- .../service/DepositoryService.java | 15 + .../service/MaterialService.java | 20 + .../service/PlaceService.java | 22 + .../service/StockTakingService.java | 10 +- .../impl/DepositoryRecordServiceImpl.java | 20 +- .../service/impl/DepositoryServiceImpl.java | 30 ++ .../service/impl/MaterialServiceImpl.java | 31 ++ .../service/impl/PlaceServiceImpl.java | 45 ++ .../service/impl/QyWxOperationService.java | 42 +- .../service/impl/StockTakingServiceImpl.java | 26 +- src/main/resources/templates/index.html | 111 ++-- src/main/resources/templates/index_back.html | 14 +- .../pages/QyWxScanCode/QyWxScanBarCodeIn.html | 128 +++++ .../pages/application/application-in.html | 502 ++++++++--------- .../application-in_scanQrCode.html | 266 +++++++-- .../pages/application/application-out.html | 74 +-- .../application/application-transfer.html | 419 +++++++-------- .../pages/material/material-add.html | 24 +- .../pages/material/material-view.html | 32 +- .../templates/pages/place/place_edit.html | 29 +- .../pages/scanQrCode/ScanBarCode.html | 2 +- .../pages/scanQrCode/ScanBarCodeByNew.html | 2 +- .../scanQrCode/ScanBarCodeForTaking.html | 2 +- .../pages/scanQrCode/ScanBarCodeIn.html | 126 ----- .../pages/scanQrCode/ScanBarCodeOut.html | 2 +- .../pages/scanQrCode/ScanBarOrQrCodeOut.html | 504 +++++++++-------- .../pages/scanQrCode/ScanCodeByTaking.html | 2 +- .../pages/scanQrCode/ScanQrCode.html | 507 ++++++++---------- .../pages/stockTaking/stockTaking.html | 291 +++++++--- .../pages/warehouse/warehouse_view.html | 31 +- .../dreamchaser/depository_manage/Test.java | 6 +- 51 files changed, 2804 insertions(+), 1577 deletions(-) create mode 100644 src/main/java/com/dreamchaser/depository_manage/entity/PidOrDidAndCode.java create mode 100644 src/main/java/com/dreamchaser/depository_manage/mapper/QrCodeMapper.xml create mode 100644 src/main/resources/templates/pages/QyWxScanCode/QyWxScanBarCodeIn.html delete mode 100644 src/main/resources/templates/pages/scanQrCode/ScanBarCodeIn.html diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java index 53c9c266..bb3e534a 100644 --- a/src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java @@ -4,9 +4,13 @@ package com.dreamchaser.depository_manage.config; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.dreamchaser.depository_manage.config.QyWx_template_card.*; +import com.dreamchaser.depository_manage.entity.UserByPort; import com.dreamchaser.depository_manage.utils.HttpUtils; import com.dreamchaser.depository_manage.utils.ObjectFormatUtil; import lombok.Data; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; @@ -14,46 +18,68 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; // 用于实现企业微信相关功能 @Data +@Component public class QyWxConfig { public static String corpid = "ww02f310301953277a"; // 企业的CorpID public static String secret = "GYwyoAGwMwumAVFrFn-RZIc2q11P3pm8NWY9pWDjLqw"; // 应用的凭证密钥 public static int AgentId = 1000037; //应用agentid public static String callBackUrl = "https://jy.hxgk.group/QyWxLogin"; - public static String token = ""; //access_token public static String code = ""; //userCode public static String sendMessage_url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN"; + public static RedisTemplate redisTemplate; + // 用于回调配置的token public static String sToken = "sM4MFE44fAKdtqvq81HYygqmrdUn"; // 用于回调配置的EncodingAESKey public static String sEncodingAESKey = "10cruMoq3ixrQQngJcMN6CzOYrHWmHMpxp2Xn5iYrsk"; + + // 用于jsapi的url + public static String jsApiUrl = "https://jy.hxgk.group/"; + + @Autowired + public void setRedisTemplate(RedisTemplate redisTemplate){ + QyWxConfig.redisTemplate = redisTemplate; + } + + // 用于获取企业微信对应token - public static String GetQYWXToken(){ - String url = String.format(" https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s",QyWxConfig.corpid,QyWxConfig.secret); - String get = HttpUtils.doGet(url); - JSONObject jsonObject = JSONObject.parseObject(get); - Integer errcord = ObjectFormatUtil.toInteger(jsonObject.get("errcode")); - String accessToken = (String) jsonObject.get("access_token"); - String errmsg = (String) jsonObject.get("errmsg"); - if(errcord == 0){ - // 如果成功获取access_token - return accessToken; - }else{ - // 否则返回空值 - return "visitToFail:"+errmsg; + public static String GetQYWXToken(String UserAgent){ + String token_redis = redisTemplate.opsForValue().get("wms_access_token_"+UserAgent); + if(token_redis != null){ + return token_redis; + } + else { + String url = String.format(" https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s", QyWxConfig.corpid, QyWxConfig.secret); + String get = HttpUtils.doGet(url); + JSONObject jsonObject = JSONObject.parseObject(get); + Integer errcord = ObjectFormatUtil.toInteger(jsonObject.get("errcode")); + String accessToken = (String) jsonObject.get("access_token"); + String errmsg = (String) jsonObject.get("errmsg"); + if (errcord == 0) { + // 如果成功获取access_token + Integer expires_in = jsonObject.getInteger("expires_in"); + redisTemplate.opsForValue().set("wms_access_token_"+UserAgent,accessToken); + redisTemplate.expire("wms_access_token_"+UserAgent,expires_in, TimeUnit.SECONDS); + return accessToken; + } else { + // 否则返回空值 + return "visitToFail:" + errmsg; + } } } // 根据获取到的用户code以及token获取用户id - public static JSONObject GetQYWXUserId(){ - String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=%s&code=%s",QyWxConfig.token,QyWxConfig.code); + public static JSONObject GetQYWXUserId(String UserAgent){ + String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=%s&code=%s",QyWxConfig.GetQYWXToken(UserAgent),QyWxConfig.code); String get = HttpUtils.doGet(url); JSONObject jsonObject = JSONObject.parseObject(get); return jsonObject; @@ -72,6 +98,24 @@ public class QyWxConfig { return url; } + // 获取企业的jsapi_ticket + public static JSONObject getQyWxJsApiTicketForEnterprise(String UserAgent){ + // 如果token不为"",则使用token,否则获取新token + String tempToken = GetQYWXToken(UserAgent); + String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=%s",tempToken); + String get = HttpUtils.doGet(url); + JSONObject jsonObject = JSONObject.parseObject(get); + return jsonObject; + } + // 获取应用的jsapi_ticket + public static JSONObject getQyWxJsApiTicketForApp(String UserAgent){ + // 如果token不为"",则使用token,否则获取新token + String tempToken = GetQYWXToken(UserAgent); + String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/ticket/get?access_token=%s&type=agent_config",tempToken); + String get = HttpUtils.doGet(url); + JSONObject jsonObject = JSONObject.parseObject(get); + return jsonObject; + } } diff --git a/src/main/java/com/dreamchaser/depository_manage/config/WebMvcConfig.java b/src/main/java/com/dreamchaser/depository_manage/config/WebMvcConfig.java index e5b754e4..518de10a 100644 --- a/src/main/java/com/dreamchaser/depository_manage/config/WebMvcConfig.java +++ b/src/main/java/com/dreamchaser/depository_manage/config/WebMvcConfig.java @@ -16,7 +16,8 @@ public class WebMvcConfig implements WebMvcConfigurer { registry.addInterceptor(new UserInterceptor()) .addPathPatterns("/**") .excludePathPatterns("/login", "/register", "/sendCode", "/error","/QyWxLogin","/callback") - .excludePathPatterns("/static/**"); + .excludePathPatterns("/static/**") + .excludePathPatterns("/static/js/**"); } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java index 1de00259..815930c0 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java @@ -1,5 +1,6 @@ package com.dreamchaser.depository_manage.controller; +import cn.hutool.core.lang.Snowflake; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.dreamchaser.depository_manage.config.PortConfig; @@ -1325,4 +1326,32 @@ public class DepositoryController { Depository depositoryRecordById = depositoryService.findDepositoryRecordById(depositoryId); return new RestResponse(depositoryRecordById); } + + + // 构造仓库二维码 + @PostMapping("/createQrCode") + public RestResponse createQrCode(@RequestBody Map map) { + // 通过雪花算法计算随机数 + Snowflake snowflake = new Snowflake(10,10,true); + String qrCode = snowflake.nextIdStr(); + + Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId")); + Depository depository = depositoryService.findDepositoryRecordById(depositoryId); + String qrCodeByDepository = depositoryService.findQrCodeByDepository(depository.getId()); + + if(qrCodeByDepository == null) { + Map param = new HashMap<>(); + param.put("depositoryId", depository.getId()); + param.put("qrCode", qrCode); + depositoryService.addQrCodeByDepository(param); + }else{ + qrCode = qrCodeByDepository; + } + try { + // 二维码保存信息 + return RestResponse.CreateQrCode(qrCode); + } catch (IOException e) { + return new RestResponse("err: " + e.getMessage(), 678, new StatusInfo("失败", "请联系开发人员")); + } + } } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java index b0ee6ef5..5ff5086d 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java @@ -8,10 +8,7 @@ import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.pojo.*; import com.dreamchaser.depository_manage.service.*; import com.dreamchaser.depository_manage.service.impl.QyWxOperationService; -import com.dreamchaser.depository_manage.utils.CrudUtil; -import com.dreamchaser.depository_manage.utils.DateUtil; -import com.dreamchaser.depository_manage.utils.HttpUtils; -import com.dreamchaser.depository_manage.utils.ObjectFormatUtil; +import com.dreamchaser.depository_manage.utils.*; import org.apache.http.protocol.HTTP; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; @@ -287,6 +284,8 @@ public class DepositoryRecordController { @PostMapping("/applicationOut") public RestResponse insertApplicationOutRecord(@RequestBody Map map, HttpServletRequest request){ UserByPort userToken= (UserByPort) request.getAttribute("userToken"); + String header = request.getHeader("user-agent"); + String crypt = Md5.crypt(header); map.put("applicantId",userToken.getId()); // 获取当前部门负责人 List departmentHeadByUsers = findDepartmentHeadByUser(userToken); @@ -312,7 +311,7 @@ public class DepositoryRecordController { integer += depositoryRecordService.insertApplicationOutMin(map); } // 向企业微信中对应用户发送消息 - JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true); + JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true,crypt); // 将当前返回结果保存到redis中 Map QyWxMessageMap = new HashMap<>(); QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); @@ -361,7 +360,7 @@ public class DepositoryRecordController { map.remove("id"); // 插入子订单 integer += depositoryRecordService.insertApplicationOutMin(map); - JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true); + JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true,crypt); // 将当前返回结果保存到redis中 Map QyWxMessageMap = new HashMap<>(); QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); @@ -589,7 +588,9 @@ public class DepositoryRecordController { @PutMapping("/review") public RestResponse review(@RequestBody Map map, HttpServletRequest request){ UserByPort userToken= (UserByPort) request.getAttribute("userToken"); - Integer review = depositoryRecordService.review(map, userToken.getId(),userToken); + String header = request.getHeader("user-agent"); + String crypt = Md5.crypt(header); + Integer review = depositoryRecordService.review(map, userToken.getId(),userToken,crypt); if(review != -1) { return CrudUtil.postHandle(review, 1); }else{ @@ -602,6 +603,8 @@ public class DepositoryRecordController { public RestResponse transfer(@RequestBody Map map, HttpServletRequest request){ UserByPort userToken= (UserByPort) request.getAttribute("userToken"); List departmentHeadByUsers = findDepartmentHeadByUser(userToken); + String header = request.getHeader("user-agent"); + String crypt = Md5.crypt(header); StringBuilder departmentHeadId = new StringBuilder(); StringBuilder departMentHeadQyWxName = new StringBuilder(); /*for (int i = 0; i < departmentHeadByUsers.size(); i++) { @@ -620,7 +623,7 @@ public class DepositoryRecordController { if(params.size() < 1 && map.size() > 4){ integer += depositoryRecordService.transferApply(map,userToken); Object id = map.get("parentId"); - JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true); + JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true,crypt); // 将当前返回结果保存到redis中 Map QyWxMessageMap = new HashMap<>(); QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); @@ -642,7 +645,7 @@ public class DepositoryRecordController { insert.put("code",map.get("code"+temp)); integer += depositoryRecordService.transferApply(insert,userToken); Object id = insert.get("parentId"); - JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true); + JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true,crypt); // 将当前返回结果保存到redis中 Map QyWxMessageMap = new HashMap<>(); QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); @@ -654,7 +657,7 @@ public class DepositoryRecordController { } integer += depositoryRecordService.transferApply(map,userToken); Object id = map.get("parentId"); - JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true); + JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true,crypt); // 将当前返回结果保存到redis中 Map QyWxMessageMap = new HashMap<>(); QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); @@ -756,6 +759,8 @@ public class DepositoryRecordController { @PostMapping("/createMultiApplication") public RestResponse createMultiApplication(@RequestBody Map map,HttpServletRequest request){ UserByPort userToken= (UserByPort) request.getAttribute("userToken"); + String header = request.getHeader("user-agent"); + String crypt = Md5.crypt(header); Integer quantity = ObjectFormatUtil.toInteger(map.get("quantity")); map.put("quantity",quantity.toString()); map.put("price",map.get("price").toString()); @@ -798,7 +803,7 @@ public class DepositoryRecordController { } success += depositoryRecordService.insertApplicationOutMin(map); // 向企业微信中对应用户发送消息 - JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true); + JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true,crypt); // 将当前返回结果保存到redis中 Map QyWxMessageMap = new HashMap<>(); QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); @@ -825,6 +830,8 @@ public class DepositoryRecordController { @PostMapping("/createMultiApplications") public RestResponse createMultiApplications(@RequestBody Map map,HttpServletRequest request){ UserByPort userToken= (UserByPort) request.getAttribute("userToken"); + String header = request.getHeader("user-agent"); + String crypt = Md5.crypt(header); // 获取要处理的类型 String type = (String) map.get("type"); Integer success = 0; @@ -964,7 +971,7 @@ public class DepositoryRecordController { } } // 向企业微信中对应用户发送消息 - JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true); + JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true,crypt); // 将当前返回结果保存到redis中 Map QyWxMessageMap = new HashMap<>(); QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); @@ -989,12 +996,14 @@ public class DepositoryRecordController { @PostMapping("/isCheckOut") public RestResponse isCheckOut(@RequestBody Map map,HttpServletRequest request){ UserByPort userToken = (UserByPort) request.getAttribute("userToken"); + String header = request.getHeader("user-agent"); + String crypt = Md5.crypt(header); Integer placeId =ObjectFormatUtil.toInteger(map.get("placeId")); if(placeId == null){ // 如果是仓库,则使用默认库位 map.put("placeId",0); } - RestResponse restResponse = depositoryRecordService.completeApplicationOutMinRecord(map, userToken); + RestResponse restResponse = depositoryRecordService.completeApplicationOutMinRecord(map, userToken,crypt); return restResponse; } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java b/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java index 39ca0c27..e1b555e5 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java @@ -1,5 +1,6 @@ package com.dreamchaser.depository_manage.controller; +import cn.hutool.core.lang.Snowflake; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.dreamchaser.depository_manage.config.JM_3DES; @@ -349,20 +350,32 @@ public class MaterialController { // 构造物料二维码 - @GetMapping("/createQrCode") - public RestResponse createQrCode(@RequestParam("mid") Integer mid) { - Material materialById = materialService.findMaterialById(mid); - // 二维码保存信息 - Map code = new HashMap<>(); - code.put("mname", materialById.getMname()); - code.put("mcode", materialById.getCode()); - code.put("verison", materialById.getVersion()); - code.put("quantity", materialById.getQuantity()); + @PostMapping("/createQrCode") + public RestResponse createQrCode(@RequestBody Map map) { + // 通过雪花算法计算随机数 + Snowflake snowflake = new Snowflake(10, 10, true); + String qrCode = snowflake.nextIdStr(); + + Integer mid = ObjectFormatUtil.toInteger(map.get("mid")); + Material material = materialService.findMaterialById(mid); + + String qrCodeByMcode = materialService.findQrCodeByMcode(material.getCode()); + + if (qrCodeByMcode == null) { + Map param = new HashMap<>(); + param.put("mcode", material.getCode()); + param.put("qrCode", qrCode); + materialService.addQrCodeByMaterial(param); + } else { + qrCode = qrCodeByMcode; + } try { - return RestResponse.CreateQrCode(code); + // 二维码保存信息 + return RestResponse.CreateQrCode(qrCode); } catch (IOException e) { return new RestResponse("err: " + e.getMessage(), 678, new StatusInfo("失败", "请联系开发人员")); } + } // 将扫描结果数据暂存到redis中 @@ -524,6 +537,88 @@ public class MaterialController { return new RestResponse(jsonObject); } + // 获取扫描结果并跳转到入库 + @PostMapping("/qywxApplicationInScanQrCode") + public RestResponse qywxApplicationInScanQrCode(@RequestBody Map map, HttpServletRequest request) { + UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); + // 获取当前用户所在部门拥有的仓库 + List depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userByPort.getMaindeparment().toString()); + // 获取当前扫描的二维码 + String qrCode = (String) map.get("qrCode"); + // 根据扫描的二维码获取对应的物料编码 + String mcode = materialService.findMaterialCodeByQrCode(qrCode); + // 根据物料编码获取物料 + Material material = materialService.findMaterialByCode(mcode); + Map param = new HashMap<>(); + List placePList = new ArrayList<>(); + param.put("mcode", mcode); + + MaterialP mp = new MaterialP(material); + // 获取物料与条形码的对应关系 + List materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(param); + for (int j = 0; j < depositoryByAdminorg.size(); j++) { + Depository depository = depositoryByAdminorg.get(j); + param.put("code", material.getCode()); + param.put("depositoryId", depository.getId()); + // 获取当前仓库下是否有当前物料的库存 + List inventory = materialService.findInventory(param); + if (inventory.size() > 0) { + mp = inventory.get(0); + List place = placeService.findPlaceByMidAndDid(mp.getId(), depository.getId()); + placePList.addAll(place); + } + } + // 设置当前物料在相关仓库下的所有库位 + mp.setPlacePList(placePList); + // 设置物料与条形码的对应关系 + mp.setMaterialAndBarCodeList(materialByBarCodeByCondition); + return new RestResponse(mp); + + } + + // 获取扫描结果并跳转到库存转移 + @PostMapping("/qywxApplicationTransferScanQrCode") + public RestResponse qywxApplicationTransferScanQrCode(@RequestBody Map map, HttpServletRequest request) { + UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); + // 获取当前用户所在部门拥有的仓库 + List depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userByPort.getMaindeparment().toString()); + // 获取当前扫描的二维码 + String qrCode = (String) map.get("qrCode"); + // 根据扫描的二维码获取对应的物料编码 + String mcode = materialService.findMaterialCodeByQrCode(qrCode); + // 根据物料编码获取物料 + Material material = materialService.findMaterialByCode(mcode); + Map param = new HashMap<>(); + List placePList = new ArrayList<>(); + param.put("mcode", mcode); + + MaterialP mp = null; + // 获取物料与条形码的对应关系 + List materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(param); + Boolean flag = false; + for (int j = 0; j < depositoryByAdminorg.size(); j++) { + Depository depository = depositoryByAdminorg.get(j); + param.put("code", material.getCode()); + param.put("depositoryId", depository.getId()); + // 获取当前仓库下是否有当前物料的库存 + List inventory = materialService.findInventory(param); + if (inventory.size() > 0) { + mp = inventory.get(0); + List place = placeService.findPlaceByMidAndDid(mp.getId(), depository.getId()); + placePList.addAll(place); + flag = true; + } + } + if (flag) { + // 设置当前物料在相关仓库下的所有库位 + mp.setPlacePList(placePList); + // 设置物料与条形码的对应关系 + mp.setMaterialAndBarCodeList(materialByBarCodeByCondition); + } + return new RestResponse(mp); + + } + // 获取扫描结果并跳转到盘点 @PostMapping("/stockTaking_scanQrCode") @@ -582,6 +677,60 @@ public class MaterialController { return new RestResponse(jsonObject); } + // 获取扫描结果并跳转到盘点 + @PostMapping("/qywxStockTakingScanQrCode") + public RestResponse qywxStockTakingScanQrCode(@RequestBody Map map, HttpServletRequest request) { + // 获取扫描的物料 + Map param = new HashMap<>(); + String placeId = (String) map.get("placeId"); + + // 获取当前扫描的二维码 + String qrCode = (String) map.get("qrCode"); + // 根据扫描的二维码获取对应的物料编码 + String mcode = materialService.findMaterialCodeByQrCode(qrCode); + // 根据物料编码获取物料 + Material material = materialService.findMaterialByCode(mcode); + // 用于标识是否成功获取 + boolean flag = true; + param.put("mcode", material.getCode()); + MaterialP mp = new MaterialP(material); + // 获取物料与条形码的对应关系 + List materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(param); + param.put("code", material.getCode()); + param.put("depositoryId", map.get("depositoryId")); + List inventory = materialService.findInventory(param); + if (inventory.size() > 0) { + MaterialP materialP = inventory.get(0); + if (!"0".equals(placeId)) { + // 如果不是默认库位 + MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(ObjectFormatUtil.toInteger(placeId), materialP.getId()); + if (placeAndMaterialByMidAndPid == null) { + // 如果当前物料不在该库位 + flag = false; + }else{ + mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity()); + } + } else { + MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(0, materialP.getId()); + if (placeAndMaterialByMidAndPid == null) { + // 如果当前物料不在该库位 + flag = false; + }else{ + mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity()); + } + } + mp = materialP; + } else { + flag = false; + } + mp.setMaterialAndBarCodeList(materialByBarCodeByCondition); + if (flag) { + // 如果成功获取 + return new RestResponse(mp); + } + return new RestResponse(null); + } + // 获取条形码扫描结果 @GetMapping("/application_in_scanBarCode") public RestResponse applicationInScanBarCode(HttpServletRequest request) { @@ -630,6 +779,37 @@ public class MaterialController { } + // 获取企业微信条形码扫描结果 + @PostMapping("/qywxApplicationInScanBarCode") + public RestResponse qywxApplicationInScanBarCode(@RequestBody Map map, HttpServletRequest request) { + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); + String qrCode = (String) map.get("qrCode"); + Map result = new HashMap<>(); + List materialList = new ArrayList<>(); + // 获取当前用户所在部门拥有的仓库 + List depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userToken.getMaindeparment().toString()); + Map param = new HashMap<>(); + // 获取条形码与物料的映射 + MaterialAndBarCode materialByBarCode = null; + for (int j = 0; j < depositoryByAdminorg.size(); j++) { + param.put("depositoryId", depositoryByAdminorg.get(j).getId()); + param.put("barCode", qrCode); + // 通过仓库与条形码获取对应关系 + materialByBarCode = materialService.findMaterialByBarCodeByBarCodeAndDepositoryId(param); + if (materialByBarCode != null) { + // 如果获取到对应关系 + break; + } + } + if (materialByBarCode == null) { + // 如果没有获取到 + materialByBarCode = materialService.findMaterialByBarCode(qrCode); + } + result.put("material", materialByBarCode); + return new RestResponse(result); + } + + // 获取条形码扫描结果 @GetMapping("/application_transfer_scanBarCode") public RestResponse applicationTransferScanBarCode(HttpServletRequest request) { @@ -681,28 +861,54 @@ public class MaterialController { return new RestResponse(result); } + @PostMapping("/qywxApplicationTransferScanBarCode") + public RestResponse qywxApplicationTransferScanBarCode(@RequestBody Map map, HttpServletRequest request) { + UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); + // 获取当前用户部门所拥有仓库 + List depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userByPort.getMaindeparment().toString()); + // 获取扫描的条形码 + String qrCode = (String) map.get("qrCode"); + // 获取条形码与物料的映射 + MaterialAndBarCode materialByBarCode = materialService.findMaterialByBarCode(qrCode); + if (materialByBarCode != null) { + for (int j = 0; j < depositoryByAdminorg.size(); j++) { + List placePList = new ArrayList<>(); + Boolean isExist = false; + Map param = new HashMap<>(); + param.put("depositoryId", depositoryByAdminorg.get(j).getId()); + param.put("code", materialByBarCode.getMcode()); + List inventory = materialService.findInventory(param); + if (inventory.size() > 0) { + // 如果存在该物料 + MaterialP materialP = inventory.get(0); + materialByBarCode.setMid(materialP.getId()); + List placeByMidAndDid = placeService.findPlaceByMidAndDid(materialP.getId(), depositoryByAdminorg.get(j).getId()); + placePList.addAll(placeByMidAndDid); + isExist = true; + } + if (isExist) { + materialByBarCode.setPlacePList(placePList); + return new RestResponse(materialByBarCode); + } + } + return new RestResponse(null); + } + return new RestResponse(null); + } + // 获取条形码扫描结果 - @GetMapping("/application_out_scanBarCode") - public RestResponse applicationOutScanBarCode(HttpServletRequest request) { + @PostMapping("/qywxApplicationOutScanBarCode") + public RestResponse qywxApplicationOutScanBarCode(@RequestBody Map map, HttpServletRequest request) { UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); // 获取当前用户部门所拥有仓库 List depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userByPort.getMaindeparment().toString()); - String scanBarCodeValue = redisTemplate.opsForValue().get("temporaryBarCodeValueForMaterial" + userByPort.getNumber()).toString(); - redisTemplate.delete("temporaryBarCodeValueForMaterial" + userByPort.getNumber()); - JSONObject jsonObject = JSONObject.parseObject(scanBarCodeValue); - JSONArray barCodeList = (JSONArray) jsonObject.get("barCodeList"); - // 获取标志位,用于判断是否扫描二维码 - Boolean flag = jsonObject.getBoolean("flag"); - Map result = new HashMap<>(); - List materialList = new ArrayList<>(); - for (int i = 0; i < barCodeList.size(); i++) { - // 获取具体的条形码 - String barCode = barCodeList.getString(i); - // 获取条形码与物料的映射 - MaterialAndBarCode materialByBarCode = materialService.findMaterialByBarCode(barCode); - Boolean isExist = false; + String barCode = (String) map.get("qrCode"); + // 获取条形码与物料的映射 + MaterialAndBarCode materialByBarCode = materialService.findMaterialByBarCode(barCode); + if (materialByBarCode != null) { List placePList = new ArrayList<>(); for (int j = 0; j < depositoryByAdminorg.size(); j++) { + Boolean isExist = false; Map param = new HashMap<>(); param.put("depositoryId", depositoryByAdminorg.get(j).getId()); param.put("code", materialByBarCode.getMcode()); @@ -715,23 +921,16 @@ public class MaterialController { placePList.addAll(placeByMidAndDid); isExist = true; } + + if (isExist) { + return new RestResponse(materialByBarCode); + } } - if (isExist) { - materialByBarCode.setPlacePList(placePList); - materialList.add(materialByBarCode); - } + return new RestResponse(null); } - result.put("materialList", materialList); - if (flag) { - String scanQrCodeValue = redisTemplate.opsForValue().get("scanQrCodeValue" + userByPort.getNumber()).toString(); - redisTemplate.delete("scanQrCodeValue" + userByPort.getNumber()); - JSONObject parseObject = JSONObject.parseObject(scanQrCodeValue); - result.put("depository", parseObject.get("depository")); - result.put("place", parseObject.get("place")); - } - return new RestResponse(result); - } + return new RestResponse(null); + } // 获取条形码扫描结果 @PostMapping("/stockTaking_scanBarCode") @@ -847,7 +1046,69 @@ public class MaterialController { } } result.put("materialList", materialList); - result.put("barCodeListByNoMaterial",barCodeListByNoMaterial); + result.put("barCodeListByNoMaterial", barCodeListByNoMaterial); + return new RestResponse(result); + } + + + @PostMapping("/qywxStockTakingScanBarCode") + public RestResponse qywxStockTakingScanBarCode(@RequestBody Map map, HttpServletRequest request) { + UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); + // 获取具体的条形码 + String barCode = (String) map.get("qrCode"); + Map result = new HashMap<>(); + MaterialP material = null; + String placeId = (String) map.get("placeId"); + // 用于存储没有对应关系的条形码 + List barCodeListByNoMaterial = new ArrayList<>(); + + // 获取条形码与物料的映射 + MaterialAndBarCode materialByBarCode = materialService.findMaterialByBarCode(barCode); + if (materialByBarCode != null) { + // 如果存在对应关系 + Boolean isExist = false; + Map param = new HashMap<>(); + // 判断所在仓库 + param.put("depositoryId", map.get("depositoryId")); + param.put("code", materialByBarCode.getMcode()); + List inventory = materialService.findInventory(param); + MaterialP mp = new MaterialP(); + if (inventory.size() > 0) { + // 如果存在该物料 + MaterialP materialP = inventory.get(0); + // 设置标志位true + isExist = true; + if (!"0".equals(placeId)) { + // 如果不是默认库位 + // 获取物料与库位的对应关系 + MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(ObjectFormatUtil.toInteger(placeId), materialP.getId()); + if (placeAndMaterialByMidAndPid == null) { + isExist = false; + } else { + mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity()); + } + } else { + // 获取物料与库位的对应关系 + MaterialAndPlace placeAndMaterialByMidAndPid = placeService.findPlaceAndMaterialByMidAndPid(0, materialP.getId()); + if (placeAndMaterialByMidAndPid == null) { + isExist = false; + } else { + mp.setQuantity(placeAndMaterialByMidAndPid.getQuantity()); + + } + } + mp = materialP; + + } + if (isExist) { + material = mp; + } + } else { + // 如果当前条形码不存对应物料 + barCodeListByNoMaterial.add(barCode); + } + result.put("material", material); + result.put("barCodeListByNoMaterial", barCodeListByNoMaterial); return new RestResponse(result); } @@ -1004,4 +1265,65 @@ public class MaterialController { } + /** + * 用于查询当前扫描的二维码为仓库还是物料 + * @param map + * @param request + * @return + */ + @PostMapping("/qywxScanCodeOut") + public RestResponse qywxScanCodeOut(@RequestBody Map map,HttpServletRequest request){ + String qrCode = (String) map.get("qrCode"); + String materialCode = materialService.findMaterialCodeByQrCode(qrCode); + Map result = new HashMap<>(); + // 0为非法码,1为物料,2为库位,3为仓库 + Integer flag = 0; + if(materialCode != null){ + // 如果当前不为空,则扫描的为物料二维码 + flag = 1; + Material materialByCode = materialService.findMaterialByCode(materialCode); + result.put("material",materialByCode); + }else{ + // 如果为空,则扫描的为条形码 + MaterialAndBarCode materialByBarCode = materialService.findMaterialByBarCode(qrCode); + if(materialByBarCode != null){ + // 如果不为空,则扫描的为物料条形码 + Material material = materialService.findMaterialById(materialByBarCode.getMid()); + flag = 1; + result.put("material",material); + }else{ + // 如果为空,则扫描的可能为库位码 + PidOrDidAndCode locationByQrCode = placeService.findLocationByQrCode(qrCode); + if(locationByQrCode != null){ + // 如果不为空,则是库位码 + +// 1为库位2为仓库 + Integer locationFlag = locationByQrCode.getFlag(); + if(Integer.compare(locationFlag,1) == 0){ + // 如果是库位 + Place placeById = placeService.findPlaceById(ObjectFormatUtil.toInteger(locationByQrCode.getPid())); + + List placeAndMaterialByPid = placeService.findPlaceAndMaterialByPid(placeById.getId()); + PlaceP pp = new PlaceP(placeById); + List mcodeList = new ArrayList<>(); + for (int i = 0; i < placeAndMaterialByPid.size(); i++) { + MaterialAndPlace materialAndPlace = placeAndMaterialByPid.get(i); + Material materialById = materialService.findMaterialById(materialAndPlace.getMid()); + mcodeList.add(materialById.getCode()); + } + pp.setMcodeList(mcodeList); + result.put("place",pp); + flag = 2; + }else{ + // 如果是仓库 + Depository depository = depositoryService.findDepositoryRecordById(ObjectFormatUtil.toInteger(locationByQrCode.getDepositoryId())); + result.put("depository",depository); + flag = 3; + } + } + } + } + result.put("flag",flag); + return new RestResponse(result); + } } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java index 465ef4ca..3aedbbac 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java @@ -16,6 +16,8 @@ import com.dreamchaser.depository_manage.service.*; import com.dreamchaser.depository_manage.utils.*; import com.sun.org.apache.xpath.internal.operations.Mod; import javafx.geometry.Pos; +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.lang.RandomStringUtils; import org.apache.http.protocol.HTTP; import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; @@ -119,7 +121,6 @@ public class PageController { @GetMapping("/login") public ModelAndView login(HttpServletRequest request) { ModelAndView mv = new ModelAndView(); - QyWxConfig.token = QyWxConfig.GetQYWXToken(); JSONObject captcha = Captcha(request); String picPath = (String) captcha.get("picPath"); String captchaid = (String) captcha.get("captchaid"); @@ -459,21 +460,6 @@ public class PageController { map.put("mcode",material.getCode()); // 获取物料与条形码的对应关系 List materialByBarCodeByCondition = materialService.findMaterialByBarCodeByCondition(map); - Map params = new HashMap<>(); - params.put("mid",material.getId()); - params.put("mname",material.getMname()); - params.put("code",material.getCode()); - params.put("version",material.getVersion()); - String context = JSONObject.toJSONString(params); - // 将待展示数据进行加密操作 - context = JM_3DES.encode3Des(JM_3DES.JM_Key,context); - String qrCode = ""; - try { - qrCode = CreateQrCodeUtil.createQrCode(context, 200, 200); - } catch (IOException e) { - throw new MyException(e.getMessage()); - } - mv.addObject("qrCode",qrCode); mv.addObject("record", materialService.findMaterialAndTypeById(id)); mv.addObject("barCodeList",materialByBarCodeByCondition); mv.addObject("materialTypes", materialTypeService.findMaterialTypeAll()); @@ -830,21 +816,7 @@ public class PageController { if (id != null) { Depository depositoryRecordById = depositoryService.findDepositoryRecordById(id); // 用于二维码存放数据 - Map param = new HashMap<>(); - param.put("code",depositoryRecordById.getCode()); - param.put("did",depositoryRecordById.getId()); - param.put("dname",depositoryRecordById.getDname()); - param.put("introduce",depositoryRecordById.getIntroduce()); - String context = JSONObject.toJSONString(param); - // 将待展示数据进行加密操作 - context = JM_3DES.encode3Des(JM_3DES.JM_Key,context); - String qrCode = ""; - try { - qrCode = CreateQrCodeUtil.createQrCode(context,200,200); - } catch (IOException e) { - e.printStackTrace(); - } - mv.addObject("qrCode",qrCode); + mv.addObject("record", depositoryRecordById); Integer cid = depositoryRecordById.getCid(); List postList = findCompanyBySuperior(cid.toString(),userToken); @@ -883,36 +855,6 @@ public class PageController { if (id != null) { mv.addObject("id", id); Place placeById = placeService.findPlaceById(id); - // 用于二维码存放数据 - Map param = new HashMap<>(); - param.put("pid",placeById.getId()); - Depository depositoryRecordById = depositoryService.findDepositoryRecordById(placeById.getDid()); - param.put("dname",depositoryRecordById.getDname()); - param.put("code",placeById.getCode()); - param.put("depositoryId",depositoryRecordById.getId()); - List placeAndMaterialByPid = placeService.findPlaceAndMaterialByPid(placeById.getId()); - StringBuilder mname = new StringBuilder(); - StringBuilder mcodeList = new StringBuilder(); - StringBuilder midList = new StringBuilder(); - for (int i = 0; i < placeAndMaterialByPid.size(); i++) { - Material materialById = materialService.findMaterialById(placeAndMaterialByPid.get(i).getMid()); - mname.append(materialById.getMname()).append(", "); - midList.append(materialById.getId()).append(","); - mcodeList.append(materialById.getCode()).append(","); - } - param.put("mname",mname.toString()); - param.put("midList",midList.toString()); - param.put("mcodeList",mcodeList.toString()); - String context = JSONObject.toJSONString(param); - // 将待展示数据进行加密操作 - context = JM_3DES.encode3Des(JM_3DES.JM_Key,context); - String qrCode = ""; - try { - qrCode = CreateQrCodeUtil.createQrCode(context,200,200); - } catch (IOException e) { - e.printStackTrace(); - } - mv.addObject("qrCode",qrCode); mv.addObject("place", placeById); } else { throw new MyException("缺少必要参数!"); @@ -1820,7 +1762,16 @@ public class PageController { @GetMapping("/scanBarCodeIn") public String scanBarCodeIn(){ - return "pages/scanQrCode/ScanBarCodeIn"; +// return "pages/scanQrCode/ScanBarCodeIn"; + return "pages/QyWxScanCode/QyWxScanBarCodeIn"; + } + + + @GetMapping("/qywxScanBarCodeIn") + public ModelAndView qywxScanBarCodeIn(HttpServletRequest request){ + ModelAndView mv = new ModelAndView(); + mv.setViewName("pages/QyWxScanCode/QyWxScanBarCodeIn"); + return mv; } @GetMapping("/scanBarCodeOut") @@ -2020,4 +1971,6 @@ public class PageController { } + + } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java b/src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java index 7f24d5e7..30b10e54 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/PlaceController.java @@ -1,11 +1,13 @@ package com.dreamchaser.depository_manage.controller; +import cn.hutool.core.lang.Snowflake; import com.baomidou.mybatisplus.extension.api.R; import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.pojo.MaterialP; import com.dreamchaser.depository_manage.pojo.PlaceP; import com.dreamchaser.depository_manage.pojo.RestResponse; +import com.dreamchaser.depository_manage.pojo.StatusInfo; import com.dreamchaser.depository_manage.service.DepositoryService; import com.dreamchaser.depository_manage.service.MaterialService; import com.dreamchaser.depository_manage.service.PlaceService; @@ -16,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import java.io.IOException; import java.util.*; @RestController @@ -257,4 +260,70 @@ public class PlaceController { return new RestResponse(placeList); } + // 构造仓库二维码 + @PostMapping("/createQrCode") + public RestResponse createQrCode(@RequestBody Map map) { + // 通过雪花算法计算随机数 + Snowflake snowflake = new Snowflake(10,10,true); + String qrCode = snowflake.nextIdStr(); + + Integer pid = ObjectFormatUtil.toInteger(map.get("pid")); + String qrCodeByDepository = placeService.findQrCodeByPlace(pid); + + if(qrCodeByDepository == null) { + Map param = new HashMap<>(); + param.put("pid", pid); + param.put("qrCode", qrCode); + placeService.addQrCodeByPlace(param); + }else{ + qrCode = qrCodeByDepository; + } + try { + // 二维码保存信息 + return RestResponse.CreateQrCode(qrCode); + } catch (IOException e) { + return new RestResponse("err: " + e.getMessage(), 678, new StatusInfo("失败", "请联系开发人员")); + } + + } + + // 用于扫描入库位置 + @PostMapping("/qywxApplicationInScanQrCode") + public RestResponse qywxApplicationInScanQrCode(@RequestBody Map map,HttpServletRequest request){ + // 获取扫描的码值 + String qrCode = (String) map.get("qrCode"); + // 根据二维码获取对应位置信息 + PidOrDidAndCode locationByQrCode = placeService.findLocationByQrCode(qrCode); + Map result = new HashMap<>(); + result.put("flag",0); + if(locationByQrCode != null){ + // 获取当前标志位(1为库位2为仓库) + Integer flag = locationByQrCode.getFlag(); + if(Integer.compare(1,flag) == 0){ + // 如果当前位置为库位 + + // 获取当前库位 + Place place = placeService.findPlaceById(Integer.parseInt(locationByQrCode.getPid().toString())); + PlaceP placeP = new PlaceP(place); + + if(Integer.compare(0,placeP.getId()) == 0){ + // 如果是默认库位 + placeP.setDepositoryName("默认库位-0000"); + }else { + Depository depository = depositoryService.findDepositoryRecordById(placeP.getDid()); + placeP.setDepositoryName(depository.getDname() + "-"+placeP.getCode()); + } + result.put("flag",1); + result.put("place",placeP); + }else { + // 如果当前位置为仓库 + + // 获取当前仓库 + Depository depository = depositoryService.findDepositoryRecordById(Integer.parseInt(locationByQrCode.getDepositoryId().toString())); + result.put("flag",2); + result.put("depository",depository); + } + } + return new RestResponse(result); + } } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java b/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java index 8fd0cbd5..e57384e7 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java @@ -9,6 +9,7 @@ import com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes.WX import com.dreamchaser.depository_manage.entity.CallBackLog; import com.dreamchaser.depository_manage.entity.StockTaking; import com.dreamchaser.depository_manage.entity.UserByPort; +import com.dreamchaser.depository_manage.pojo.RestResponse; import com.dreamchaser.depository_manage.pojo.callBackXml.CallBackBaseXml; import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard; import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool; @@ -18,11 +19,15 @@ import com.dreamchaser.depository_manage.service.DepositoryRecordService; import com.dreamchaser.depository_manage.service.DepositoryService; import com.dreamchaser.depository_manage.service.StockTakingService; import com.dreamchaser.depository_manage.service.impl.QyWxOperationService; +import com.dreamchaser.depository_manage.utils.Md5; import com.dreamchaser.depository_manage.utils.ObjectFormatUtil; import com.dreamchaser.depository_manage.utils.QyWxXMLUtils; import io.micrometer.core.instrument.util.IOUtils; +import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.lang.RandomStringUtils; import org.joda.time.format.FormatUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; @@ -38,11 +43,13 @@ import java.time.Instant; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.TimeUnit; /** * 用于企业微信相关操作的控制器 */ +@RestController @Controller public class QyWxOperationController { @@ -63,6 +70,9 @@ public class QyWxOperationController { StockTakingService stockTakingService; + @Autowired + RedisTemplate redisTemplate; + /** * 用于接收企业微信的回调,get方式 */ @@ -110,6 +120,8 @@ public class QyWxOperationController { try { + String header = request.getHeader("user-agent"); + String crypt = Md5.crypt(header); // 构造解密对象 WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(QyWxConfig.sToken,QyWxConfig.sEncodingAESKey,QyWxConfig.corpid); // 企业微信加密签名 @@ -186,7 +198,7 @@ public class QyWxOperationController { new Thread(new Runnable() { @Override public void run() { - Map reviewByQyWx = stockTakingService.reviewByQyWx(templateCard); + Map reviewByQyWx = stockTakingService.reviewByQyWx(templateCard,crypt); if(reviewByQyWx.containsKey("errMsg")){ } @@ -197,7 +209,7 @@ public class QyWxOperationController { new Thread(new Runnable() { @Override public void run() { - stockTakingService.completeStockTakingByQyWx(templateCard); + stockTakingService.completeStockTakingByQyWx(templateCard,crypt); } }).start(); } @@ -209,7 +221,7 @@ public class QyWxOperationController { new Thread(new Runnable() { @Override public void run() { - depositoryRecordService.reviewByQyWx(templateCard); + depositoryRecordService.reviewByQyWx(templateCard,crypt); } }).start(); } @@ -219,7 +231,7 @@ public class QyWxOperationController { new Thread(new Runnable() { @Override public void run() { - qyWxOperationService.updateTemplateCard(templateCard.getResponseCode(),userByPort.getName(), finalResult); + qyWxOperationService.updateTemplateCard(templateCard.getResponseCode(),userByPort.getName(), finalResult,crypt); } }).start(); @@ -256,14 +268,17 @@ public class QyWxOperationController { public ModelAndView QyWxLogin(@RequestParam(required = false)String code, @RequestParam(required = false)String action, @RequestParam(required = false)String state, - HttpServletRequest request) + HttpServletRequest request, + HttpServletResponse response) { ModelAndView mv = new ModelAndView(); mv.addObject("userWxId",""); mv.setViewName("pages/user/login"); if(code != null) { QyWxConfig.code = code; - JSONObject jsonObject = QyWxConfig.GetQYWXUserId(); + String header = request.getHeader("user-agent"); + String crypt = Md5.crypt(header); + JSONObject jsonObject = QyWxConfig.GetQYWXUserId(crypt); Integer errCode = jsonObject.getInteger("errcode"); String userId = jsonObject.getString("userid"); if (errCode == 0) { @@ -285,7 +300,11 @@ public class QyWxOperationController { session.setAttribute("userToken",userByPort); session.setMaxInactiveInterval(1800); mv.addObject("user",userByPort); - mv.setViewName("index"); + try { + response.sendRedirect("https://jy.hxgk.group/"); + } catch (IOException e) { + e.printStackTrace(); + } }else{ JSONObject captcha = PageController.Captcha(request); String picPath = (String) captcha.get("picPath"); @@ -312,7 +331,94 @@ public class QyWxOperationController { } + /** + * 用于获取用于调用企业微信接口的签名 + * @param request + * @return + */ + @GetMapping("/QyWxSignature") + public RestResponse getQyWXSignature(@RequestParam Map map,HttpServletRequest request){ + // 随机字符串 + + + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); + + + Map result = new HashMap<>(); +// jsapi_ticket_app加密后 + String s = ""; +// jsapi_ticket_enterprises加密后 + String s1 = ""; + + // 时间戳 + long timestamp = 0; + + // 随机字符串 + String noncestr = ""; + + // 访问url + String url = QyWxConfig.jsApiUrl; + + s = (String) redisTemplate.opsForHash().get("wms_QyWxScanQrCodeSignature","jsapi_ticket_app"); + if(s != null ){ + s1 = (String) redisTemplate.opsForHash().get("wms_QyWxScanQrCodeSignature","jsapi_ticket_enterprises"); + timestamp = Long.valueOf((String) redisTemplate.opsForHash().get("wms_QyWxScanQrCodeSignature","timestamp")); + url = (String) redisTemplate.opsForHash().get("wms_QyWxScanQrCodeSignature","url"); + noncestr =(String) redisTemplate.opsForHash().get("wms_QyWxScanQrCodeSignature","noncestr"); + }else { + + timestamp = System.currentTimeMillis() / 1000; + //生成从ASCII 32到126组成的随机字符串 +// String noncestr = RandomStringUtils.randomAscii(10); + noncestr = String.valueOf(timestamp); + + // 获取企业的jsapi_ticket + String header = request.getHeader("user-agent"); + String crypt = Md5.crypt(header); + JSONObject ticketForApp = QyWxConfig.getQyWxJsApiTicketForApp(crypt); + JSONObject ticketForEnterprise = QyWxConfig.getQyWxJsApiTicketForEnterprise(crypt); + Integer errcodeForEnterprise = ticketForEnterprise.getInteger("errcode"); + Integer errcodeForApp = ticketForApp.getInteger("errcode"); + // 获取企业的jsapi_ticket + String ticketForEnterprises = ""; + String ticketForEnterApps = ""; + if (Integer.compare(0, errcodeForEnterprise) == 0) { + ticketForEnterprises = ticketForEnterprise.getString("ticket"); + } + if (Integer.compare(0, errcodeForApp) == 0) { + ticketForEnterApps = ticketForApp.getString("ticket"); + } + Integer expires_in = ticketForEnterprise.getInteger("expires_in"); + // 步骤1. 将这些参数拼接成字符串string1: + String jsapi_ticket_app = "jsapi_ticket=" + ticketForEnterApps + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url=" + url; + String jsapi_ticket_enterprises = "jsapi_ticket=" + ticketForEnterprises + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url=" + url; + // 步骤2. 对string1进行sha1签名,得到signature + s = DigestUtils.sha1Hex(jsapi_ticket_app); + s1 = DigestUtils.sha1Hex(jsapi_ticket_enterprises); + + redisTemplate.opsForHash().put("wms_QyWxScanQrCodeSignature","jsapi_ticket_app",s); + redisTemplate.opsForHash().put("wms_QyWxScanQrCodeSignature","jsapi_ticket_enterprises",s1); + redisTemplate.opsForHash().put("wms_QyWxScanQrCodeSignature","timestamp",String.valueOf(timestamp)); + redisTemplate.opsForHash().put("wms_QyWxScanQrCodeSignature","url",url); + redisTemplate.opsForHash().put("wms_QyWxScanQrCodeSignature","noncestr",noncestr); + + redisTemplate.expire("wms_QyWxScanQrCodeSignature",expires_in, TimeUnit.SECONDS); + + + } + result.put("timestamp", String.valueOf(timestamp)); + result.put("noncestr",noncestr); + result.put("jsapi_ticket_app",s); + result.put("jsapi_ticket_enterprises",s1); + result.put("corpid",QyWxConfig.corpid); + result.put("agentid", String.valueOf(QyWxConfig.AgentId)); + result.put("url",url); + + System.out.println(result); + + return new RestResponse(result); + } } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java b/src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java index 3e6acb2f..6246d399 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/StockTakingController.java @@ -13,6 +13,7 @@ import com.dreamchaser.depository_manage.service.PlaceService; import com.dreamchaser.depository_manage.service.StockTakingService; import com.dreamchaser.depository_manage.service.impl.QyWxOperationService; import com.dreamchaser.depository_manage.utils.CrudUtil; +import com.dreamchaser.depository_manage.utils.Md5; import com.dreamchaser.depository_manage.utils.ObjectFormatUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; @@ -55,6 +56,9 @@ public class StockTakingController { UserByPort userToken = (UserByPort) request.getAttribute("userToken"); + String header = request.getHeader("user-agent"); + String crypt = Md5.crypt(header); + List params = (ArrayList) map.get("params"); String departmentManagerId = (String) map.get("departmentManagerId"); @@ -113,7 +117,7 @@ public class StockTakingController { Object mainId = param.get("mainId"); // 向企业微信发送消息 - JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingDepartmentManagerMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId)); + JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingDepartmentManagerMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId),crypt); // 将当前返回结果保存到redis中 Map QyWxMessageMap = new HashMap<>(); QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); @@ -129,7 +133,7 @@ public class StockTakingController { success += stockTakingService.insertStockTaking(map); // 向企业微信发送消息 Object mainId = map.get("mainId"); - JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingDepartmentManagerMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId)); + JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingDepartmentManagerMessage(QyWxDepartmentManager.toString(), ObjectFormatUtil.toInteger(mainId),crypt); // 将当前返回结果保存到redis中 Map QyWxMessageMap = new HashMap<>(); QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); @@ -162,8 +166,10 @@ public class StockTakingController { // 用于审核 @PostMapping("/review") public RestResponse review(@RequestBody Map map,HttpServletRequest request){ + String header = request.getHeader("user-agent"); + String crypt = Md5.crypt(header); UserByPort userToken= (UserByPort) request.getAttribute("userToken"); - Map review = stockTakingService.review(map, userToken); + Map review = stockTakingService.review(map, userToken,crypt); if(review.containsKey("errMsg")){ // 如果有出错情况 @@ -178,7 +184,9 @@ public class StockTakingController { @PostMapping("/complete") public RestResponse complete(@RequestBody Map map,HttpServletRequest request){ UserByPort userToken= (UserByPort) request.getAttribute("userToken"); - Map complete = stockTakingService.completeStockTaking(map, userToken); + String header = request.getHeader("user-agent"); + String crypt = Md5.crypt(header); + Map complete = stockTakingService.completeStockTaking(map, userToken,crypt); if(complete.containsKey("errMsg")){ // 如果有出错情况 return new RestResponse(complete,666,new StatusInfo("有错误","发现错误")); @@ -216,7 +224,8 @@ public class StockTakingController { public RestResponse stockTransfer(@RequestBody Map map,HttpServletRequest request) { UserByPort userToken = (UserByPort) request.getAttribute("userToken"); - + String header = request.getHeader("user-agent"); + String crypt = Md5.crypt(header); String minIds = (String) map.get("minIds"); String[] split = minIds.split(","); List minIdList = new ArrayList<>(); @@ -230,7 +239,7 @@ public class StockTakingController { } map.put("minIds",minIdList); - Integer transfer = stockTakingService.stockTakingTransfer(map, userToken); + Integer transfer = stockTakingService.stockTakingTransfer(map, userToken,crypt); return CrudUtil.postHandle(transfer,minIdList.size()); } } diff --git a/src/main/java/com/dreamchaser/depository_manage/converter/ExcelMaterialCodeConverter.java b/src/main/java/com/dreamchaser/depository_manage/converter/ExcelMaterialCodeConverter.java index cad9fc79..a99969e3 100644 --- a/src/main/java/com/dreamchaser/depository_manage/converter/ExcelMaterialCodeConverter.java +++ b/src/main/java/com/dreamchaser/depository_manage/converter/ExcelMaterialCodeConverter.java @@ -20,7 +20,7 @@ import java.util.List; * 用于物料分类上级编码 */ @Component -public class ExcelMaterialCodeConverter implements Converter { +public class ExcelMaterialCodeConverter implements Converter { @Autowired private MaterialService materialService; @@ -28,7 +28,7 @@ public class ExcelMaterialCodeConverter implements Converter { private static ExcelMaterialCodeConverter excelMaterialCodeConverter; @Override public Class supportJavaTypeKey() { - return Long.class; + return String.class; } @Override @@ -43,12 +43,12 @@ public class ExcelMaterialCodeConverter implements Converter { * @return */ @Override - public Long convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { + public String convertToJavaData(ReadCellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception { Material material = excelMaterialCodeConverter.materialService.findMaterialByCode(cellData.getStringValue()); if(material == null) { throw new RuntimeException("没有该物料"); } - return Long.valueOf(cellData.getStringValue()); + return (cellData.getStringValue()); } @PostConstruct diff --git a/src/main/java/com/dreamchaser/depository_manage/entity/ExcelInfoByInventory.java b/src/main/java/com/dreamchaser/depository_manage/entity/ExcelInfoByInventory.java index bcce76e0..6bb1c9f5 100644 --- a/src/main/java/com/dreamchaser/depository_manage/entity/ExcelInfoByInventory.java +++ b/src/main/java/com/dreamchaser/depository_manage/entity/ExcelInfoByInventory.java @@ -15,7 +15,7 @@ public class ExcelInfoByInventory { /** 物料编号 */ @ExcelProperty("EAS编号") - private Long id; + private String id; /** 存货编码 */ @ExcelProperty(value = "编码",converter = ExcelMaterialCodeConverter.class) diff --git a/src/main/java/com/dreamchaser/depository_manage/entity/PidOrDidAndCode.java b/src/main/java/com/dreamchaser/depository_manage/entity/PidOrDidAndCode.java new file mode 100644 index 00000000..ff66e6da --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/entity/PidOrDidAndCode.java @@ -0,0 +1,30 @@ +package com.dreamchaser.depository_manage.entity; + +import lombok.Data; + +/** + * 用于存储二维码与仓库或库位之间的关系 + */ +@Data +public class PidOrDidAndCode { + /** + * id + */ + private Long id; + /** + 库位id + */ + private Long pid; + /** + * 仓库id + */ + private Long depositoryId; + /** + * 标志,1为库位2为仓库 + */ + private Integer flag; + /** + * 对应码值 + */ + private String code; +} diff --git a/src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java b/src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java index 23d73a64..fb19ecc4 100644 --- a/src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java +++ b/src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java @@ -30,6 +30,7 @@ public class UserInterceptor extends HandlerInterceptorAdapter { HttpServletResponse response, Object handler) throws MyException { String header = request.getHeader("user-agent"); String token =null; + String servletPath = request.getServletPath(); HttpSession session = request.getSession(); UserByPort userByPort = (UserByPort) session.getAttribute("userToken"); if(userByPort!=null){ @@ -55,7 +56,6 @@ public class UserInterceptor extends HandlerInterceptorAdapter { if(isMobileDevice(request)){ if(header.contains("wxwork")) { // 如果是企业微信跳转 - QyWxConfig.token = QyWxConfig.GetQYWXToken(); response.sendRedirect(QyWxConfig.getQYWXCodeUrl()); }else{ diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java b/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java index 9f644355..7c6b3b0b 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java @@ -214,4 +214,6 @@ public interface MaterialMapper { List findMaterialByType(Long oldId); + + } diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml index 03fcd375..a5103259 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml @@ -65,6 +65,8 @@ + + m.id, m.depository_id, m.mname, m.quantity, m.price, m.type_id,m.state,m.code ,m.version ,m.amounts ,m.unit ,m.texture,m.depositoryCode,m.number_of_temporary diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialTypeMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialTypeMapper.xml index 0984b26a..7e114acd 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialTypeMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/MaterialTypeMapper.xml @@ -107,7 +107,7 @@ diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/QrCodeMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/QrCodeMapper.xml new file mode 100644 index 00000000..c9b7a423 --- /dev/null +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/QrCodeMapper.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + pdac.id,pdac.code,pdac.pid,pdac.flag,pdac.depositoryId + + + + + + + insert into qrcodeandmaterial(id,qrcode,mcode) + values ( + #{id}, + #{qrCode}, + #{mcode} + ) + + + + + insert into qrcodeandmaterial(id,mcode,qrcode) + values + + (#{id}, + #{code}, + #{item}) + + + + + + + + + + + + delete + from qrcodeandmaterial + where 1 = 1 + + and qrcode = #{qrCode} + + + and mcode = #{mcode} + + + and id = #{id} + + + + + + + + + + insert into pidordidandcode(id,pid,depositoryId,flag,code) + values ( + #{id}, + #{pid}, + #{depositoryId}, + #{flag}, + #{qrCode} + ) + + + + + insert into pidordidandcode(id,pid,depositoryId,flag,code) + values + + ( #{id}, + #{pid}, + #{depositoryId}, + #{flag}, + #{item}) + + + + + + \ No newline at end of file diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/PlaceP.java b/src/main/java/com/dreamchaser/depository_manage/pojo/PlaceP.java index 2e19aeb6..42c2ca3d 100644 --- a/src/main/java/com/dreamchaser/depository_manage/pojo/PlaceP.java +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/PlaceP.java @@ -1,8 +1,11 @@ package com.dreamchaser.depository_manage.pojo; +import com.dreamchaser.depository_manage.entity.MaterialAndPlace; import com.dreamchaser.depository_manage.entity.Place; import lombok.Data; +import java.util.List; + @Data public class PlaceP { @@ -73,6 +76,8 @@ public class PlaceP { */ private String depositoryName; + private List mcodeList; + public PlaceP(Integer id, Integer x, Integer y, Integer z, Integer mid, Integer did, String code, Integer min, Integer max, Integer state, String mname, String mcode, String depositoryCode, String depositoryName) { this.id = id; this.x = x; diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/RestResponse.java b/src/main/java/com/dreamchaser/depository_manage/pojo/RestResponse.java index 69da0cbd..969c73b9 100644 --- a/src/main/java/com/dreamchaser/depository_manage/pojo/RestResponse.java +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/RestResponse.java @@ -63,9 +63,13 @@ public class RestResponse implements Serializable { this.statusInfo = statusInfo; } - public static RestResponse CreateQrCode(Map params) throws IOException { - // 获取要生产二维码的内容 - String context = JSONObject.toJSONString(params); + /** + * 生成二维码 + * @param context 随机数 + * @return + * @throws IOException + */ + public static RestResponse CreateQrCode(String context) throws IOException { // 生成base64类型图片 String qrCode = CreateQrCodeUtil.createQrCode(context, 200, 200); return new RestResponse(qrCode,200,new StatusInfo("成功!","二维码生成成功")); diff --git a/src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java b/src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java index cd31947c..3431efd9 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java @@ -40,7 +40,7 @@ public interface DepositoryRecordService { * @param map 仓库调度信息 * @return 受影响的行数 */ - Integer review(Map map,Integer userId,UserByPort userToken); + Integer review(Map map,Integer userId,UserByPort userToken,String userAgent); /** @@ -48,7 +48,7 @@ public interface DepositoryRecordService { * @param templateCard * @return */ - Integer reviewByQyWx(TemplateCard templateCard); + Integer reviewByQyWx(TemplateCard templateCard,String userAgent); /** @@ -353,5 +353,5 @@ public interface DepositoryRecordService { * @param userByPort * @return */ - RestResponse completeApplicationOutMinRecord(Map map,UserByPort userByPort); + RestResponse completeApplicationOutMinRecord(Map map,UserByPort userByPort,String userAgent); } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java b/src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java index 0e204589..906c6060 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java @@ -161,4 +161,19 @@ public interface DepositoryService { */ List findDepositoryByAdminorgAndUser(UserByPort userByPort); + /** + * 获取仓库对应的二维码 + * @param did + * @return + */ + String findQrCodeByDepository(Integer did); + + + /** + * 用于添加仓库与二维码的对应关系 + * @param map + * @return + */ + Integer addQrCodeByDepository(Map map); + } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java b/src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java index 87899bee..4016ab8f 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java @@ -231,4 +231,24 @@ public interface MaterialService { * @return */ Integer delBarCodeByMaterial(Map map); + + + /** + * 用于添加二维码与物料的对应关系 + */ + Integer addQrCodeByMaterial(Map map); + + /** + * 根据物料编码获取与二维码的对应关系 + * @param Mcode + * @return + */ + String findQrCodeByMcode(String Mcode); + + /** + * 根据二维码获取对应的物料编码 + * @param qrCode + * @return + */ + String findMaterialCodeByQrCode(String qrCode); } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/PlaceService.java b/src/main/java/com/dreamchaser/depository_manage/service/PlaceService.java index 5fe0114e..54b3fafb 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/PlaceService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/PlaceService.java @@ -1,6 +1,7 @@ package com.dreamchaser.depository_manage.service; import com.dreamchaser.depository_manage.entity.MaterialAndPlace; +import com.dreamchaser.depository_manage.entity.PidOrDidAndCode; import com.dreamchaser.depository_manage.entity.Place; import com.dreamchaser.depository_manage.pojo.PlaceP; @@ -124,4 +125,25 @@ public interface PlaceService { * @return */ Integer updateMaterialAndPlace(MaterialAndPlace mp); + + /** + * 获取库位对应的二维码 + * @param pid + * @return + */ + String findQrCodeByPlace(Integer pid); + + + /** + * 用于添加库位与二维码的对应关系 + * @param map + * @return + */ + Integer addQrCodeByPlace(Map map); + + + /** + * 根据二维码的值获取对应位置 + */ + PidOrDidAndCode findLocationByQrCode(String qrCode); } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/StockTakingService.java b/src/main/java/com/dreamchaser/depository_manage/service/StockTakingService.java index 52d7401c..ee0ab34b 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/StockTakingService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/StockTakingService.java @@ -89,21 +89,21 @@ public interface StockTakingService { * @param map * @return */ - Map review(Map map, UserByPort userToken); + Map review(Map map, UserByPort userToken,String userAgent); /** * 用于进行盘点结果转移 * @param map * @return */ - Integer stockTakingTransfer(Map map,UserByPort userToken); + Integer stockTakingTransfer(Map map,UserByPort userToken,String userAgent); /** * 用于企业微信的审核申请处理 * @param templateCard * @return */ - Map reviewByQyWx(TemplateCard templateCard); + Map reviewByQyWx(TemplateCard templateCard,String userAgent); /** @@ -112,14 +112,14 @@ public interface StockTakingService { * @param userToken * @return */ - Map completeStockTaking(Map map, UserByPort userToken); + Map completeStockTaking(Map map, UserByPort userToken,String userAgent); /** * 用于企业微信的审核申请处理 * @param templateCard * @return */ - Integer completeStockTakingByQyWx(TemplateCard templateCard); + Integer completeStockTakingByQyWx(TemplateCard templateCard,String userAgent); } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java index 93078241..79a76810 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java @@ -422,7 +422,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { */ @Transactional @Override - public RestResponse completeApplicationOutMinRecord(Map param, UserByPort userByPort) { + public RestResponse completeApplicationOutMinRecord(Map param, UserByPort userByPort,String userAgent) { // 最终返回值 RestResponse restResponse = new RestResponse(); @@ -612,7 +612,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { // depositoryManagerByQyWx.append(depositoryManager.getWorkwechat()+","); } depositoryManagerByQyWx.append("PangFuZhen,"); - JSONObject jsonObject = qyWxOperationService.sendCcMessageToUsers(depositoryManagerByQyWx.toString(), record.getId()); + JSONObject jsonObject = qyWxOperationService.sendCcMessageToUsers(depositoryManagerByQyWx.toString(), record.getId(),userAgent); // 删除redis中本订单 redisTemplate.delete("record:" + record.getId()); @@ -701,7 +701,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { */ @Override @Transactional - public Integer review(Map map, Integer userid, UserByPort userToken) { + public Integer review(Map map, Integer userid, UserByPort userToken,String userAgent) { ApplicationOutRecordP record = depositoryRecordMapper.findApplicationOutRecordPById(ObjectFormatUtil.toInteger(map.get("id"))); Object id = map.get("id"); // 主订单编号 map.remove("id"); @@ -730,7 +730,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { new Thread(new Runnable() { @Override public void run() { - JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(QyWxUid.toString(), ObjectFormatUtil.toInteger(id), false); + JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(QyWxUid.toString(), ObjectFormatUtil.toInteger(id), false,userAgent); // 将当前返回结果保存到redis中 Map QyWxMessageMap = new HashMap<>(); QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); @@ -758,7 +758,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { UserByPort applicantUser = PageController.FindUserById(record.getApplicantId(), userToken); String key = "user:"+applicantUser.getNumber()+":QyWxOutId:"+id; String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode"); - qyWxOperationService.updateTemplateCard(responseCode,userToken.getName(), finalResult); + qyWxOperationService.updateTemplateCard(responseCode,userToken.getName(), finalResult,userAgent); } }).start(); } else { @@ -826,7 +826,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { new Thread(new Runnable() { @Override public void run() { - JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId()); + JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(),userAgent); } }).start(); } @@ -849,7 +849,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { UserByPort departHead = PageController.FindUserById(ObjectFormatUtil.toInteger(record.getDepartmenthead()), userToken); String key = "user:"+departHead.getNumber()+":QyWxOutId:"+id; String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode"); - qyWxOperationService.updateTemplateCard(responseCode,userToken.getName(), finalResult); + qyWxOperationService.updateTemplateCard(responseCode,userToken.getName(), finalResult,userAgent); } }).start(); } @@ -864,7 +864,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { * @return */ @Override - public Integer reviewByQyWx(TemplateCard templateCard ) { + public Integer reviewByQyWx(TemplateCard templateCard ,String userAgent) { // 用于更新订单 Map map = new HashMap<>(); // 点击用户 @@ -909,7 +909,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { QyWxUid.append("PangFuZhen"+","); map.put("depositoryManager", depositoryManager.toString()); // 向仓储中心负责人发送新的消息 - JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(QyWxUid.toString(), ObjectFormatUtil.toInteger(outId), false); + JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(QyWxUid.toString(), ObjectFormatUtil.toInteger(outId), false,userAgent); // 将当前返回结果保存到redis中 Map QyWxMessageMap = new HashMap<>(); QyWxMessageMap.put("MsgId",jsonObject.getString("msgid")); @@ -987,7 +987,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { new Thread(new Runnable() { @Override public void run() { - JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId()); + JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(),userAgent); } }).start(); } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java index 4aeace85..b1248d9e 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java @@ -4,6 +4,7 @@ import com.dreamchaser.depository_manage.controller.PageController; import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.mapper.DepositoryMapper; import com.dreamchaser.depository_manage.mapper.PlaceMapper; +import com.dreamchaser.depository_manage.mapper.QrCodeMapper; import com.dreamchaser.depository_manage.mapper.RoleMapper; import com.dreamchaser.depository_manage.pojo.RoleAndDepository; import com.dreamchaser.depository_manage.service.DepositoryService; @@ -29,6 +30,9 @@ public class DepositoryServiceImpl implements DepositoryService { @Autowired PlaceMapper placeMapper; + @Autowired + QrCodeMapper qrCodeMapper; + /** * 根据条件插入数据 * @@ -491,6 +495,32 @@ public class DepositoryServiceImpl implements DepositoryService { return depositoryList; } + /** + * 获取仓库对应的二维码 + * @param did + * @return + */ + @Override + public String findQrCodeByDepository(Integer did) { + Map map = new HashMap<>(); + // 1为库位2为仓库 + map.put("flag",2); + map.put("depositoryId",did); + return qrCodeMapper.selectQrCodeByDepositoryOrPlace(map); + } + + /** + * 用于添加仓库与二维码的对应关系 + * @param map + * @return + */ + @Override + public Integer addQrCodeByDepository(Map map) { + // 1为库位2为仓库 + map.put("flag",2); + return qrCodeMapper.addQrCodeByPidOrDid(map); + } + //判断是否有子类 public boolean isChildForDepository(Integer parentId) { boolean flag = false; diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java index 52efef89..f98f6e6b 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java @@ -4,6 +4,7 @@ import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.mapper.DepositoryMapper; import com.dreamchaser.depository_manage.mapper.MaterialMapper; import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper; +import com.dreamchaser.depository_manage.mapper.QrCodeMapper; import com.dreamchaser.depository_manage.pojo.MaterialP; import com.dreamchaser.depository_manage.pojo.PlaceP; import com.dreamchaser.depository_manage.service.MaterialService; @@ -38,6 +39,8 @@ public class MaterialServiceImpl implements MaterialService { @Autowired PlaceService placeService; + @Autowired + QrCodeMapper qrCodeMapper; /** * 增加一条库存记录 * @@ -578,6 +581,34 @@ public class MaterialServiceImpl implements MaterialService { return materialMapper.deleteBarCodeAndMaterial(map); } + /** + * 用于添加二维码与物料的对应关系 + */ + @Override + public Integer addQrCodeByMaterial(Map map) { + return qrCodeMapper.addQrCodeAndMaterial(map); + } + + /** + * 根据物料编码获取与二维码的对应关系 + * @param Mcode + * @return + */ + @Override + public String findQrCodeByMcode(String Mcode) { + return qrCodeMapper.selectQrCodeByMcode(Mcode); + } + + /** + * 根据二维码获取对应的物料编码 + * @param qrCode + * @return + */ + @Override + public String findMaterialCodeByQrCode(String qrCode) { + return qrCodeMapper.findMaterialCodeByQrCode(qrCode); + } + /** * 构造树形选择框 * @return diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/PlaceServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/PlaceServiceImpl.java index 16045c10..80cdd8fb 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/PlaceServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/PlaceServiceImpl.java @@ -2,8 +2,10 @@ package com.dreamchaser.depository_manage.service.impl; import com.dreamchaser.depository_manage.entity.Depository; import com.dreamchaser.depository_manage.entity.MaterialAndPlace; +import com.dreamchaser.depository_manage.entity.PidOrDidAndCode; import com.dreamchaser.depository_manage.entity.Place; import com.dreamchaser.depository_manage.mapper.PlaceMapper; +import com.dreamchaser.depository_manage.mapper.QrCodeMapper; import com.dreamchaser.depository_manage.pojo.PlaceP; import com.dreamchaser.depository_manage.service.DepositoryService; import com.dreamchaser.depository_manage.service.PlaceService; @@ -25,6 +27,9 @@ public class PlaceServiceImpl implements PlaceService { @Autowired DepositoryService depositoryService; + @Autowired + QrCodeMapper qrCodeMapper; + /** * 查找所有库位 * @return @@ -248,5 +253,45 @@ public class PlaceServiceImpl implements PlaceService { return placeMapper.updateMaterialAndPlace(mp); } + /** + * 获取库位对应的二维码 + * @param pid + * @return + */ + @Override + public String findQrCodeByPlace(Integer pid) { + Map map = new HashMap<>(); + // 1为库位2为仓库 + map.put("flag",1); + map.put("pid",pid); + return qrCodeMapper.selectQrCodeByDepositoryOrPlace(map); + } + + /** + * 用于添加库位与二维码的对应关系 + * @param map + * @return + */ + @Override + public Integer addQrCodeByPlace(Map map) { + // 1为库位2为仓库 + map.put("flag",1); + return qrCodeMapper.addQrCodeByPidOrDid(map); + } + + /** + * 根据二维码的值获取对应位置 + */ + @Override + public PidOrDidAndCode findLocationByQrCode(String qrCode) { + Map map = new HashMap<>(); + map.put("qrCode",qrCode); + List locationByCondition = qrCodeMapper.findLocationByCondition(map); + if(locationByCondition.size()>0){ + return locationByCondition.get(0); + } + return null; + } + } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java index 230ab35b..7b07cd84 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java @@ -53,7 +53,7 @@ public class QyWxOperationService { * @param flag 用于判断发送类型是部门负责人还是仓储负责人(true为部门,false为仓储) * @return */ - public JSONObject sendQyWxToApplicationOutMessage(String uid, Integer outId, Boolean flag) { + public JSONObject sendQyWxToApplicationOutMessage(String uid, Integer outId, Boolean flag,String userAgent) { // 获取将要发送申请的订单记录 ApplicationOutRecordP applicationOutRecordPById = depositoryRecordMapper.findApplicationOutRecordPById(outId); @@ -80,7 +80,7 @@ public class QyWxOperationService { } // 1.获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url - String accessToken = "".equals(QyWxConfig.token) ? QyWxConfig.GetQYWXToken() : QyWxConfig.token; + String accessToken = QyWxConfig.GetQYWXToken(userAgent); // 2.获取发送对象,并转成json ButtonInteraction buttonInteraction = new ButtonInteraction(); // 1.1非必需 @@ -244,7 +244,7 @@ public class QyWxOperationService { * @param mainId 盘点记录编号 * @return */ - public JSONObject sendQyWxToStockTakingDepartmentManagerMessage(String uid, Integer mainId){ + public JSONObject sendQyWxToStockTakingDepartmentManagerMessage(String uid, Integer mainId,String userAgent){ // 获取盘点主记录 StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId); @@ -308,7 +308,7 @@ public class QyWxOperationService { } // 1.获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url - String accessToken = "".equals(QyWxConfig.token) ? QyWxConfig.GetQYWXToken() : QyWxConfig.token; + String accessToken = QyWxConfig.GetQYWXToken(userAgent); // 2.获取发送对象,并转成json ButtonInteraction buttonInteraction = new ButtonInteraction(); // 1.1非必需 @@ -490,7 +490,7 @@ public class QyWxOperationService { * @param mainId 盘点记录编号 * @return */ - public JSONObject sendQyWxToStockTakingMessage(String uid, Integer mainId,List normalMinId){ + public JSONObject sendQyWxToStockTakingMessage(String uid, Integer mainId,List normalMinId,String userAgent){ // 获取盘点主记录 StockTaking mainRecord = stockTakingMapper.selectStockTakingById(mainId); @@ -558,7 +558,7 @@ public class QyWxOperationService { } // 1.获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url - String accessToken = "".equals(QyWxConfig.token) ? QyWxConfig.GetQYWXToken() : QyWxConfig.token; + String accessToken = QyWxConfig.GetQYWXToken(userAgent); // 2.获取发送对象,并转成json ButtonInteraction buttonInteraction = new ButtonInteraction(); // 1.1非必需 @@ -733,7 +733,7 @@ public class QyWxOperationService { * @param outId 订单编号 * @return */ - public JSONObject sendCcMessageToUsers(String uid, Integer outId) { + public JSONObject sendCcMessageToUsers(String uid, Integer outId,String userAgent) { // 获取已经完成的订单 ApplicationOutRecordP recordP = depositoryRecordMapper.findApplicationOutRecordPById(outId); // 申请人id @@ -788,7 +788,7 @@ public class QyWxOperationService { System.out.println(jsonString); // 3.获取请求的url // 获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url - String accessToken = "".equals(QyWxConfig.token) ? QyWxConfig.GetQYWXToken() : QyWxConfig.token; + String accessToken = QyWxConfig.GetQYWXToken(userAgent); String url = QyWxConfig.sendMessage_url.replace("ACCESS_TOKEN", accessToken); // 4.调用接口,发送消息 @@ -809,7 +809,7 @@ public class QyWxOperationService { * @param map * @return */ - public JSONObject sendCcStockTakingMessageToHead(String uid, Map map, UserByPort userToken, StockTaking mainRecord) { + public JSONObject sendCcStockTakingMessageToHead(String uid, Map map, UserByPort userToken, StockTaking mainRecord,String userAgent) { /** * 获取完成的订单 @@ -898,7 +898,7 @@ public class QyWxOperationService { System.out.println(jsonString); // 3.获取请求的url // 获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url - String accessToken = "".equals(QyWxConfig.token) ? QyWxConfig.GetQYWXToken() : QyWxConfig.token; + String accessToken =QyWxConfig.GetQYWXToken(userAgent); String url = QyWxConfig.sendMessage_url.replace("ACCESS_TOKEN", accessToken); // 4.调用接口,发送消息 @@ -918,7 +918,7 @@ public class QyWxOperationService { * @param mainRecord 主订单 * @return */ - public JSONObject sendStockTakingErrMessageToHead(String uid,List errIds,StockTaking mainRecord,UserByPort userToken){ + public JSONObject sendStockTakingErrMessageToHead(String uid,List errIds,StockTaking mainRecord,UserByPort userToken,String userAgent){ MessageByMarkDown markDown = new MessageByMarkDown(); //设置消息接收者 @@ -992,7 +992,7 @@ public class QyWxOperationService { System.out.println(jsonString); // 3.获取请求的url // 获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url - String accessToken = "".equals(QyWxConfig.token) ? QyWxConfig.GetQYWXToken() : QyWxConfig.token; + String accessToken = QyWxConfig.GetQYWXToken(userAgent) ; String url = QyWxConfig.sendMessage_url.replace("ACCESS_TOKEN", accessToken); // 4.调用接口,发送消息 @@ -1011,7 +1011,7 @@ public class QyWxOperationService { * @param map * @return */ - public JSONObject sendCcStockTakingTransferMessageToHead(String uid, Map map, UserByPort userToken, StockTaking mainRecord){ + public JSONObject sendCcStockTakingTransferMessageToHead(String uid, Map map, UserByPort userToken, StockTaking mainRecord,String userAgent){ /** * 获取要转移的订单 @@ -1128,7 +1128,7 @@ public class QyWxOperationService { System.out.println(jsonString); // 3.获取请求的url // 获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url - String accessToken = "".equals(QyWxConfig.token) ? QyWxConfig.GetQYWXToken() : QyWxConfig.token; + String accessToken = QyWxConfig.GetQYWXToken(userAgent) ; String url = QyWxConfig.sendMessage_url.replace("ACCESS_TOKEN", accessToken); // 4.调用接口,发送消息 @@ -1148,7 +1148,7 @@ public class QyWxOperationService { * @param outMinId * @return */ - public JSONObject sendNotificationToDepositoryManager(String uid, Integer outMinId) { + public JSONObject sendNotificationToDepositoryManager(String uid, Integer outMinId,String userAgent) { // 需要出库的子订单 ApplicationOutRecordMin recordMin = depositoryRecordMapper.findApplicationOutMinById(outMinId); // 获取其主订单 @@ -1253,7 +1253,7 @@ public class QyWxOperationService { // 卡片整体点击事件 TemplateCard_card_action card_action = new TemplateCard_card_action(); card_action.setType(1); - card_action.setUrl("https://jy.hxgk.group/ApplicationOutMinByDidForMobile?depositoryId=" + depositoryRecordById.getId() + "&state=0"); + card_action.setUrl("https://jy.hxgk.group/"); text_notice.setCard_action(card_action); //跳转指引样式的列表 @@ -1271,7 +1271,7 @@ public class QyWxOperationService { // 3.获取请求的url // 获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url - String accessToken = "".equals(QyWxConfig.token) ? QyWxConfig.GetQYWXToken() : QyWxConfig.token; + String accessToken = QyWxConfig.GetQYWXToken(userAgent); String url = QyWxConfig.sendMessage_url.replace("ACCESS_TOKEN", accessToken); // 4.调用接口,发送消息 @@ -1290,8 +1290,8 @@ public class QyWxOperationService { * @param msgid 待撤回消息的id * @return */ - public String withdrawQyWxMessage(String msgid) { - String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/message/recall?access_token=%s", QyWxConfig.token); + public String withdrawQyWxMessage(String msgid,String userAgent) { + String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/message/recall?access_token=%s", QyWxConfig.GetQYWXToken(userAgent)); Map param = new HashMap<>(); param.put("msgid", msgid); String jsonString = JSONObject.toJSONString(param); @@ -1314,8 +1314,8 @@ public class QyWxOperationService { * @param response_code * @return */ - public JSONObject updateTemplateCard(String response_code, String userName, String state) { - String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/message/update_template_card?access_token=" + QyWxConfig.token + "&debug=1"); + public JSONObject updateTemplateCard(String response_code, String userName, String state,String userAgent) { + String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/message/update_template_card?access_token=" + QyWxConfig.GetQYWXToken(userAgent) + "&debug=1"); Map map = new HashMap<>(); map.put("atall", 1); map.put("agentid", QyWxConfig.AgentId); diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java index 25fec8e4..9273064d 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/StockTakingServiceImpl.java @@ -275,7 +275,7 @@ public class StockTakingServiceImpl implements StockTakingService { */ @Transactional @Override - public Map review(Map map, UserByPort userToken) { + public Map review(Map map, UserByPort userToken,String userAgent) { Map result = new HashMap<>(); @@ -446,7 +446,7 @@ public class StockTakingServiceImpl implements StockTakingService { // 获取盘点人员 UserByPort originator = PageController.FindUserById(mainRecord.getOriginator(), userToken); String workwechat = originator.getWorkwechat(); - JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("PangFuZhen,", mainId,normalMinId); + JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("PangFuZhen,", mainId,normalMinId,userAgent); // JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(workwechat, mainId,normalMinId); // 将当前返回结果保存到redis中 if(jsonObject!=null) { @@ -483,7 +483,7 @@ public class StockTakingServiceImpl implements StockTakingService { UserByPort userByPort = PageController.FindUserById(originator, userToken); String key = "user:" + userByPort.getNumber() + ":QyWxStockTakingId:" + mainId; String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode"); - qyWxOperationService.updateTemplateCard(responseCode, userToken.getName(), finalStockTakingResult); + qyWxOperationService.updateTemplateCard(responseCode, userToken.getName(), finalStockTakingResult,userAgent); } }).start(); @@ -504,7 +504,7 @@ public class StockTakingServiceImpl implements StockTakingService { */ @Transactional @Override - public Map completeStockTaking(Map map, UserByPort userToken) { + public Map completeStockTaking(Map map, UserByPort userToken,String userAgent) { Map result = new HashMap<>(); @@ -691,7 +691,7 @@ public class StockTakingServiceImpl implements StockTakingService { public void run() { String s = QyWxUid.toString(); s= "PangFuZhen,"; - JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(s, map, userToken, finalMainRecord); + JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(s, map, userToken, finalMainRecord,userAgent); } }).start(); @@ -705,7 +705,7 @@ public class StockTakingServiceImpl implements StockTakingService { //获取申请人信息 String key = "user:" + userByPort.getNumber() + ":QyWxStockTakingCompleteId:" + mainId; String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode"); - qyWxOperationService.updateTemplateCard(responseCode, userToken.getName(), "处理"); + qyWxOperationService.updateTemplateCard(responseCode, userToken.getName(), "处理",userAgent); } }).start(); @@ -721,7 +721,7 @@ public class StockTakingServiceImpl implements StockTakingService { */ @Transactional @Override - public Integer completeStockTakingByQyWx(TemplateCard templateCard) { + public Integer completeStockTakingByQyWx(TemplateCard templateCard,String userAgent) { Map result = new HashMap<>(); @@ -916,7 +916,7 @@ public class StockTakingServiceImpl implements StockTakingService { } String s = QyWxUid.toString(); s= "PangFuZhen,"; - JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(s, map, null, finalMainRecord); + JSONObject jsonObject = qyWxOperationService.sendCcStockTakingMessageToHead(s, map, null, finalMainRecord,userAgent); } }).start(); @@ -931,7 +931,7 @@ public class StockTakingServiceImpl implements StockTakingService { */ @Transactional @Override - public Integer stockTakingTransfer(Map map, UserByPort userToken) { + public Integer stockTakingTransfer(Map map, UserByPort userToken,String userAgent) { List minIds = (List) map.get("minIds"); List minRecorIds = new ArrayList<>(); Integer res = 0; @@ -1119,7 +1119,7 @@ public class StockTakingServiceImpl implements StockTakingService { UserByPort userByPort = PageController.FindUserById(ObjectFormatUtil.toInteger(originator), userToken); // departMentHeadQyWxName.append(userByPort.getWorkwechat()+","); departMentHeadQyWxName.append("PangFuZhen,"); - JSONObject jsonObject = qyWxOperationService.sendCcStockTakingTransferMessageToHead(departMentHeadQyWxName.toString(), map, userToken, finalMainRecord); + JSONObject jsonObject = qyWxOperationService.sendCcStockTakingTransferMessageToHead(departMentHeadQyWxName.toString(), map, userToken, finalMainRecord,userAgent); } }).start(); @@ -1143,7 +1143,7 @@ public class StockTakingServiceImpl implements StockTakingService { */ @Transactional @Override - public Map reviewByQyWx(TemplateCard templateCard) { + public Map reviewByQyWx(TemplateCard templateCard,String userAgent) { Map result = new HashMap<>(); @@ -1317,7 +1317,7 @@ public class StockTakingServiceImpl implements StockTakingService { // 获取盘点人员 UserByPort originator = PageController.FindUserById(mainRecord.getOriginator(), null); // String workwechat = originator.getWorkwechat(); - JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("PangFuZhen,", mainId, normalMinIds); + JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage("PangFuZhen,", mainId, normalMinIds,userAgent); // JSONObject jsonObject = qyWxOperationService.sendQyWxToStockTakingMessage(workwechat, mainId, normalMinIds); if(jsonObject!=null){ // 将当前返回结果保存到redis中 @@ -1341,7 +1341,7 @@ public class StockTakingServiceImpl implements StockTakingService { // 获取盘点人员 UserByPort originator = PageController.FindUserById(mainRecord.getOriginator(), null); // String workwechat = originator.getWorkwechat(); - qyWxOperationService.sendStockTakingErrMessageToHead("PangFuZhen,", errIds, mainRecord,null); + qyWxOperationService.sendStockTakingErrMessageToHead("PangFuZhen,", errIds, mainRecord,null,userAgent); // qyWxOperationService.sendStockTakingErrMessageToHead(workwechat, errIds, mainRecord,null); } }).start(); diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index c3e3f530..14c6bc70 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -5,7 +5,8 @@ 仓库管理系统 - + @@ -23,7 +24,7 @@ - + @@ -49,7 +50,7 @@ @@ -122,11 +125,11 @@
  • @@ -142,14 +145,18 @@ - + + diff --git a/src/main/resources/templates/index_back.html b/src/main/resources/templates/index_back.html index 3d073665..7e8e19ba 100644 --- a/src/main/resources/templates/index_back.html +++ b/src/main/resources/templates/index_back.html @@ -134,8 +134,7 @@ layui.use(['jquery', 'layer', 'miniAdmin','miniTongji'], function () { var $ = layui.jquery, layer = layui.layer, - miniAdmin = layui.miniAdmin, - miniTongji = layui.miniTongji; + miniAdmin = layui.miniAdmin; var authority = $("#authority").text() let map = new Map(); map.set("roleId",authority) @@ -174,21 +173,12 @@ // console.log(result.json) options.iniUrl = result.json; } - }) + }); miniAdmin.render(options); - // 百度统计代码,只统计指定域名 - miniTongji.render({ - specific: true, - domains: [ - '99php.cn', - 'layuimini.99php.cn', - 'layuimini-onepage.99php.cn', - ], - }); $('.login-out').on("click", function () { layer.msg('退出登录成功', function () { diff --git a/src/main/resources/templates/pages/QyWxScanCode/QyWxScanBarCodeIn.html b/src/main/resources/templates/pages/QyWxScanCode/QyWxScanBarCodeIn.html new file mode 100644 index 00000000..58576112 --- /dev/null +++ b/src/main/resources/templates/pages/QyWxScanCode/QyWxScanBarCodeIn.html @@ -0,0 +1,128 @@ + + + + + + 企业微信扫码 + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/pages/application/application-in.html b/src/main/resources/templates/pages/application/application-in.html index ed82ada1..45e4113a 100644 --- a/src/main/resources/templates/pages/application/application-in.html +++ b/src/main/resources/templates/pages/application/application-in.html @@ -28,7 +28,8 @@ .layui-input-block { margin-left: 80px; } - .layui-form-select{ + + .layui-form-select { width: 100%; border-style: none; } @@ -58,7 +59,7 @@ style="border-style: none" id="openSonByMaterial" onblur="selectMaterialByName(this)" lay-verify="required"/> - - @@ -109,59 +111,66 @@
    - - - +
    + + + + +
    -
    - -
    +
    +
    + +
    -
    -
    + + - -
    -
    - -
    + +
    +
    +
    - -
    - -
    -
    -
    - -
    - 提交成功 -
    -
    - -
    + +
    + +
    +
    +
    + +
    + 提交成功 +
    +
    +
    +
    -
    -
    +
    + @@ -198,10 +207,12 @@ function scanBarCode(obj) { } - // 用于重新渲染该页面 - function Coverpage(num, obj) { + // 用于扫描入库位置 + function scanLocationByQrCode(obj) { + } + // 用于暂存卡片个数 var params = []; let scanValue = {}; @@ -254,7 +265,7 @@ errMsg += "物料编码: "; errMsg += err[i]["code"]; } - if(err.length>0) { + if (err.length > 0) { errMsg += "添加失败,请选择新仓库或库位"; layer.msg(errMsg, { icon: 5, @@ -262,7 +273,7 @@ }, function () { step.next('#stepForm'); }); - }else{ + } else { step.next('#stepForm'); } } @@ -336,7 +347,7 @@ @@ -358,14 +369,18 @@
    - + - + +
    @@ -448,7 +463,7 @@ materialId.value = ""; priceValue.value = ""; obj.value = ""; - $("#barCode"+idNumber).remove(); + $("#barCode" + idNumber).remove(); form.render(); } else { @@ -457,17 +472,17 @@ priceValue.value = d.price; // 获取物料与条形码的对应关系 var materialAndBarCodeList = d["materialAndBarCodeList"]; - if(materialAndBarCodeList.length > 0){ + if (materialAndBarCodeList.length > 0) { // 如果有对应的条形码 var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; var id = barCodeInput.id; - $("#"+id).remove(); - $("#barCode"+idNumber).empty(); - var barCode = $("#barCode"+idNumber); - if(barCode.length > 0) { + $("#" + id).remove(); + $("#barCode" + idNumber).empty(); + var barCode = $("#barCode" + idNumber); + if (barCode.length > 0) { barCode.empty(); - }else{ + } else { var barCodeSelect = ` `; @@ -476,7 +491,7 @@ form.render(); $.each(materialAndBarCodeList, function (index, item) { - $("#barCode"+idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 + $("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 }); form.render(); } @@ -484,7 +499,6 @@ } }); }; - // 用于实现点击搜索按钮 selectMaterial = function (obj) { var parent = obj.parentNode.parentNode.parentNode.parentNode; @@ -532,22 +546,22 @@ codeValue.value = code; priceValue.value = material.price; var materialAndBarCodeList = material["materialAndBarCodeList"]; - if(materialAndBarCodeList.length > 0){ + if (materialAndBarCodeList.length > 0) { // 如果有对应的条形码 var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; var id = barCodeInput.id; - $("#"+id).remove(); + $("#" + id).remove(); // barCodeInput.style = "display:none"; var idNumber = materialId.name.split("mid")[1]; var barCodeSelect = ` - `; - $("#"+barCodeImg.id).before(barCodeSelect); + $("#" + barCodeImg.id).before(barCodeSelect); form.render(); $.each(materialAndBarCodeList, function (index, item) { - $("#barCode"+idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 + $("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 }); form.render(); } @@ -557,7 +571,6 @@ } }); }; - //用于实现物料名称搜索 selectMaterialByName = function (obj) { // 输入code @@ -601,238 +614,142 @@ } }); }; - - - // 用于重新渲染该页面 - Coverpage = function (num, obj) { - var parent = $("#cardParent"); - // 获取待添加父类 - NewIdNumber = num; - if (num === 0) { // 如果是第一个 - NewIdNumber = ""; - } - var depositoryItem = ` -
    - -
    - - - - -
    -
    - `; - if (scanValue.depository !== undefined && scanValue.depository !== null && scanValue.depository !== "") { - let depository = scanValue.depository; - // 如果扫描了仓库 - depositoryItem = `
    - -
    - - - - -
    -
    `; - } - - if (scanValue.place !== undefined && scanValue.place !== null && scanValue.place !== "") { - // 如果扫描了库位 - let place = scanValue.place; - depositoryItem = `
    - -
    - - - - -
    -
    `; - - } - var firstItem = - // 前半部分 - `
    -
    - -
    - -
    -
    - - -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -
    - -
    -
    - - - -
    -
    -
    - -
    - -
    - -
    -
    -
    - -
    - -
    -
    `; - - - var lastItem = `
    - -
    - -
    -
    - -
    `; - // 获取当前高度 - var height = parseInt(($("#stepForm").css('height')).split("px")[0]); - if (NewIdNumber !== "") { - params.push(NewIdNumber) - } - $("#stepForm").css("height", height + 532 + 'px'); - var materialItem = firstItem + depositoryItem + lastItem; // 最终 - $("#btn_sub").prepend(materialItem) - }; // 用于扫码入库 - scanCodeInStorage = function () { - layer.open({ - type: 2, - title: '扫码', - skin: 'layui-layer-rim', - maxmin: true, - shadeClose: true, //点击遮罩关闭层 - area: ['100%', '100%'], - move: '.layui-layer-title', - fixed: false, - content: '/scanQrCodeIn', - end: function () { + scanCodeInStorage = function (obj) { + parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; $.ajax({ - url: "/material/application_in_scanQrCode", - type: "get", + url: "/material/qywxApplicationInScanQrCode", + type: "post", dataType: 'json', + data: JSON.stringify(req), contentType: "application/json;charset=utf-8", success: function (d) { var data = d.data; - var materialList = data["materialList"]; - var depository = data["depository"]; - var place = data["place"]; - if (depository !== undefined && depository !== null && depository !== "") { - // 如果扫描到仓库 - scanValue.depository = depository; - } - if (place !== undefined && place !== null && place !== "") { - // 如果扫描到库位 - scanValue.place = place; + + var parent = obj.parentNode.parentNode.parentNode.parentNode; + var codeChildren = parent.childNodes[7]; + var priceChildren = parent.childNodes[11]; + var materialChildren = parent.childNodes[5]; + // 条形码 + var barCodeChildren = parent.childNodes[9]; + var codeItem = codeChildren.childNodes[3].childNodes[1]; + var codeValue = codeItem.childNodes[1]; + var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes; + var materialName = materialItem[1]; + var materialId = materialName.parentNode.parentNode.childNodes[3]; + var mname = materialName.value; + // 单价条目 + var priceItem = priceChildren.childNodes[3].childNodes; + var priceValue = priceItem[1]; + // 条形码条码 + var barCodeItem = barCodeChildren.childNodes[3]; + var code = data.code; + if (code === undefined) { + code = ""; } - if (materialList.length > 0) { - for (let i = 1; i <= materialList.length; i++) { - materialList[i-1].mid = materialList[i-1].id; - Coverpage(i, materialList[i - 1]); - var materialbyBarCodeList = materialList[i-1]["materialAndBarCodeList"]; - $.each(materialbyBarCodeList, function (index, item) { - $("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 - }); + materialName.value = data.mname; + materialId.value = data.id; + codeValue.value = code; + priceValue.value = data.price; + var materialAndBarCodeList = data["materialAndBarCodeList"]; + var idNumber = materialId.name.split("mid")[1]; + if (materialAndBarCodeList.length > 0) { + // 如果有对应的条形码 + var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; + var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; + var id = barCodeInput.id; + $("#" + id).remove(); + $("#barCode" + idNumber).empty(); + var barCode = $("#barCode" + idNumber); + if (barCode.length > 0) { + barCode.empty(); + } else { + var barCodeSelect = ` + `; + $("#" + barCodeImg.id).before(barCodeSelect); } form.render(); - } else { - var material = {}; - material.mname = ''; - material.mid = ''; - material.code = ''; - Coverpage(0, material); + $.each(materialAndBarCodeList, function (index, item) { + $("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 + }); + form.render(); } } }) } }) }; - + // 用于扫描二维码 scanBarCode = function (obj) { - layer.open({ - type: 2, - title: '扫码', - skin: 'layui-layer-rim', - maxmin: true, - shadeClose: true, //点击遮罩关闭层 - area: ['100%', '100%'], - move: '.layui-layer-title', - fixed: false, - content: '/scanBarCodeIn', - end: function () { + parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["barCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; $.ajax({ - url: "/material/application_in_scanBarCode", - type: "get", + url: "/material/qywxApplicationInScanBarCode", + type: "post", dataType: 'json', + data: JSON.stringify(req), contentType: "application/json;charset=utf-8", success: function (d) { var data = d.data; - var materialList = data["materialList"]; - var depository = data["depository"]; - var place = data["place"]; - if (depository !== undefined && depository !== null && depository !== "") { - // 如果扫描到仓库 - scanValue.depository = depository; - } - if (place !== undefined && place !== null && place !== "") { - // 如果扫描到库位 - scanValue.place = place; - } - if (materialList.length > 0) { - for (let i = 1; i <= materialList.length; i++) { - materialList[i-1].code = materialList[i-1].mcode; - Coverpage(i, materialList[i - 1]); - $.each(materialList, function (index, item) { - $("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 - }); - } - form.render(); + var material = data["material"]; + var parent = obj.parentNode.parentNode.parentNode.parentNode; + var codeChildren = parent.childNodes[7]; + var priceChildren = parent.childNodes[11]; + var materialChildren = parent.childNodes[5]; + // 条形码 + var barCodeChildren = parent.childNodes[9]; + var codeItem = codeChildren.childNodes[3].childNodes[1]; + var codeValue = codeItem.childNodes[1]; + var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes; + var materialName = materialItem[1]; + var materialId = materialName.parentNode.parentNode.childNodes[3]; + var mname = materialName.value; + // 单价条目 + var priceItem = priceChildren.childNodes[3].childNodes; + var priceValue = priceItem[1]; + // 条形码条码 + + var barCodeItem = barCodeChildren.childNodes[3]; + var code = material.mcode; + if (code === undefined) { + code = ""; } + materialName.value = material.mname; + materialId.value = material.mid; + codeValue.value = code; + priceValue.value = material.price; + var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; + barCodeInput.value = result; + form.render(); } }) + + }, + error: function (res) { + if (res.errMsg.indexOf('function_not_exist') > 0) { + alert('版本过低请升级') + } + alert(res) + } - }) + }); }; // 用于打开仓库树形菜单 openDepositoryTree = function (obj) { @@ -849,8 +766,55 @@ fixed: false, content: '/selectDepositoryByCard?type=1&clickObj=' + parentId, }); - } + }; + + // 用于扫描入库位置 + scanLocationByQrCode = function (obj) { + parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; + $.ajax({ + url: "/place/qywxApplicationInScanQrCode", + type: "post", + dataType: 'json', + data: JSON.stringify(req), + contentType: "application/json;charset=utf-8", + success: function (d) { + var data = d.data; + var flag = data["flag"]; + var parent = obj.parentNode; + var depositoryName = parent.childNodes[1]; + var depositoryId = parent.childNodes[3]; + var placeId = parent.childNodes[5]; + if(flag === 0){ + // 如果没有获取到位置 + layer.msg("当前二维码错误,请重新扫描"); + }else if(flag === 1){ + // 如果获取到的是库位 + var place = data["place"]; + placeId.value = place.id; + depositoryId.value = place.did; + depositoryName.value = place.depositoryName; + + }else if(flag === 2){ + // 如果获取到的是仓库 + var depository = data["depository"]; + placeId.value = "0"; + depositoryId.value = depository.id; + depositoryName.value = depository.dname; + } + } + }) + } + }) + } }) diff --git a/src/main/resources/templates/pages/application/application-in_scanQrCode.html b/src/main/resources/templates/pages/application/application-in_scanQrCode.html index d7d99d42..0676583b 100644 --- a/src/main/resources/templates/pages/application/application-in_scanQrCode.html +++ b/src/main/resources/templates/pages/application/application-in_scanQrCode.html @@ -99,6 +99,18 @@ function selectMaterial(obj) { } + // 用于扫码入库 + function scanCodeInStorage(obj) { + } + + // 用于扫描条形码 + function scanBarCode(obj) { + } + + // 用于扫描入库位置 + function scanLocationByQrCode(obj) { + + } // 用于物料名称查询 function selectMaterialByName(obj) { } @@ -173,6 +185,7 @@
    +
    @@ -180,7 +193,11 @@ style="display: none" lay-verify="required"/> + +
    `; @@ -190,6 +207,7 @@ depositoryItem = `
    +
    @@ -197,7 +215,10 @@ style="display: none" lay-verify="required"/> - + +
    `; } @@ -208,6 +229,7 @@ depositoryItem = `
    +
    @@ -215,7 +237,10 @@ style="display: none" lay-verify="required"/> - + +
    `; @@ -240,15 +265,18 @@
    +
    + +
    -
    @@ -379,6 +407,7 @@ var depositoryItem = `
    +
    @@ -386,7 +415,11 @@ style="display: none" lay-verify="required"/> + +
    `; @@ -396,6 +429,7 @@ depositoryItem = `
    +
    @@ -403,7 +437,11 @@ style="display: none" lay-verify="required"/> + +
    `; } @@ -414,6 +452,7 @@ depositoryItem = `
    +
    @@ -421,7 +460,11 @@ style="display: none" lay-verify="required"/> + +
    `; @@ -446,8 +489,12 @@
    +
    + +
    @@ -490,7 +537,7 @@ // 获取当前高度 var height = parseInt(($("#stepForm").css('height')).split("px")[0]); params.push(NewIdNumber) - $("#stepForm").css("height", height + 530 + 'px'); + $("#stepForm").css("height", height + 535 + 'px'); var materialItem = firstItem + depositoryItem + lastItem; $("#" + parentId).after(materialItem); }; @@ -504,7 +551,7 @@ // 获取祖父节点 var reparent = parent.parentNode; var height = parseInt(($("#stepForm").css('height')).split("px")[0]); - $("#stepForm").css("height", height - 530 + 'px'); + $("#stepForm").css("height", height - 535 + 'px'); params = remove(params, parentId); reparent.removeChild(parent); }; @@ -683,50 +730,66 @@ }; scanBarCode = function (obj) { - layer.open({ - type: 2, - title: '扫码', - skin: 'layui-layer-rim', - maxmin: true, - shadeClose: true, //点击遮罩关闭层 - area: ['100%', '100%'], - move: '.layui-layer-title', - fixed: false, - content: '/scanBarCodeIn', - end: function () { + parent.parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["barCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; $.ajax({ - url: "/material/application_in_scanBarCode", - type: "get", + url: "/material/qywxApplicationInScanBarCode", + type: "post", dataType: 'json', + data: JSON.stringify(req), contentType: "application/json;charset=utf-8", success: function (d) { var data = d.data; - var materialList = data["materialList"]; - var depository = data["depository"]; - var place = data["place"]; - if (depository !== undefined && depository !== null && depository !== "") { - // 如果扫描到仓库 - scanValue.depository = depository; - } - if (place !== undefined && place !== null && place !== "") { - // 如果扫描到库位 - scanValue.place = place; - } - if (materialList.length > 0) { - for (let i = 1; i <= materialList.length; i++) { - materialList[i-1].code = materialList[i-1].mcode; - Coverpage(i, materialList[i - 1]); - $.each(materialList, function (index, item) { - $("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 - }); - } - form.render(); + var material = data["material"]; + var parent = obj.parentNode.parentNode.parentNode.parentNode; + var codeChildren = parent.childNodes[7]; + var priceChildren = parent.childNodes[11]; + var materialChildren = parent.childNodes[5]; + // 条形码 + var barCodeChildren = parent.childNodes[9]; + var codeItem = codeChildren.childNodes[3].childNodes[1]; + var codeValue = codeItem.childNodes[1]; + var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes; + var materialName = materialItem[1]; + var materialId = materialName.parentNode.parentNode.childNodes[3]; + var mname = materialName.value; + // 单价条目 + var priceItem = priceChildren.childNodes[3].childNodes; + var priceValue = priceItem[1]; + // 条形码条码 + + var barCodeItem = barCodeChildren.childNodes[3]; + var code = material.mcode; + if (code === undefined) { + code = ""; } + materialName.value = material.mname; + materialId.value = material.mid; + codeValue.value = code; + priceValue.value = material.price; + var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; + barCodeInput.value = result; + form.render(); } }) + + }, + error: function (res) { + if (res.errMsg.indexOf('function_not_exist') > 0) { + alert('版本过低请升级') + } + alert(res) + } - }) - }; + }); + } // 用于打开仓库树形菜单 openDepositoryTree = function (obj) { @@ -744,6 +807,129 @@ content: '/selectDepositoryByCard?type=1&clickObj=' + parentId, }); } + + // 用于扫码入库 + scanCodeInStorage = function (obj) { + parent.parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; + $.ajax({ + url: "/material/qywxApplicationInScanQrCode", + type: "post", + dataType: 'json', + data: JSON.stringify(req), + contentType: "application/json;charset=utf-8", + success: function (d) { + var data = d.data; + + var parent = obj.parentNode.parentNode.parentNode.parentNode; + var codeChildren = parent.childNodes[7]; + var priceChildren = parent.childNodes[11]; + var materialChildren = parent.childNodes[5]; + // 条形码 + var barCodeChildren = parent.childNodes[9]; + var codeItem = codeChildren.childNodes[3].childNodes[1]; + var codeValue = codeItem.childNodes[1]; + var materialItem = materialChildren.childNodes[3].childNodes[1].childNodes; + var materialName = materialItem[1]; + var materialId = materialName.parentNode.parentNode.childNodes[3]; + var mname = materialName.value; + // 单价条目 + var priceItem = priceChildren.childNodes[3].childNodes; + var priceValue = priceItem[1]; + // 条形码条码 + var barCodeItem = barCodeChildren.childNodes[3]; + var code = data.code; + if (code === undefined) { + code = ""; + } + materialName.value = data.mname; + materialId.value = data.id; + codeValue.value = code; + priceValue.value = data.price; + var materialAndBarCodeList = data["materialAndBarCodeList"]; + var idNumber = materialId.name.split("mid")[1]; + if (materialAndBarCodeList.length > 0) { + // 如果有对应的条形码 + var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; + var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; + var id = barCodeInput.id; + $("#" + id).remove(); + $("#barCode" + idNumber).empty(); + var barCode = $("#barCode" + idNumber); + if (barCode.length > 0) { + barCode.empty(); + } else { + var barCodeSelect = ` + `; + $("#" + barCodeImg.id).before(barCodeSelect); + } + form.render(); + + $.each(materialAndBarCodeList, function (index, item) { + $("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 + }); + form.render(); + } + } + }) + } + }) + }; + + // 用于扫描入库位置 + scanLocationByQrCode = function (obj) { + parent.parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; + $.ajax({ + url: "/place/qywxApplicationInScanQrCode", + type: "post", + dataType: 'json', + data: JSON.stringify(req), + contentType: "application/json;charset=utf-8", + success: function (d) { + var data = d.data; + var flag = data["flag"]; + var parent = obj.parentNode; + var depositoryName = parent.childNodes[1]; + var depositoryId = parent.childNodes[3]; + var placeId = parent.childNodes[5]; + if(flag === 0){ + // 如果没有获取到位置 + layer.msg("当前二维码错误,请重新扫描"); + }else if(flag === 1){ + // 如果获取到的是库位 + var place = data["place"]; + placeId.value = place.id; + depositoryId.value = place.did; + depositoryName.value = place.depositoryName; + + }else if(flag === 2){ + // 如果获取到的是仓库 + var depository = data["depository"]; + placeId.value = "0"; + depositoryId.value = depository.id; + depositoryName.value = depository.dname; + } + } + }) + } + }) + } }) diff --git a/src/main/resources/templates/pages/application/application-out.html b/src/main/resources/templates/pages/application/application-out.html index 4c5ba740..4fc394b1 100644 --- a/src/main/resources/templates/pages/application/application-out.html +++ b/src/main/resources/templates/pages/application/application-out.html @@ -555,45 +555,53 @@ }; scanBarCode = function (obj) { - layer.open({ - type: 2, - title: '扫码', - skin: 'layui-layer-rim', - maxmin: true, - shadeClose: true, //点击遮罩关闭层 - area: ['100%', '100%'], - move: '.layui-layer-title', - fixed: false, - content: '/scanBarCodeOut', - end: function () { + parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["barCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function(res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; $.ajax({ - url: "/material/application_out_scanBarCode", - type: "get", + url: "/material/qywxApplicationOutScanBarCode", + type: "post", dataType: 'json', + data: JSON.stringify(req), contentType: "application/json;charset=utf-8", success: function (d) { + + // 获取对应元素 + var parent = obj.parentNode.parentNode.parentNode.parentNode; + + var MaterialChildren = parent.childNodes[5]; + var materialItem = MaterialChildren.childNodes[3].childNodes[1].childNodes; + + var barCodeChildren = parent.childNodes[9]; + + var materialName = materialItem[1]; + var materialId = materialName.parentNode.parentNode.childNodes[3]; + // 条形码条码 + var barCodeItem = barCodeChildren.childNodes[3]; + // 物料编码 + var materialCodeItem = parent.childNodes[7].childNodes[3]; + + var materialCode = materialCodeItem.childNodes[1]; + var data = d.data; - var materialList = data["materialList"]; - var depository = data["depository"]; - var place = data["place"]; - if (depository !== undefined && depository !== null && depository !== "") { - // 如果扫描到仓库 - scanValue.depository = depository; - } - if (place !== undefined && place !== null && place !== "") { - // 如果扫描到库位 - scanValue.place = place; - } - if (materialList.length > 0) { - for (let i = 1; i <= materialList.length; i++) { - materialList[i-1].code = materialList[i-1].mcode; - Coverpage(i, materialList[i - 1]); - $.each(materialList, function (index, item) { - $("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 - }); - } - form.render(); + + if (data !== null) { + + materialName.value = data.mname; + materialId.value = data.mid; + materialCode.value = data.mcode; + var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; + barCodeInput.value = result; + + } + } }) } diff --git a/src/main/resources/templates/pages/application/application-transfer.html b/src/main/resources/templates/pages/application/application-transfer.html index f9d49e0d..9a3181e2 100644 --- a/src/main/resources/templates/pages/application/application-transfer.html +++ b/src/main/resources/templates/pages/application/application-transfer.html @@ -95,13 +95,18 @@
    - + + +
    @@ -173,8 +178,10 @@ function scanBarCode() { } - // 用于重新渲染该页面 - function Coverpage(num, obj) { + + // 用于扫描位置 + function scanLocationByQrCode() { + } // 用于暂存卡片个数 var params = []; @@ -309,7 +316,7 @@
    -
    @@ -331,13 +338,18 @@
    - + + +
    @@ -356,141 +368,6 @@ $("#"+parentId).after(materialItem); }; - // 实现卡片重新渲染 - Coverpage = function (num, obj) { - console.log(obj) - var parent = $("#cardParent"); - // 获取待添加父类 - NewIdNumber = num; - if (num === 0) { // 如果是第一个 - NewIdNumber = ""; - } - var depositoryItem = ` -
    - -
    - - - - -
    -
    - - `; - if (scanValue.depository !== undefined && scanValue.depository !== null && scanValue.depository !== "") { - let depository = scanValue.depository; - // 如果扫描了仓库 - depositoryItem = `
    - -
    - - - - -
    -
    `; - } - if (scanValue.place !== undefined && scanValue.place !== null && scanValue.place !== "") { - // 如果扫描了库位 - let place = scanValue.place; - depositoryItem = `
    - -
    - - - - -
    -
    `; - - } - - - - - var firstItem = - // 前半部分 - `
    -
    - -
    - -
    -
    - - -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -
    - -
    -
    - - - -
    -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    `; - - - var lastItem = `
    - -
    - -
    -
    - -
    `; - // 获取当前高度 - var height = parseInt(($("#stepForm").css('height')).split("px")[0]); - if (NewIdNumber !== "") { - params.push(NewIdNumber) - } - $("#stepForm").css("height", height + 532 + 'px'); - var materialItem = firstItem + depositoryItem + lastItem; // 最终 - - $("#btn_sub").before(materialItem) - }; // 实现卡片删除 deleteItem = function (obj) { @@ -508,52 +385,61 @@ // 用于实现扫描条形码 scanBarCode = function (obj) { - layer.open({ - type: 2, - title: '扫码', - skin: 'layui-layer-rim', - maxmin: true, - shadeClose: true, //点击遮罩关闭层 - area: ['100%', '100%'], - move: '.layui-layer-title', - fixed: false, - content: '/scanBarCodeIn', - end: function () { + + parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; $.ajax({ - url: "/material/application_transfer_scanBarCode", - type: "get", + url: "/material/qywxApplicationTransferScanBarCode", + type: "post", dataType: 'json', + data: JSON.stringify(req), contentType: "application/json;charset=utf-8", success: function (d) { + + // 获取对应元素 + + var parent = obj.parentNode.parentNode.parentNode.parentNode; + var barCodeChildren = parent.childNodes[9]; + var children = parent.childNodes[5]; + var materialItem = children.childNodes[3].childNodes[1]; + var materialName = materialItem.childNodes[1]; + var materialId = materialName.parentNode.parentNode.childNodes[3]; + // 条形码条码 + var barCodeItem = barCodeChildren.childNodes[3]; + + // 物料编码 + var materialCodeItem = parent.childNodes[7].childNodes[3].childNodes[1]; + + var materialCode = materialCodeItem.childNodes[1]; + var data = d.data; - console.log(data) - var materialList = data["materialList"]; - var depository = data["depository"]; - var place = data["place"]; - if (depository !== undefined && depository !== null && depository !== "") { - // 如果扫描到仓库 - scanValue.depository = depository; - } - if (place !== undefined && place !== null && place !== "") { - // 如果扫描到库位 - scanValue.place = place; - } - if (materialList.length > 0) { - for (let i = 1; i <= materialList.length; i++) { - materialList[i-1].code = materialList[i-1].mcode; - var placePList = materialList[i-1]["placePList"]; - Coverpage(i, materialList[i - 1]); - $.each(materialList, function (index, item) { - $("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 - }); - $.each(placePList, function (index, item) { - $("#place"+i).append(new Option(item.depositoryName +"-" +item.code, item.id));//往下拉菜单里添加元素 - }); - } + if(data!==null) { + + materialName.value = data.mname; + materialId.value = data.mid; + materialCode.value = data.mcode; + var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; + barCodeInput.value = result; + + var codeId = obj.id.split("barCodeImg")[1]; + + $('#place' + codeId).empty(); + $.each(data.placePList, function (index, item) { + $('#place' + codeId).append(new Option(item.depositoryName + "-" + item.code, item.id));//往下拉菜单里添加元素 + }); form.render(); } + } - }) + }); + } }) }; @@ -572,64 +458,81 @@ } // 用于扫码功能 - scanCodeByTransfer = function () { - layer.open({ - type: 2, - title: '扫码', - skin: 'layui-layer-rim', - maxmin: true, - shadeClose: true, //点击遮罩关闭层 - area: ['100%', '100%'], - move: '.layui-layer-title', - fixed: false, - content: '/scanQrCodeTransfer', - end: function () { + scanCodeByTransfer = function (obj) { + parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; $.ajax({ - url: "/material/application_in_scanQrCode", - type: "get", + url: "/material/qywxApplicationTransferScanQrCode", + type: "post", dataType: 'json', + data: JSON.stringify(req), contentType: "application/json;charset=utf-8", success: function (d) { var data = d.data; - var materialList = data["materialList"]; - var depository = data["depository"]; - var place = data["place"]; - if (depository !== undefined && depository !== null && depository !== "") { - // 如果扫描到仓库 - scanValue.depository = depository; + // 获取对应元素 + var parent = obj.parentNode.parentNode.parentNode.parentNode; + var barCodeChildren = parent.childNodes[9]; + var children = parent.childNodes[5]; + var materialItem = children.childNodes[3].childNodes[1]; + var materialName = materialItem.childNodes[1]; + var materialId = materialName.parentNode.parentNode.childNodes[3]; + // 条形码条码 + var barCodeItem = barCodeChildren.childNodes[3]; + // 物料编码 + var materialCodeItem = parent.childNodes[7].childNodes[3].childNodes[1]; + + var materialCode = materialCodeItem.childNodes[1]; + var idNumber = materialId.name.split("mid")[1]; + // 获取物料与条形码的对应关系 + var materialAndBarCodeList = data["materialAndBarCodeList"]; + var barCode = $("#barCode" + idNumber); + if (barCode.length > 0) { + barCode.empty(); } - if (place !== undefined && place !== null && place !== "") { - // 如果扫描到库位 - scanValue.place = place; - } - if (materialList.length > 0) { - for (let i = 1; i <= materialList.length; i++) { - Coverpage(i, materialList[i - 1]); - var materialbyBarCodeList = materialList[i-1]["materialAndBarCodeList"]; - $.each(materialbyBarCodeList, function (index, item) { - $("#barCode"+i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 - }); - var placePList = materialList[i - 1]["placePList"]; - $.each(placePList, function (index, item) { - $("#place"+i).append(new Option(item.depositoryName + "-" + item.code, item.id));//往下拉菜单里添加元素 - }); + if (materialAndBarCodeList.length > 0) { + // 如果有对应的条形码 + var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; + var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; + var id = barCodeInput.id; + $("#" + id).remove(); + $("#barCode" + idNumber).empty(); + var barCode = $("#barCode" + idNumber); + if (barCode.length > 0) { + barCode.empty(); + } else { + var barCodeSelect = ` + `; + $("#" + barCodeImg.id).before(barCodeSelect); } form.render(); - } else { - var material = {}; - material.mname = ''; - material.mid = ''; - material.code = ''; - Coverpage(0, material); + $.each(materialAndBarCodeList, function (index, item) { + $("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 + }); + form.render(); } + $('#place' + idNumber).empty(); + $.each(data.placePList, function (index, item) { + $('#place' + idNumber).append(new Option(item.depositoryName + "-" + item.code, item.id));//往下拉菜单里添加元素 + }); + form.render(); + materialName.value = data.mname; + materialId.value = data.id; + materialCode.value = data.code; } }) } }) }; - // 用于实现通过编码查询物料 selectCode = function(obj){ // 输入code @@ -669,26 +572,38 @@ data:JSON.stringify(req), contentType: "application/json;charset=utf-8", success:function (res) { + var idNumber = materialId.name.split("mid")[1]; // 获取物料与条形码的对应关系 var materialAndBarCodeList = d["materialAndBarCodeList"]; - if(materialAndBarCodeList.length > 0){ + var barCode = $("#barCode" + idNumber); + if (barCode.length > 0) { + barCode.empty(); + } + if (materialAndBarCodeList.length > 0) { // 如果有对应的条形码 var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; var id = barCodeInput.id; - $("#"+id).remove(); - var idNumber = materialId.name.split("mid")[1]; - var barCodeSelect = ` - `; - $("#"+barCodeImg.id).before(barCodeSelect); + $("#" + barCodeImg.id).before(barCodeSelect); + } + form.render(); + $.each(materialAndBarCodeList, function (index, item) { - $("#barCode"+idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 + $("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 }); + form.render(); } - $('#place'+codeId).empty(); + $('#place' + codeId).empty(); $.each(res.data, function (index, item) { - $('#place'+codeId).append(new Option(item.depositoryName+"-"+item.code, item.id));//往下拉菜单里添加元素 + $('#place' + codeId).append(new Option(item.depositoryName + "-" + item.code, item.id));//往下拉菜单里添加元素 }); form.render(); materialName.value = d.mname; @@ -809,6 +724,52 @@ content: '/selectDepositoryByCard?type=1&clickObj='+parentId, }); } + // 用于扫描入库位置 + scanLocationByQrCode = function (obj) { + parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; + $.ajax({ + url: "/place/qywxApplicationInScanQrCode", + type: "post", + dataType: 'json', + data: JSON.stringify(req), + contentType: "application/json;charset=utf-8", + success: function (d) { + var data = d.data; + var flag = data["flag"]; + var parent = obj.parentNode; + var depositoryName = parent.childNodes[1]; + var depositoryId = parent.childNodes[3]; + var placeId = parent.childNodes[5]; + if(flag === 0){ + // 如果没有获取到位置 + layer.msg("当前二维码错误,请重新扫描"); + }else if(flag === 1){ + // 如果获取到的是库位 + var place = data["place"]; + placeId.value = place.id; + depositoryId.value = place.did; + depositoryName.value = place.depositoryName; + + }else if(flag === 2){ + // 如果获取到的是仓库 + var depository = data["depository"]; + placeId.value = 0; + depositoryId.value = depository.id; + depositoryName.value = depository.dname; + } + } + }) + } + }) + } }) diff --git a/src/main/resources/templates/pages/material/material-add.html b/src/main/resources/templates/pages/material/material-add.html index bf8914ed..4cd5d5de 100644 --- a/src/main/resources/templates/pages/material/material-add.html +++ b/src/main/resources/templates/pages/material/material-add.html @@ -55,7 +55,7 @@
    + name="version"/>
    @@ -72,14 +72,14 @@
    + name="texture" />
    + name="unit" />
    @@ -147,17 +147,13 @@ }; scanBarCode = function(){ - layer.open({ - type: 2, - title: '扫码', - skin: 'layui-layer-rim', - maxmin: true, - shadeClose: true, //点击遮罩关闭层 - area: ['100%', '100%'], - move: '.layui-layer-title', - fixed: false, - content: '/scanBarCode', - end: function () { + parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["barCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + var result = res.resultStr;//当needResult为1时返回处理结果 + $("#barcode").val(result) } }) }; diff --git a/src/main/resources/templates/pages/material/material-view.html b/src/main/resources/templates/pages/material/material-view.html index 187bb0f7..a4184d30 100644 --- a/src/main/resources/templates/pages/material/material-view.html +++ b/src/main/resources/templates/pages/material/material-view.html @@ -93,7 +93,8 @@
    - + +
    @@ -120,6 +121,12 @@ diff --git a/src/main/resources/templates/pages/scanQrCode/ScanBarCode.html b/src/main/resources/templates/pages/scanQrCode/ScanBarCode.html index 8e3fcb9a..0cfc7705 100644 --- a/src/main/resources/templates/pages/scanQrCode/ScanBarCode.html +++ b/src/main/resources/templates/pages/scanQrCode/ScanBarCode.html @@ -58,7 +58,7 @@ // 停止失败,处理它。 }); }; - const config = { fps: 10, qrbox: { width: 250, height: 250 } }; + const config = { fps: 10, aspectRatio: 2 }; // Select back camera or fail with `OverconstrainedError`. html5QrCode.start({ facingMode: { exact: "environment"} }, config, qrCodeSuccessCallback); diff --git a/src/main/resources/templates/pages/scanQrCode/ScanBarCodeByNew.html b/src/main/resources/templates/pages/scanQrCode/ScanBarCodeByNew.html index 2c54ba4b..4b7fe93b 100644 --- a/src/main/resources/templates/pages/scanQrCode/ScanBarCodeByNew.html +++ b/src/main/resources/templates/pages/scanQrCode/ScanBarCodeByNew.html @@ -74,7 +74,7 @@ // 停止失败,处理它。 }); }; - const config = {fps: 10, qrbox: {width: 250, height: 250}}; + const config = {fps: 10, aspectRatio: 2 }; // Select back camera or fail with `OverconstrainedError`. html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); diff --git a/src/main/resources/templates/pages/scanQrCode/ScanBarCodeForTaking.html b/src/main/resources/templates/pages/scanQrCode/ScanBarCodeForTaking.html index ab45084b..01ff4eec 100644 --- a/src/main/resources/templates/pages/scanQrCode/ScanBarCodeForTaking.html +++ b/src/main/resources/templates/pages/scanQrCode/ScanBarCodeForTaking.html @@ -123,7 +123,7 @@ // 停止失败,处理它。 }); }; - const config = { fps: 10, qrbox: { width: 250, height: 250 } }; + const config = { fps: 10, aspectRatio: 2 }; // Select back camera or fail with `OverconstrainedError`. html5QrCode.start({ facingMode: { exact: "environment"} }, config, qrCodeSuccessCallback); diff --git a/src/main/resources/templates/pages/scanQrCode/ScanBarCodeIn.html b/src/main/resources/templates/pages/scanQrCode/ScanBarCodeIn.html deleted file mode 100644 index 024f179e..00000000 --- a/src/main/resources/templates/pages/scanQrCode/ScanBarCodeIn.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - 扫码 - - - - - - - - - - - - - -
    - -
    - - - - \ No newline at end of file diff --git a/src/main/resources/templates/pages/scanQrCode/ScanBarCodeOut.html b/src/main/resources/templates/pages/scanQrCode/ScanBarCodeOut.html index c613735f..fbd16129 100644 --- a/src/main/resources/templates/pages/scanQrCode/ScanBarCodeOut.html +++ b/src/main/resources/templates/pages/scanQrCode/ScanBarCodeOut.html @@ -115,7 +115,7 @@ // 停止失败,处理它。 }); }; - const config = { fps: 10, qrbox: { width: 250, height: 250 } }; + const config = { fps: 10, aspectRatio: 2 }; // Select back camera or fail with `OverconstrainedError`. html5QrCode.start({ facingMode: { exact: "environment"} }, config, qrCodeSuccessCallback); diff --git a/src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html b/src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html index 23568c52..4291f9ba 100644 --- a/src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html +++ b/src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html @@ -43,247 +43,30 @@ var depository = null; var place = null; var material = null; - const html5QrCode = new Html5Qrcode("reader"); - const qrCodeSuccessCallback = (decodedText, decodedResult) => { - /* 扫描成功 */ - // 获取当前扫码的类型 - var formatName = decodedResult.result.format.formatName; - html5QrCode.stop().then((ignore) => { - // 暂停扫描 - // 判断当前扫描的二维码是条码还是二维码 - if (formatName.includes("QR_CODE")||formatName.includes("AZTEC")) { - // 如果是二维码 - let params = {}; // 用于暂存扫描结果 - let jmResult = {}; - jmResult.result = decodedText; - // 解密当前二维码 - layui.$.ajax({ - url: "/material/decode3Des", - type: 'post', - dataType: 'json', - contentType: "application/json;charset=utf-8", - data: JSON.stringify(jmResult), - success: function (d) { - let parse = JSON.parse(d.data); - console.log(parse); - if (parse.did !== undefined) { - //如果扫描的为仓库 - depository = parse;// 将扫描结果保存到vue中 - if (material == null) { - // 如果还没有扫描物料 - layer.confirm("请扫描物料", { - btn: ["扫描", "取消"] - }, function () { // 继续 - html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描 - layer.close(layer.index); // 关闭弹窗 - }, function () { // 取消 - // 关闭当前页 - var index = parent.layer.getFrameIndex(window.name); - parent.layer.close(index); - }) - } else { - // 如果已经扫描物料 - if (depositoryId !== parse.did && Number(depositoryId) !== parse.did && depositoryId !== parse.did.toString()) { - // 如果当前仓库不是订单对应仓库 - depository = null; - place = null; - layer.msg("出库仓库不正确,请重新扫描"); - html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描 - } else { - // 如果正确 - var req = {}; - req.id = id; - isOutTrue(req); - } - } - } else if (parse.pid !== undefined) { - // 如果扫描的为库位 - place = parse;// 将扫描结果保存到vue中 - if ( material == null) { - // 如果还没有扫描物料 - layer.confirm("请扫描物料", { - btn: ["扫描", "取消"] - }, function () { // 继续 - html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描 - layer.close(layer.index); // 关闭弹窗 - }, function () { // 取消 - // 关闭当前页 - var index = parent.layer.getFrameIndex(window.name); - parent.layer.close(index); - }) - } else { - if (depositoryId !== parse.depositoryId && Number(depositoryId) !== parse.depositoryId && depositoryId !== parse.depositoryId.toString()) { - // 如果当前仓库不是订单对应仓库 - depository = null; - place = null; - layer.msg("出库库位所在仓库不正确,请重新扫描"); - html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描 - } else if (parse.mcodeList.indexOf(mcode) === -1) { - // 如果当前库位不存在该物料 - depository = null; - place = null; - layer.msg("出库库位不含该物料,请重新扫描"); - html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描 - } else { - var req = {}; - req.placeId = place.pid; - req.id = id; - isOutTrue(req); - } + layui.$(function () { + parent.parent.parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["barCode","qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; + outboundLogic(req); + + }, + error: function(res) { + if (res.errMsg.indexOf('function_not_exist') > 0) { + alert('版本过低请升级') + } - } - } else if (parse.mid !== undefined) { - // 如果扫描的为物料 - material = parse;// 将扫描结果保存到vue中 - if (mcode !== material.code && Number(mcode) !== material.code && mcode !== material.code.toString()) { - material = null; - layer.msg("出库物料不正确,请重新扫描"); - html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描 - } else { - if (depository !== null) { // 如果已经扫描仓库 - if (depositoryId !== depository.did && Number(depositoryId) !== depository.did && depositoryId !== depository.did.toString()) { - // 如果扫描的仓库不是订单要求的仓库 - layer.confirm("当前仓库不符合要求,请移步至正确仓库", { - btn: ["确定"] - }, function () { - // 关闭当前页 - var index = parent.layer.getFrameIndex(window.name); - parent.layer.close(index); - }) - } else { - // 如果是出库位置为默认库位 - var req = {}; - req.id = id; - // 弹出确定框 - isOutTrue(req); - } - } else if ( place != null) { - // 如果已经扫描库位 - if (depositoryId !== place.depositoryId && Number(depositoryId) !== place.depositoryId && depositoryId !== place.depositoryId.toString()) { - // 如果当前仓库不是订单对应仓库 - depository = null; - place = null; - layer.msg("出库库位所在仓库不正确,请重新扫描"); - html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描 - } else if ( place.mcodeList.indexOf(mcode) === -1) { - // 如果当前库位不存在该物料 - depository = null; - place = null; - layer.msg("出库库位不含该物料,请重新扫描"); - html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描 - } else { - var req = {}; - req.id = id; - req.placeId = place.pid; - // 弹出确定框 - isOutTrue(req); - } - } else { - layer.confirm("请扫描仓库或库位", { - btn: ["扫描", "取消"] - }, function () { // 继续 - html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描 - layer.close(layer.index); // 关闭弹窗 - }, function () { // 取消 - // 关闭当前页 - var index = parent.layer.getFrameIndex(window.name); - parent.layer.close(index); - }) - } - } - } - } - }); - } - else { - // 如果是条码 - // 发送ajax请求去获取当前条码的数据 - layui.$.ajax({ - url: "/material/findMaterialByBarCode?barCode=" + decodedText, - type: "get", - dataType: 'json', - contentType: "application/json;charset=utf-8", - success: function (d) { - var data = d.data; - // 将扫描结果赋值给父页面 - if (data === null || data === undefined) { - // 如果没有查询到物料 - layer.msg("未查询到对应物料,请重新扫描"); - // 继续扫描 - html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描 - } else { - material =data; - // 查询到物料 - if (mcode !== data.code && Number(mcode) !== data.code && mcode !== data.code.toString()) { - material = null; - layer.msg("出库物料不正确,请重新扫描"); - html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描 - } else { - if (depository !== null) { // 如果已经扫描仓库 - if (depositoryId !== depository.did && Number(depositoryId) !== depository.did && depositoryId !== depository.did.toString()) { - // 如果扫描的仓库不是订单要求的仓库 - layer.confirm("当前仓库不符合要求,请移步至正确仓库", { - btn: ["确定"] - }, function () { - //关闭当前页 - var index = parent.layer.getFrameIndex(window.name); - parent.layer.close(index); - }) - } else { - // 如果是出库位置为默认库位 - var req = {}; - req.id = id; - // 弹出确定框 - isOutTrue(req); - } - } else if (place != null) { - // 如果已经扫描库位 - if (depositoryId !== place.depositoryId && Number(depositoryId) !== place.depositoryId && depositoryId !== place.depositoryId.toString()) { - // 如果当前仓库不是订单对应仓库 - depository = null; - place = null; - layer.msg("出库库位所在仓库不正确,请重新扫描"); - html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描 - } else if (place.mcodeList.indexOf(mcode) === -1) { - // 如果当前库位不存在该物料 - depository = null; - place = null; - layer.msg("出库库位不含该物料,请重新扫描"); - html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描 - } else { - var req = {}; - req.id = id; - req.placeId = place.pid; - // 弹出确定框 - isOutTrue(req); - } - } else { - layer.confirm("请扫描仓库或库位", { - btn: ["扫描", "取消"] - }, function () { // 继续 - html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); // 继续扫描 - layer.close(layer.index); // 关闭弹窗 - }, function () { // 取消 - // 将vue中暂存的库位置为空 - material = null; - //关闭当前页 - var index = parent.layer.getFrameIndex(window.name); - parent.layer.close(index); - }) - } - } - } - } - }) } - }).catch((err) => { - console.log(err) - // 停止失败,处理它。 }); + }); - }; // 弹出出库确定弹出框 isOutTrue = function (req) { @@ -330,12 +113,257 @@ depository = null; material = null; place = null; + layer.close(layer.index); + var index = parent.layer.getFrameIndex(window.name); + parent.layer.close(index); + }) + }; + + // 具体出库逻辑 + outboundLogic = function (req) { + layui.$.ajax({ + url: "/material/qywxScanCodeOut", + type: "post", + dataType: 'json', + data: JSON.stringify(req), + contentType: "application/json;charset=utf-8", + success: function (d) { + var data = d.data; + // 获取标准 + var flag = data.flag; + if (flag === 0) { + // 如果是无效码 + layer.msg("扫描失败,请确认扫描是否正确"); + } + else if (flag === 1) { + // 如果是物料 + material = data.material; + if (mcode !== material.code && Number(mcode) !== material.code && mcode !== material.code.toString()) { + + layer.confirm("出库物料不正确,请重新扫描", { + btn: ["确定","取消"] + }, function(){ + material = null; + parent.parent.parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["barCode", "qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; + outboundLogic(req); + } + }) + }, + function () { + // 关闭当前页 + var index = parent.layer.getFrameIndex(window.name); + parent.layer.close(index); + + }) + // 继续扫描 + } + else { + if (depository !== null) { // 如果已经扫描仓库 + if (depositoryId !== depository.did && Number(depositoryId) !== depository.did && depositoryId !== depository.did.toString()) { + // 如果扫描的仓库不是订单要求的仓库 + layer.confirm("当前仓库不符合要求,请移步至正确仓库", { + btn: ["确定"] + }, function () { + // 关闭当前页 + var index = parent.layer.getFrameIndex(window.name); + parent.layer.close(index); + }) + } else { + // 如果是出库位置为默认库位 + var param = {}; + param.id = id; + param.placeId = place.id; + // 弹出确定框 + isOutTrue(param); + } + } + else if (place != null) { + // 如果已经扫描库位 + if (depositoryId !== place.did && Number(depositoryId) !== place.did && depositoryId !== place.did.toString()) { + // 如果当前仓库不是订单对应仓库 + depository = null; + place = null; + layer.confirm("当前库位不符合要求,请移步至正确库位", { + btn: ["确定"] + }, function () { + // 关闭当前页 + var index = parent.layer.getFrameIndex(window.name); + parent.layer.close(index); + }) + } else if (place.mcodeList.indexOf(mcode) === -1) { + // 如果当前库位不存在该物料 + depository = null; + place = null; + layer.confirm("出库库位不含该物料,请重新扫描", { + btn: ["确定"] + }, function () { + // 关闭当前页 + var index = parent.layer.getFrameIndex(window.name); + parent.layer.close(index); + }) + } else { + var param = {}; + param.id = id; + param.placeId = place.id; + // 弹出确定框 + isOutTrue(param); + } + } + else { + layer.confirm("请扫描仓库或库位", { + btn: ["扫描", "取消"] + }, function () { // 继续 + layer.close(layer.index); // 关闭弹窗 + parent.parent.parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["barCode", "qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; + outboundLogic(req); + } + }) + + }, function () { // 取消 + // 关闭当前页 + var index = parent.layer.getFrameIndex(window.name); + parent.layer.close(index); + }) + } + } + + } + else if (flag === 2) { + // 如果扫描的为库位 + place = data.place;// 将扫描结果保存到vue中 + if ( material == null) { + // 如果还没有扫描物料 + layer.confirm("请扫描物料", { + btn: ["扫描", "取消"] + }, function () { // 继续 + layer.close(layer.index); // 关闭弹窗 + parent.parent.parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["barCode","qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; + outboundLogic(req) + } + }) + }, function () { // 取消 + // 关闭当前页 + var index = parent.layer.getFrameIndex(window.name); + parent.layer.close(index); + + }) + } else { + if (depositoryId !== place.did && Number(depositoryId) !== place.did && depositoryId !== place.did.toString()) { + // 如果当前仓库不是订单对应仓库 + depository = null; + place = null; + layer.confirm("当前库位不符合要求,请移步至正确库位", { + btn: ["确定"] + }, function () { + // 关闭当前页 + var index = parent.layer.getFrameIndex(window.name); + parent.layer.close(index); + }) + } else if (place.mcodeList.indexOf(mcode) === -1) { + // 如果当前库位不存在该物料 + depository = null; + place = null; + layer.confirm("出库库位不含该物料,请重新扫描", { + btn: ["确定"] + }, function () { + // 关闭当前页 + var index = parent.layer.getFrameIndex(window.name); + parent.layer.close(index); + }) + } else { + var param = {}; + param.id = id; + param.placeId = place.id; + // 弹出确定框 + isOutTrue(param); + } + } + + + } + else if (flag === 3) { + // 如果是仓库 + depository = data.depository;// 将扫描结果保存到vue中 + + if (material == null) { + // 如果还没有扫描物料 + layer.confirm("请扫描物料", { + btn: ["扫描", "取消"] + }, function () { // 继续 + layer.close(layer.index); // 关闭弹窗 + parent.parent.parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["barCode","qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; + outboundLogic(req); + + } + + }); + + }, function () { // 取消 + // 关闭当前页 + var index = parent.layer.getFrameIndex(window.name); + parent.layer.close(index); + }) + } else { + // 如果已经扫描物料 + if (depositoryId !== depository.id && Number(depositoryId) !== depository.id && depositoryId !== depository.id.toString()) { + // 如果当前仓库不是订单对应仓库 + depository = null; + place = null; + layer.confirm("当前仓库不符合要求,请移步至正确仓库", { + btn: ["确定"] + }, function () { + // 关闭当前页 + var index = parent.layer.getFrameIndex(window.name); + parent.layer.close(index); + }) + } else { + // 如果正确 + var param = {}; + param.id = id; + // 弹出确定框 + isOutTrue(param); + } + } + } + + } }) } - const config = {fps: 10, qrbox: {width: 250, height: 250}}; - // Select back camera or fail with `OverconstrainedError`. - html5QrCode.start({facingMode: {exact: "environment"}}, config, qrCodeSuccessCallback); + + \ No newline at end of file diff --git a/src/main/resources/templates/pages/scanQrCode/ScanCodeByTaking.html b/src/main/resources/templates/pages/scanQrCode/ScanCodeByTaking.html index 7e9b6faa..d097daf8 100644 --- a/src/main/resources/templates/pages/scanQrCode/ScanCodeByTaking.html +++ b/src/main/resources/templates/pages/scanQrCode/ScanCodeByTaking.html @@ -91,7 +91,7 @@ // 停止失败,处理它。 }); }; - const config = { fps: 10, qrbox: { width: 250, height: 250 } }; + const config = { fps: 10, aspectRatio: 2 }; // Select back camera or fail with `OverconstrainedError`. html5QrCode.start({ facingMode: { exact: "environment"} }, config, qrCodeSuccessCallback); diff --git a/src/main/resources/templates/pages/scanQrCode/ScanQrCode.html b/src/main/resources/templates/pages/scanQrCode/ScanQrCode.html index 84edcda6..a7c1881e 100644 --- a/src/main/resources/templates/pages/scanQrCode/ScanQrCode.html +++ b/src/main/resources/templates/pages/scanQrCode/ScanQrCode.html @@ -46,300 +46,259 @@ -
    - -
    - Long validation in progress... -
    -
    -
    + \ No newline at end of file diff --git a/src/main/resources/templates/pages/stockTaking/stockTaking.html b/src/main/resources/templates/pages/stockTaking/stockTaking.html index e69480a3..2bbc72f4 100644 --- a/src/main/resources/templates/pages/stockTaking/stockTaking.html +++ b/src/main/resources/templates/pages/stockTaking/stockTaking.html @@ -206,7 +206,8 @@
    - @@ -391,12 +392,12 @@ this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']}); }, success: function (data) { - layer.msg("申请提交成功", { - icon: 6,//成功的表情 - time: 500 //1秒关闭(如果不配置,默认是3秒) - }, function () { - step.next('#stepForm'); - }); + layer.msg("申请提交成功", { + icon: 6,//成功的表情 + time: 500 //1秒关闭(如果不配置,默认是3秒) + }, function () { + step.next('#stepForm'); + }); }, complete: function () { layer.close(this.layerIndex); @@ -567,33 +568,51 @@ // 扫码盘点位置 scanCode = function () { - layer.open({ - type: 2, - title: '弹窗内容', - skin: 'layui-layer-rim', - maxmin: true, - shadeClose: true, //点击遮罩关闭层 - area: ['100%', '100%'], - move: '.layui-layer-title', - fixed: false, - content: '/scanCodeByTaking', - end: function () { - var nowDepositoryId = $("#depositoryId").val(); - var nowPlaceId = $("#placeId").val(); - if (nowDepositoryId !== depositoryId || nowPlaceId !== placeId) { - // 如果重新选择盘点位置 - var nowDepositoryName = $("#openSonByDepository").val(); - $("#form1")[0].reset(); - $("#depositoryId").val(nowDepositoryId); - $("#placeId").val(nowPlaceId); - $("#openSonByDepository").val(nowDepositoryName); - form.render(); - } - depositoryId = nowDepositoryId; - placeId = nowPlaceId; + parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; + $.ajax({ + url: "/place/qywxApplicationInScanQrCode", + type: "post", + dataType: 'json', + data: JSON.stringify(req), + contentType: "application/json;charset=utf-8", + success: function (d) { + var data = d.data; + var flag = data["flag"]; + if(flag === 0){ + // 如果没有获取到位置 + layer.msg("当前二维码错误,请重新扫描"); + }else if(flag === 1){ + // 如果获取到的是库位 + var place = data["place"]; + $("#placeId").val(place.id); + $("#openSonByDepository").val(place.depositoryName); + $("#depositoryId").val(place.did); + + depositoryId = place.did; + placeId = place.id; + }else if(flag === 2){ + // 如果获取到的是仓库 + var depository = data["depository"]; + $("#placeId").val("0"); + $("#openSonByDepository").val(depository.dname); + $("#depositoryId").val(depository.id); + + depositoryId = depository.id; + placeId = "0"; + } + } + }) } - }); + }) }; @@ -650,7 +669,7 @@ end: function () { var mid = materialId.value; $.ajax({ - url: "/material/findMatrialByIdAndPid?mid=" + mid+"&pid="+placeId, + url: "/material/findMatrialByIdAndPid?mid=" + mid + "&pid=" + placeId, type: "get", dataType: 'json', contentType: "application/json;charset=utf-8", @@ -1041,9 +1060,9 @@ }; // 用于扫描物料编码 - scanMaterialCodeForTaking = function () { + scanMaterialCodeForTaking = function (obj) { if (depositoryId !== undefined && departmentManagerId !== undefined && departmentManagerId !== "") { - layer.open({ + /*layer.open({ type: 2, title: '扫码', skin: 'layui-layer-rim', @@ -1079,7 +1098,92 @@ } }) } - }) + })*/ + + parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 + var req = {}; + req.qrCode = result; + req.placeId = placeId; + req.depositoryId = depositoryId; + $.ajax({ + url: "/material/qywxStockTakingScanQrCode", + type: "post", + dataType: 'json', + data: JSON.stringify(req), + contentType: "application/json;charset=utf-8", + success: function (d) { + var data = d.data; + var parent = obj.parentNode.parentNode.parentNode.parentNode; + var parentId = parent.id; + // 物料编码父级 + var codeChildren = parent.childNodes[7]; + // 物料名称父级 + var materialChildren = parent.childNodes[5]; + + // 物料类型父级 + var typeChildren = parent.childNodes[11]; + // 材质父级 + var textureChildren = parent.childNodes[13]; + // 规格型号父级 + var versionChildren = parent.childNodes[15]; + // 计量单位父级 + var unitChildren = parent.childNodes[17]; + // 库存数量父级 + var inventoryChildren = parent.childNodes[19]; + + // 条形码父级 + var barCodeChildren = parent.childNodes[9]; + // 编码条目 + var codeItem = codeChildren.childNodes[3].childNodes[1]; + // 具体条码 + var codeValue = codeItem.childNodes[1]; + + // 物料条目 + var materialItem = materialChildren.childNodes[3].childNodes; + // 物料名称 + var materialName = materialItem[1].childNodes[1]; + // 物料编码 + var materialId = materialItem[3]; + // 物料种类条目 + var materialTypeItem = typeChildren.childNodes[3].childNodes; + + // 条形码条目 + var barCodeItem = barCodeChildren.childNodes[3]; + + materialName.value = data.mname; + materialId.value = data.id; + + materialTypeItem[1].value = data.typeName; + materialTypeItem[3].value = data.typeId; + codeValue.value = data.code; + textureChildren.childNodes[3].childNodes[1].value = data.texture === null || data.texture === undefined ? '' : data.texture; + versionChildren.childNodes[3].childNodes[1].value = data.version === null || data.version === undefined ? '' : data.version; + unitChildren.childNodes[3].childNodes[1].value = data.unit === null || data.unit === undefined ? '' : data.unit; + inventoryChildren.childNodes[3].childNodes[1].value = data.quantity; + // 获取物料与条形码的对应关系 + var materialAndBarCodeList = data["materialAndBarCodeList"]; + if (materialAndBarCodeList !== null && materialAndBarCodeList.length > 0) { + var barCodeInput = barCodeItem.childNodes[1].childNodes[1]; + var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; + var id = barCodeInput.id; + var idNumber = materialId.name.split("mid")[1]; + form.render(); + $.each(materialAndBarCodeList, function (index, item) { + $("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 + }); + form.render(); + } + } + }) + } + }) + } else { layer.msg("请先选择盘点位置或负责人", { icon: 0, @@ -1092,69 +1196,105 @@ var id = obj.id; id = id.split("barCodeImg")[1]; if (depositoryId !== undefined && departmentManagerId !== undefined && departmentManagerId !== "") { - layer.open({ - type: 2, - title: '扫码', - skin: 'layui-layer-rim', - maxmin: true, - shadeClose: true, //点击遮罩关闭层 - area: ['100%', '100%'], - move: '.layui-layer-title', - fixed: false, - content: '/scanBarCodeForTaking', - end: function () { + parent.wx.scanQRCode({ + desc: 'scanQRCode desc', + needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, + scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + success: function (res) { + // 回调 + var result = res.resultStr;//当needResult为1时返回处理结果 var req = {}; + req.qrCode = result; req.depositoryId = depositoryId; req.placeId = placeId; $.ajax({ - url: "/material/stockTaking_scanBarCode", + url: "/material/qywxStockTakingScanBarCode", type: "post", dataType: 'json', data: JSON.stringify(req), contentType: "application/json;charset=utf-8", success: function (d) { var data = d.data; - var materialList = data["materialList"]; + var material = data["material"]; var barCodeListByNoMaterial = data["barCodeListByNoMaterial"]; - if (materialList.length > 0) { - for (let i = 1; i <= materialList.length; i++) { - Coverpage(i, materialList[i - 1]); - var materialAndBarCodeList = materialList[i - 1]["materialAndBarCodeList"]; - $.each(materialAndBarCodeList, function (index, item) { - $("#barCode" + i).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 - }); - } + if (material !== null) { + var parent = obj.parentNode.parentNode.parentNode.parentNode; + var parentId = parent.id; + // 物料编码父级 + var codeChildren = parent.childNodes[7]; + // 物料名称父级 + var materialChildren = parent.childNodes[5]; + // 物料类型父级 + var typeChildren = parent.childNodes[11]; + // 材质父级 + var textureChildren = parent.childNodes[13]; + // 规格型号父级 + var versionChildren = parent.childNodes[15]; + // 计量单位父级 + var unitChildren = parent.childNodes[17]; + // 库存数量父级 + var inventoryChildren = parent.childNodes[19]; + + // 条形码父级 + var barCodeChildren = parent.childNodes[9]; + // 编码条目 + var codeItem = codeChildren.childNodes[3].childNodes[1]; + // 具体条码 + var codeValue = codeItem.childNodes[1]; + + // 物料条目 + var materialItem = materialChildren.childNodes[3].childNodes; + // 物料名称 + var materialName = materialItem[1].childNodes[1]; + // 物料编码 + var materialId = materialItem[3]; + // 物料种类条目 + var materialTypeItem = typeChildren.childNodes[3].childNodes; + + // 条形码条目 + var barCodeItem = barCodeChildren.childNodes[3]; + + materialName.value = material.mname; + materialId.value = material.id; + codeValue.value = material.code; + materialTypeItem[1].value = material.typeName; + materialTypeItem[3].value = material.typeId; + textureChildren.childNodes[3].childNodes[1].value = material.texture === null || material.texture === undefined ? '' : material.texture; + versionChildren.childNodes[3].childNodes[1].value = material.version === null || material.version === undefined ? '' : material.version; + unitChildren.childNodes[3].childNodes[1].value = material.unit === null || material.unit === undefined ? '' : material.unit; + inventoryChildren.childNodes[3].childNodes[1].value = material.quantity; + $("#barCode" + id).append(new Option(result, 0));//往下拉菜单里添加元素 form.render(); } - if(barCodeListByNoMaterial.length > 0){ + if (barCodeListByNoMaterial.length > 0) { // 如果扫描的条形码没有对应的物料 var content = '
    ' + '

    未发现的条码,是否需要添加对应关系


    ' + ''; for (let i = 0; i < barCodeListByNoMaterial.length; i++) { - var item = "" - content+=item; + var item = ""; + content += item; } - content+='
    "+barCodeListByNoMaterial[i]+"
    " + barCodeListByNoMaterial[i] + "
    '; + content += '
    '; layer.open({ type: 1 - ,title: false //不显示标题栏 - ,closeBtn: false - ,area: '300px;' - ,shade: 0.8 - ,id: 'LAY_layuipro' //设定一个id,防止重复弹出 - ,btn: ['添加', '取消'] - ,btnAlign:'c' - ,moveType: 1 //拖拽模式,0或者1 - ,content: content - ,success: function(layero){ + , title: false //不显示标题栏 + , closeBtn: false + , area: '300px;' + , shade: 0.8 + , id: 'LAY_layuipro' //设定一个id,防止重复弹出 + , btn: ['添加', '取消'] + , btnAlign: 'c' + , moveType: 1 //拖拽模式,0或者1 + , content: content + , success: function (layero) { var btn = layero.find('.layui-layer-btn'); btn.find('.layui-layer-btn0').click(function () { $.each(barCodeListByNoMaterial, function (index, item) { - $("#barCode"+id).append(new Option(item, index));//往下拉菜单里添加元素 + $("#barCode" + id).append(new Option(item, index));//往下拉菜单里添加元素 }); - barCodeList["barCode"+id] = barCodeListByNoMaterial; - needToUpdate["barCode"+id] = true; + barCodeList["barCode" + id] = barCodeListByNoMaterial; + needToUpdate["barCode" + id] = true; form.render() }); } @@ -1164,7 +1304,8 @@ } }) } - }) + }); + } else { layer.msg("请先选择盘点位置或负责人", { icon: 0, diff --git a/src/main/resources/templates/pages/warehouse/warehouse_view.html b/src/main/resources/templates/pages/warehouse/warehouse_view.html index 707bcfa4..43b91d8e 100644 --- a/src/main/resources/templates/pages/warehouse/warehouse_view.html +++ b/src/main/resources/templates/pages/warehouse/warehouse_view.html @@ -16,7 +16,7 @@
    @@ -85,7 +85,8 @@
    - + +