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 9c2b2108..45f38893 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java @@ -1,21 +1,17 @@ package com.dreamchaser.depository_manage.controller; -import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.dreamchaser.depository_manage.config.PortConfig; import com.dreamchaser.depository_manage.entity.*; 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.*; -import org.apache.http.protocol.HTTP; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; -import java.io.IOException; import java.util.*; import java.util.concurrent.TimeUnit; @@ -291,7 +287,7 @@ public class DepositoryRecordController { String crypt = Md5.crypt(header); map.put("applicantId",userToken.getId()); // 获取当前部门负责人 - List departmentHeadByUsers = findDepartmentHeadByUser(userToken); + List departmentHeadByUsers = LinkInterfaceUtil.findDepartmentHeadByUser(userToken); StringBuilder departmentHeadId = new StringBuilder(); StringBuilder departMentHeadQyWxName = new StringBuilder(); // for (int i = 0; i < departmentHeadByUsers.size(); i++) { @@ -347,7 +343,8 @@ public class DepositoryRecordController { }).start(); } - }else{ + } + else{ // 插入主订单 map.put("departmenthead",departmentHeadId.toString()); if(!map.containsKey("mid")){ @@ -424,7 +421,7 @@ public class DepositoryRecordController { } if(integer != 0 && params.size() < 1){ return CrudUtil.postHandle(integer,1); - }else if(integer != 0 && params.size() >0 ){ + }else if(integer != 0 && params.size() > 1 ){ return CrudUtil.postHandle(integer,params.size() + 1); }else{ return new RestResponse("",666,new StatusInfo("出库失败","请联系管理员进行操作")); @@ -681,7 +678,7 @@ public class DepositoryRecordController { @PutMapping("/transfer") public RestResponse transfer(@RequestBody Map map, HttpServletRequest request){ UserByPort userToken= (UserByPort) request.getAttribute("userToken"); - List departmentHeadByUsers = findDepartmentHeadByUser(userToken); + List departmentHeadByUsers = LinkInterfaceUtil.findDepartmentHeadByUser(userToken); String header = request.getHeader("user-agent"); String crypt = Md5.crypt(header); StringBuilder departmentHeadId = new StringBuilder(); @@ -904,7 +901,7 @@ public class DepositoryRecordController { success += depositoryRecordService.applicationInPlace(map); }else if("out".equals(type)){ // 获取部门负责人 - List departmentHeadByUsers = findDepartmentHeadByUser(userToken); + List departmentHeadByUsers = LinkInterfaceUtil.findDepartmentHeadByUser(userToken); StringBuilder departmentHeadId = new StringBuilder(); StringBuilder departMentHeadQyWxName = new StringBuilder(); // for (int i = 0; i < departmentHeadByUsers.size(); i++) { @@ -1038,7 +1035,7 @@ public class DepositoryRecordController { sumQuantity += integer; } // 获取部门负责人 - List departmentHeadByUsers = findDepartmentHeadByUser(userToken); + List departmentHeadByUsers = LinkInterfaceUtil.findDepartmentHeadByUser(userToken); StringBuilder departmentHeadId = new StringBuilder(); StringBuilder departMentHeadQyWxName = new StringBuilder(); // for (int i = 0; i < departmentHeadByUsers.size(); i++) { @@ -1184,45 +1181,4 @@ public class DepositoryRecordController { } - - /** - * 获取当前登录用户的部门负责人 - * @param user - * @return - */ - public static List findDepartmentHeadByUser(UserByPort user){ - String url = PortConfig.external_url + "/staff/archiveslist"; - Integer maindeparment = user.getMaindeparment(); - Map map = new HashMap<>(); - map.put("adminorg",maindeparment); - String jsonString = JSONObject.toJSONString(map); - JSONObject paramObject = JSONObject.parseObject(jsonString); - String post = null; - try { - post = HttpUtils.send(url, paramObject, HTTP.UTF_8,user); - } catch (IOException e) { - e.printStackTrace(); - } - JSONObject jsonObject = JSONObject.parseObject(post); - JSONObject data = (JSONObject) jsonObject.get("data"); - JSONArray list = (JSONArray) data.get("list"); - if(list == null){ - list = new JSONArray(); - } - List DepartmentHeads = new ArrayList<>(); - for (int i = 0; i < list.size(); i++) { - UserByPort userByPort = JSONObject.toJavaObject((JSONObject) list.get(i), UserByPort.class); - if(userByPort.getPersonincharge() == 1){ - DepartmentHeads.add(userByPort); - } - } - return DepartmentHeads; - } - - - - - - - } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/GroupController.java b/src/main/java/com/dreamchaser/depository_manage/controller/GroupController.java index a3dfae46..2a878763 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/GroupController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/GroupController.java @@ -1,5 +1,6 @@ package com.dreamchaser.depository_manage.controller; +import com.alibaba.fastjson.JSONObject; import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.pojo.GroupInfoP; @@ -8,10 +9,13 @@ import com.dreamchaser.depository_manage.pojo.StatusInfo; import com.dreamchaser.depository_manage.service.DepositoryService; import com.dreamchaser.depository_manage.service.GroupService; import com.dreamchaser.depository_manage.service.MaterialService; -import com.dreamchaser.depository_manage.utils.CrudUtil; -import com.dreamchaser.depository_manage.utils.DateUtil; -import com.dreamchaser.depository_manage.utils.ObjectFormatUtil; +import com.dreamchaser.depository_manage.service.impl.QyWxOperationService; +import com.dreamchaser.depository_manage.utils.*; +import com.sun.org.apache.xpath.internal.operations.Bool; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; @@ -19,6 +23,8 @@ import java.sql.Time; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; @RestController @RequestMapping("/group") @@ -33,6 +39,12 @@ public class GroupController { @Autowired MaterialService materialService; + @Autowired + private QyWxOperationService qyWxOperationService; + + @Autowired + private RedisTemplate redisTemplateForHash; + /** * 用于添加一条套餐记录 @@ -62,7 +74,7 @@ public class GroupController { // 获取套餐编码 Group groupByCode = groupService.findGroupByCode(code); - if(groupByCode != null) { + if (groupByCode != null) { Map paramForGetGroup = new HashMap<>(); @@ -98,10 +110,10 @@ public class GroupController { if (flag) { return new RestResponse(groupByGid); } else { - return new RestResponse(null,666,new StatusInfo("不能出库","当前套餐中有物料库存不足")); + return new RestResponse(null, 666, new StatusInfo("不能出库", "当前套餐中有物料库存不足")); } - }else{ - return new RestResponse(null,666,new StatusInfo("失败","暂无该套餐,请确认是否正确")); + } else { + return new RestResponse(null, 666, new StatusInfo("失败", "暂无该套餐,请确认是否正确")); } } @@ -149,29 +161,30 @@ public class GroupController { /** * 根据套餐名称获取套餐 + * * @param map 套餐名称 * @return */ @PostMapping("/findGroupByGname") - public RestResponse findGroupByGname(@RequestBody Map map){ - if(map.containsKey("gname")){ + public RestResponse findGroupByGname(@RequestBody Map map) { + if (map.containsKey("gname")) { List groupOnlyByCondition = groupService.findGroupOnlyByCondition(map); int size = groupOnlyByCondition.size(); - if(size > 1){ + if (size > 1) { // 如果当前名称的套餐大于1个 - return new RestResponse("",-1,444); - }else if(size == 1){ + return new RestResponse("", -1, 444); + } else if (size == 1) { // 如果刚好只有一个 // 获取当前套餐的所有物料数据 List groupByGid = groupService.findGroupByCondition(map); - return new RestResponse(groupByGid,groupByGid.size(),200); + return new RestResponse(groupByGid, groupByGid.size(), 200); - }else{ + } else { // 如果没有 - return new RestResponse("",0,666); + return new RestResponse("", 0, 666); } - }else{ + } else { throw new MyException("缺少必要参数"); } } @@ -250,15 +263,16 @@ public class GroupController { /** * 用于修改套餐信息 + * * @param map 修改条件 * @return */ @PostMapping("/editGroupInfo") - public RestResponse editGroupInfo(@RequestBody Map map){ - if(map.containsKey("id")){ + public RestResponse editGroupInfo(@RequestBody Map map) { + if (map.containsKey("id")) { Integer integer = groupService.updateGroupInfo(map); - return CrudUtil.putHandle(1,integer); - }else{ + return CrudUtil.putHandle(1, integer); + } else { throw new MyException("缺少必要参数"); } } @@ -309,7 +323,7 @@ public class GroupController { } @PostMapping("/findGroupInfoByGid") - public RestResponse findGroupInfoByGid(@RequestBody Map map,HttpServletRequest request){ + public RestResponse findGroupInfoByGid(@RequestBody Map map, HttpServletRequest request) { UserByPort userToken = (UserByPort) request.getAttribute("userToken"); @@ -346,18 +360,132 @@ public class GroupController { if (flag) { return new RestResponse(groupByGid); } else { - return new RestResponse(null,666,new StatusInfo("不能出库","当前套餐中有物料库存不足")); + return new RestResponse(null, 666, new StatusInfo("不能出库", "当前套餐中有物料库存不足")); } } @PostMapping("/treeMenus") - public RestResponse treeMenus(@RequestBody Map map){ + public RestResponse treeMenus(@RequestBody Map map) { String gname = ""; - if(map.containsKey("gname")){ + if (map.containsKey("gname")) { gname = (String) map.get("gname"); } List list = groupService.InitTreeMenus(gname); return new RestResponse(list); } + + + @PostMapping("/applicationOutForGroup") + public RestResponse applicationOutForGroup(@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 = LinkInterfaceUtil.findDepartmentHeadByUser(userToken); + // 部门负责人id + StringBuilder departmentHeadId = new StringBuilder(); + // 部门负责人企业微信user + StringBuilder departMentHeadQyWxName = new StringBuilder(); +// for (int i = 0; i < departmentHeadByUsers.size(); i++) { +// departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(","); +// departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+","); +// } + departmentHeadId.append("78").append(","); + departMentHeadQyWxName.append("PangFuZhen").append(","); + map.put("departmenthead", departmentHeadId.toString()); + // 获取当前提交数 + List params = (List) map.get("params"); + // 执行结果 + Integer integer = 0; + // 实际结果 + Integer result = 0; + Integer gid = ObjectFormatUtil.toInteger(map.get("gid")); + List groupInfoByGid = groupService.findGroupInfoByGid(gid); + if(groupInfoByGid != null) { + result = groupInfoByGid.size(); + } + if (params.size() < 1 && map.size() > 3) { + try { + integer += groupService.insertApplicationOutRecord(map, userToken); // 插入主订单 + } catch (Exception e) { + return new RestResponse("", 666, new StatusInfo("出库失败", e.getMessage())); + } + Object id = map.get("id"); // 获取主订单编号 + + // 开启一个线程开启审批 + new Thread(new Runnable() { + @Override + public void run() { + JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplate(crypt, userToken, ObjectFormatUtil.toInteger(id)); + String sp_no = jsonObject.getString("sp_no"); + Map QyWxApprovalMap = new HashMap<>(); + QyWxApprovalMap.put("sp_no", sp_no); + QyWxApprovalMap.put("mainId", id.toString()); + redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); + // 设置过期为7天 + redisTemplateForHash.expire(sp_no, 7, TimeUnit.DAYS); + } + }).start(); + + } else { + + } + if (integer != 0 && params.size() < 1) { + return CrudUtil.postHandle(integer, result); + } else if (integer != 0 && params.size() > 1) { + return CrudUtil.postHandle(integer, result); + } else { + return new RestResponse("", 666, new StatusInfo("出库失败", "请联系管理员进行操作")); + } + + } + + + /** + * 用于判断当前套餐的数量是否合法 + * @param map 套餐相关信息 + * @param request + * @return + */ + @PostMapping("/groupQuantityIsTrue") + public RestResponse groupQuantityIsTrue(@RequestBody Map map,HttpServletRequest request){ + if(map.containsKey("gid")){ + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); + // 获取当前部门所拥有的仓库 + List depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userToken.getMaindeparment().toString()); + // 获取套餐id + Integer gid = ObjectFormatUtil.toInteger(map.get("gid")); + // 获取套餐数量 + Integer quantity = ObjectFormatUtil.toInteger(map.get("quantity")); + List groupInfoByGid = groupService.findGroupInfoByGid(gid); + // 用于标志该数量是否合法 + boolean flag = true; + for (int i = 0; i < groupInfoByGid.size(); i++) { + // 获取具体信息 + GroupInfo groupInfo = groupInfoByGid.get(i); + // 获取本次要出库的实际的数量 + Integer totalQuantity = groupInfo.getQuantity() * quantity; + // 用于标志是否可以满足库存要求 + boolean flagForInventory = false; + // 获取该物料在各仓库的库存 + List inventoryByMidAndDepository = materialService.findInventoryByMidAndDepository(groupInfo.getMid(), depositoryByAdminorg); + for (int j = 0; j < inventoryByMidAndDepository.size(); j++) { + Integer integer = inventoryByMidAndDepository.get(j); + if(integer > totalQuantity){ + flagForInventory = true; + break; + } + } + if(!flagForInventory){ + // 如果概述了不合法 + flag = false; + } + } + return new RestResponse(flag); + }else{ + throw new MyException("缺少必要参数"); + } + } } diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/GroupMapper.java b/src/main/java/com/dreamchaser/depository_manage/mapper/GroupMapper.java index 516d8368..bd683d8e 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/GroupMapper.java +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/GroupMapper.java @@ -41,6 +41,14 @@ public interface GroupMapper { Group findGroupOnlyById(Integer id); + /** + * 根据套餐id获取具体套餐信息 + * @param gid 套餐id + * @return + */ + List findGroupInfoByGid(Integer gid); + + /** * 根据条件查询套餐(不包含其他数据) * @param map 查询条件 diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/GroupMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/GroupMapper.xml index e813f5fd..85526fc0 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/GroupMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/GroupMapper.xml @@ -220,6 +220,14 @@ + + + +
+ +
+ +
+
@@ -217,7 +224,7 @@
- @@ -302,6 +309,11 @@ function MaterialQuantityIsTrue() { } + + // 用于判断当前套餐数量是否合适 + function groupQuantityIsTrue() { + } + // 用于扫描条形码 function scanBarCode() { } @@ -354,7 +366,7 @@ }] }); - // 提交 + // 提交(物料出库) form.on('submit(formStep)', function (data) { data = data.field; data.params = params; @@ -412,9 +424,60 @@ return false; }); - + // 提交(套餐出库) form.on('submit(formStep2)', function (data) { + data = data.field; + data.params = params2; + if (data.gid === undefined) { + // 如果没有初始项 + var dataKeys = Object.keys(data); + var dataKey; + for (let i = 0; i < dataKeys.length; i++) { + dataKey = dataKeys[i]; + if (dataKey.includes("gid")) { + break; + } + } + // 获取当前数字 + var keyNumber = dataKey.split("gid")[1]; + for (let index = 0; index < dataKeys.length; index++) { + var tempKey = dataKeys[index]; + if (tempKey.includes(keyNumber)) { + var key = tempKey.replace(keyNumber, ""); + data[key] = data[tempKey]; + delete data[tempKey]; + } + } + data.params = remove(data.params, Number(keyNumber)); + } + $.ajax({ + url: "/group/applicationOutForGroup", + type: 'post', + dataType: 'json', + contentType: "application/json;charset=utf-8", + data: JSON.stringify(data), + beforeSend: function () { + this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']}); + }, + success: function (d) { + layer.close(this.layerIndex); + if (d.status >= 300) { + layer.msg(d.statusInfo.detail);//失败的表情 + + } else { + layer.msg("申请提交成功", { + icon: 6,//成功的表情 + time: 500 //1秒关闭(如果不配置,默认是3秒) + }, function () { + step.next('#stepForm2'); + }); + } + }, + complete: function () { + layer.close(this.layerIndex); + } + }); }); $('.pre').click(function () { @@ -541,7 +604,14 @@
+ required lay-verify="number" onblur="groupQuantityIsTrue(this)" placeholder="请填写套餐数量"/> +
+
+
+ +
+
-
+
+ +
+ +
+
@@ -217,7 +224,7 @@
- @@ -302,6 +309,11 @@ function MaterialQuantityIsTrue() { } + + // 用于判断当前套餐数量是否合适 + function groupQuantityIsTrue() { + } + // 用于扫描条形码 function scanBarCode() { } @@ -354,7 +366,7 @@ }] }); - // 提交 + // 提交(物料出库) form.on('submit(formStep)', function (data) { data = data.field; data.params = params; @@ -412,9 +424,60 @@ return false; }); - + // 提交(套餐出库) form.on('submit(formStep2)', function (data) { + data = data.field; + data.params = params2; + if (data.gid === undefined) { + // 如果没有初始项 + var dataKeys = Object.keys(data); + var dataKey; + for (let i = 0; i < dataKeys.length; i++) { + dataKey = dataKeys[i]; + if (dataKey.includes("gid")) { + break; + } + } + // 获取当前数字 + var keyNumber = dataKey.split("gid")[1]; + for (let index = 0; index < dataKeys.length; index++) { + var tempKey = dataKeys[index]; + if (tempKey.includes(keyNumber)) { + var key = tempKey.replace(keyNumber, ""); + data[key] = data[tempKey]; + delete data[tempKey]; + } + } + data.params = remove(data.params, Number(keyNumber)); + } + + $.ajax({ + url: "/group/applicationOutForGroup", + type: 'post', + dataType: 'json', + contentType: "application/json;charset=utf-8", + data: JSON.stringify(data), + beforeSend: function () { + this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']}); + }, + success: function (d) { + layer.close(this.layerIndex); + if (d.status >= 300) { + layer.msg(d.statusInfo.detail);//失败的表情 + } else { + layer.msg("申请提交成功", { + icon: 6,//成功的表情 + time: 500 //1秒关闭(如果不配置,默认是3秒) + }, function () { + step.next('#stepForm2'); + }); + } + }, + complete: function () { + layer.close(this.layerIndex); + } + }); }); $('.pre').click(function () { @@ -541,7 +604,14 @@
+ required lay-verify="number" onblur="groupQuantityIsTrue(this)" placeholder="请填写套餐数量"/> +
+
+
+ +
+