Browse Source

添加套餐相关功能

lwx_dev
erdanergou 3 years ago
parent
commit
c06d5f45cc
  1. 58
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java
  2. 176
      src/main/java/com/dreamchaser/depository_manage/controller/GroupController.java
  3. 8
      src/main/java/com/dreamchaser/depository_manage/mapper/GroupMapper.java
  4. 8
      src/main/java/com/dreamchaser/depository_manage/mapper/GroupMapper.xml
  5. 20
      src/main/java/com/dreamchaser/depository_manage/service/GroupService.java
  6. 157
      src/main/java/com/dreamchaser/depository_manage/service/impl/GroupServiceImpl.java
  7. 34
      src/main/java/com/dreamchaser/depository_manage/utils/LinkInterfaceUtil.java
  8. 122
      src/main/resources/templates/pages/application/application-out.html
  9. 1
      src/main/resources/templates/pages/other/welcome.html
  10. 124
      target/classes/templates/pages/application/application-out.html
  11. 1
      target/classes/templates/pages/other/welcome.html

58
src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java

@ -1,21 +1,17 @@
package com.dreamchaser.depository_manage.controller; package com.dreamchaser.depository_manage.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.*; import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.service.*; import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.service.impl.QyWxOperationService; import com.dreamchaser.depository_manage.service.impl.QyWxOperationService;
import com.dreamchaser.depository_manage.utils.*; import com.dreamchaser.depository_manage.utils.*;
import org.apache.http.protocol.HTTP;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -291,7 +287,7 @@ public class DepositoryRecordController {
String crypt = Md5.crypt(header); String crypt = Md5.crypt(header);
map.put("applicantId",userToken.getId()); map.put("applicantId",userToken.getId());
// 获取当前部门负责人 // 获取当前部门负责人
List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken); List<UserByPort> departmentHeadByUsers = LinkInterfaceUtil.findDepartmentHeadByUser(userToken);
StringBuilder departmentHeadId = new StringBuilder(); StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = new StringBuilder(); StringBuilder departMentHeadQyWxName = new StringBuilder();
// for (int i = 0; i < departmentHeadByUsers.size(); i++) { // for (int i = 0; i < departmentHeadByUsers.size(); i++) {
@ -347,7 +343,8 @@ public class DepositoryRecordController {
}).start(); }).start();
} }
}else{ }
else{
// 插入主订单 // 插入主订单
map.put("departmenthead",departmentHeadId.toString()); map.put("departmenthead",departmentHeadId.toString());
if(!map.containsKey("mid")){ if(!map.containsKey("mid")){
@ -424,7 +421,7 @@ public class DepositoryRecordController {
} }
if(integer != 0 && params.size() < 1){ if(integer != 0 && params.size() < 1){
return CrudUtil.postHandle(integer,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); return CrudUtil.postHandle(integer,params.size() + 1);
}else{ }else{
return new RestResponse("",666,new StatusInfo("出库失败","请联系管理员进行操作")); return new RestResponse("",666,new StatusInfo("出库失败","请联系管理员进行操作"));
@ -681,7 +678,7 @@ public class DepositoryRecordController {
@PutMapping("/transfer") @PutMapping("/transfer")
public RestResponse transfer(@RequestBody Map<String,Object> map, HttpServletRequest request){ public RestResponse transfer(@RequestBody Map<String,Object> map, HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken"); UserByPort userToken= (UserByPort) request.getAttribute("userToken");
List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken); List<UserByPort> departmentHeadByUsers = LinkInterfaceUtil.findDepartmentHeadByUser(userToken);
String header = request.getHeader("user-agent"); String header = request.getHeader("user-agent");
String crypt = Md5.crypt(header); String crypt = Md5.crypt(header);
StringBuilder departmentHeadId = new StringBuilder(); StringBuilder departmentHeadId = new StringBuilder();
@ -904,7 +901,7 @@ public class DepositoryRecordController {
success += depositoryRecordService.applicationInPlace(map); success += depositoryRecordService.applicationInPlace(map);
}else if("out".equals(type)){ }else if("out".equals(type)){
// 获取部门负责人 // 获取部门负责人
List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken); List<UserByPort> departmentHeadByUsers = LinkInterfaceUtil.findDepartmentHeadByUser(userToken);
StringBuilder departmentHeadId = new StringBuilder(); StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = new StringBuilder(); StringBuilder departMentHeadQyWxName = new StringBuilder();
// for (int i = 0; i < departmentHeadByUsers.size(); i++) { // for (int i = 0; i < departmentHeadByUsers.size(); i++) {
@ -1038,7 +1035,7 @@ public class DepositoryRecordController {
sumQuantity += integer; sumQuantity += integer;
} }
// 获取部门负责人 // 获取部门负责人
List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken); List<UserByPort> departmentHeadByUsers = LinkInterfaceUtil.findDepartmentHeadByUser(userToken);
StringBuilder departmentHeadId = new StringBuilder(); StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = new StringBuilder(); StringBuilder departMentHeadQyWxName = new StringBuilder();
// for (int i = 0; i < departmentHeadByUsers.size(); i++) { // for (int i = 0; i < departmentHeadByUsers.size(); i++) {
@ -1184,45 +1181,4 @@ public class DepositoryRecordController {
} }
/**
* 获取当前登录用户的部门负责人
* @param user
* @return
*/
public static List<UserByPort> findDepartmentHeadByUser(UserByPort user){
String url = PortConfig.external_url + "/staff/archiveslist";
Integer maindeparment = user.getMaindeparment();
Map<String,Object> 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<UserByPort> 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;
}
} }

176
src/main/java/com/dreamchaser/depository_manage/controller/GroupController.java

@ -1,5 +1,6 @@
package com.dreamchaser.depository_manage.controller; package com.dreamchaser.depository_manage.controller;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.GroupInfoP; 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.DepositoryService;
import com.dreamchaser.depository_manage.service.GroupService; import com.dreamchaser.depository_manage.service.GroupService;
import com.dreamchaser.depository_manage.service.MaterialService; import com.dreamchaser.depository_manage.service.MaterialService;
import com.dreamchaser.depository_manage.utils.CrudUtil; import com.dreamchaser.depository_manage.service.impl.QyWxOperationService;
import com.dreamchaser.depository_manage.utils.DateUtil; import com.dreamchaser.depository_manage.utils.*;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil; import com.sun.org.apache.xpath.internal.operations.Bool;
import org.springframework.beans.factory.annotation.Autowired; 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 org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -19,6 +23,8 @@ import java.sql.Time;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@RestController @RestController
@RequestMapping("/group") @RequestMapping("/group")
@ -33,6 +39,12 @@ public class GroupController {
@Autowired @Autowired
MaterialService materialService; MaterialService materialService;
@Autowired
private QyWxOperationService qyWxOperationService;
@Autowired
private RedisTemplate<String, String> redisTemplateForHash;
/** /**
* 用于添加一条套餐记录 * 用于添加一条套餐记录
@ -62,7 +74,7 @@ public class GroupController {
// 获取套餐编码 // 获取套餐编码
Group groupByCode = groupService.findGroupByCode(code); Group groupByCode = groupService.findGroupByCode(code);
if(groupByCode != null) { if (groupByCode != null) {
Map<String, Object> paramForGetGroup = new HashMap<>(); Map<String, Object> paramForGetGroup = new HashMap<>();
@ -98,10 +110,10 @@ public class GroupController {
if (flag) { if (flag) {
return new RestResponse(groupByGid); return new RestResponse(groupByGid);
} else { } else {
return new RestResponse(null,666,new StatusInfo("不能出库","当前套餐中有物料库存不足")); return new RestResponse(null, 666, new StatusInfo("不能出库", "当前套餐中有物料库存不足"));
} }
}else{ } else {
return new RestResponse(null,666,new StatusInfo("失败","暂无该套餐,请确认是否正确")); return new RestResponse(null, 666, new StatusInfo("失败", "暂无该套餐,请确认是否正确"));
} }
} }
@ -149,29 +161,30 @@ public class GroupController {
/** /**
* 根据套餐名称获取套餐 * 根据套餐名称获取套餐
*
* @param map 套餐名称 * @param map 套餐名称
* @return * @return
*/ */
@PostMapping("/findGroupByGname") @PostMapping("/findGroupByGname")
public RestResponse findGroupByGname(@RequestBody Map<String,Object> map){ public RestResponse findGroupByGname(@RequestBody Map<String, Object> map) {
if(map.containsKey("gname")){ if (map.containsKey("gname")) {
List<Group> groupOnlyByCondition = groupService.findGroupOnlyByCondition(map); List<Group> groupOnlyByCondition = groupService.findGroupOnlyByCondition(map);
int size = groupOnlyByCondition.size(); int size = groupOnlyByCondition.size();
if(size > 1){ if (size > 1) {
// 如果当前名称的套餐大于1个 // 如果当前名称的套餐大于1个
return new RestResponse("",-1,444); return new RestResponse("", -1, 444);
}else if(size == 1){ } else if (size == 1) {
// 如果刚好只有一个 // 如果刚好只有一个
// 获取当前套餐的所有物料数据 // 获取当前套餐的所有物料数据
List<GroupInfo> groupByGid = groupService.findGroupByCondition(map); List<GroupInfo> 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("缺少必要参数"); throw new MyException("缺少必要参数");
} }
} }
@ -250,15 +263,16 @@ public class GroupController {
/** /**
* 用于修改套餐信息 * 用于修改套餐信息
*
* @param map 修改条件 * @param map 修改条件
* @return * @return
*/ */
@PostMapping("/editGroupInfo") @PostMapping("/editGroupInfo")
public RestResponse editGroupInfo(@RequestBody Map<String,Object> map){ public RestResponse editGroupInfo(@RequestBody Map<String, Object> map) {
if(map.containsKey("id")){ if (map.containsKey("id")) {
Integer integer = groupService.updateGroupInfo(map); Integer integer = groupService.updateGroupInfo(map);
return CrudUtil.putHandle(1,integer); return CrudUtil.putHandle(1, integer);
}else{ } else {
throw new MyException("缺少必要参数"); throw new MyException("缺少必要参数");
} }
} }
@ -309,7 +323,7 @@ public class GroupController {
} }
@PostMapping("/findGroupInfoByGid") @PostMapping("/findGroupInfoByGid")
public RestResponse findGroupInfoByGid(@RequestBody Map<String,Object> map,HttpServletRequest request){ public RestResponse findGroupInfoByGid(@RequestBody Map<String, Object> map, HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken"); UserByPort userToken = (UserByPort) request.getAttribute("userToken");
@ -346,18 +360,132 @@ public class GroupController {
if (flag) { if (flag) {
return new RestResponse(groupByGid); return new RestResponse(groupByGid);
} else { } else {
return new RestResponse(null,666,new StatusInfo("不能出库","当前套餐中有物料库存不足")); return new RestResponse(null, 666, new StatusInfo("不能出库", "当前套餐中有物料库存不足"));
} }
} }
@PostMapping("/treeMenus") @PostMapping("/treeMenus")
public RestResponse treeMenus(@RequestBody Map<String,Object> map){ public RestResponse treeMenus(@RequestBody Map<String, Object> map) {
String gname = ""; String gname = "";
if(map.containsKey("gname")){ if (map.containsKey("gname")) {
gname = (String) map.get("gname"); gname = (String) map.get("gname");
} }
List<Object> list = groupService.InitTreeMenus(gname); List<Object> list = groupService.InitTreeMenus(gname);
return new RestResponse(list); return new RestResponse(list);
} }
@PostMapping("/applicationOutForGroup")
public RestResponse applicationOutForGroup(@RequestBody Map<String, Object> 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<UserByPort> 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<Integer> params = (List<Integer>) map.get("params");
// 执行结果
Integer integer = 0;
// 实际结果
Integer result = 0;
Integer gid = ObjectFormatUtil.toInteger(map.get("gid"));
List<GroupInfo> 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<String, Object> 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<String,Object> map,HttpServletRequest request){
if(map.containsKey("gid")){
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
// 获取当前部门所拥有的仓库
List<Depository> depositoryByAdminorg = depositoryService.findDepositoryByAdminorg(userToken.getMaindeparment().toString());
// 获取套餐id
Integer gid = ObjectFormatUtil.toInteger(map.get("gid"));
// 获取套餐数量
Integer quantity = ObjectFormatUtil.toInteger(map.get("quantity"));
List<GroupInfo> 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<Integer> 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("缺少必要参数");
}
}
} }

8
src/main/java/com/dreamchaser/depository_manage/mapper/GroupMapper.java

@ -41,6 +41,14 @@ public interface GroupMapper {
Group findGroupOnlyById(Integer id); Group findGroupOnlyById(Integer id);
/**
* 根据套餐id获取具体套餐信息
* @param gid 套餐id
* @return
*/
List<GroupInfo> findGroupInfoByGid(Integer gid);
/** /**
* 根据条件查询套餐不包含其他数据 * 根据条件查询套餐不包含其他数据
* @param map 查询条件 * @param map 查询条件

8
src/main/java/com/dreamchaser/depository_manage/mapper/GroupMapper.xml

@ -220,6 +220,14 @@
</if> </if>
</select> </select>
<select id="findGroupInfoByGid" resultMap="groupInfoMap" parameterType="int">
select
<include refid="allColumnsForView"/>
from materialforgroup
where gid = #{gid}
</select>
<select id="findGroupByGids" resultMap="groupMap" parameterType="list"> <select id="findGroupByGids" resultMap="groupMap" parameterType="list">
select select
<include refid="allColumnsForGroup"/> <include refid="allColumnsForGroup"/>

20
src/main/java/com/dreamchaser/depository_manage/service/GroupService.java

@ -3,6 +3,7 @@ package com.dreamchaser.depository_manage.service;
import com.dreamchaser.depository_manage.entity.Group; import com.dreamchaser.depository_manage.entity.Group;
import com.dreamchaser.depository_manage.entity.GroupInfo; import com.dreamchaser.depository_manage.entity.GroupInfo;
import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.pojo.GroupInfoP; import com.dreamchaser.depository_manage.pojo.GroupInfoP;
import java.util.List; import java.util.List;
@ -159,4 +160,23 @@ public interface GroupService {
* @return * @return
*/ */
List<Object> InitTreeMenus(String gname); List<Object> InitTreeMenus(String gname);
/**
* 插入一条出库记录
* @param map 具体数据
* @return
*/
Integer insertApplicationOutRecord(Map<String,Object> map, UserByPort userToken);
/**
* 根据套餐编号获取套餐具体信息
* @param gid 待查讯套餐编号
* @return
*/
List<GroupInfo> findGroupInfoByGid(Integer gid);
} }

157
src/main/java/com/dreamchaser/depository_manage/service/impl/GroupServiceImpl.java

@ -1,13 +1,21 @@
package com.dreamchaser.depository_manage.service.impl; package com.dreamchaser.depository_manage.service.impl;
import com.dreamchaser.depository_manage.entity.Group; import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.entity.GroupInfo; import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.mapper.DepositoryMapper;
import com.dreamchaser.depository_manage.mapper.DepositoryRecordMapper;
import com.dreamchaser.depository_manage.mapper.GroupMapper; import com.dreamchaser.depository_manage.mapper.GroupMapper;
import com.dreamchaser.depository_manage.mapper.MaterialMapper; import com.dreamchaser.depository_manage.mapper.MaterialMapper;
import com.dreamchaser.depository_manage.pojo.GroupInfoP; import com.dreamchaser.depository_manage.pojo.GroupInfoP;
import com.dreamchaser.depository_manage.service.GroupService; import com.dreamchaser.depository_manage.service.GroupService;
import com.dreamchaser.depository_manage.utils.DateUtil;
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil; import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import com.dreamchaser.depository_manage.utils.WordUtil;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -23,6 +31,19 @@ public class GroupServiceImpl implements GroupService {
@Autowired @Autowired
MaterialMapper materialMapper; MaterialMapper materialMapper;
@Autowired
DepositoryRecordMapper depositoryRecordMapper;
@Autowired
private RedissonClient redissonClient;
@Autowired
private RedisTemplate<String, String> redisTemplate;
@Autowired
DepositoryMapper depositoryMapper;
/** /**
* 用于查找所有套餐 * 用于查找所有套餐
* @return * @return
@ -437,6 +458,112 @@ public class GroupServiceImpl implements GroupService {
return list; return list;
} }
/**
* 插入一条出库记录
* @param map 具体数据
* @param userToken 出库申请人
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Integer insertApplicationOutRecord(Map<String, Object> map, UserByPort userToken) {
// 用于存储出库数据
Map<String,Object> paramForOut = new HashMap<>();
paramForOut.put("departmenthead",map.get("departmenthead"));
paramForOut.put("applicantId",userToken.getId());
// 获取当前要出库的套餐数量
Integer quantityForGroup = ObjectFormatUtil.toInteger(map.get("quantity"));
// 获取要出库的套餐
Integer gid = ObjectFormatUtil.toInteger(map.get("gid"));
// 获取要出库套餐的具体信息
List<GroupInfo> groupInfoByGid = groupMapper.findGroupInfoByGid(gid);
// 用于统计出库物料总数
Integer quantityForTotal = 0;
// 用于统计出库物料金额总数
double priceForTotal = 0;
for (GroupInfo groupInfo : groupInfoByGid) {
// 获取具体信息
// 获取当前物料库存信息
Map<String, Object> paramForMid = new HashMap<>();
paramForMid.put("mid", groupInfo.getMid());
List<Inventory> inventory = materialMapper.findInventory(paramForMid);
quantityForTotal += quantityForGroup * groupInfo.getQuantity();
priceForTotal += inventory.get(0).getPrice() * 100 * quantityForGroup;
}
paramForOut.put("quantity",quantityForTotal);
paramForOut.put("price",priceForTotal);
paramForOut.put("applicantTime",System.currentTimeMillis());
paramForOut.put("istransfer", 2);
paramForOut.put("state", "待部门负责人审核");
paramForOut.put("applyRemark", map.get("applyRemark"));
Administration company = LinkInterfaceUtil.getCompany(userToken.getMaindeparment(), userToken);
// 构造出库订单编码
String code = createOutCode( "outOrderNumber", company.getName());
paramForOut.put("code", code);
paramForOut.put("pass", 3);
Integer integer = depositoryRecordMapper.insertApplicationOutRecord(paramForOut);
Object parentId = paramForOut.get("id");
// 用于存储申请数
Integer result = 0;
// 获取当前部门仓库
List<Depository> depositoryByAdminorg = depositoryMapper.findDepositoryByAdminorg(userToken.getMaindeparment().toString());
for (GroupInfo groupInfo : groupInfoByGid) {
// 用于存储出库数据
Map<String,Object> paramForOutMin = new HashMap<>();
paramForOutMin.put("parentId", parentId);
// 套餐中的具体信息
// 实际要出库的物料库存数量
Integer quantity = groupInfo.getQuantity() * quantityForGroup;
// 实际出库的仓库编号
int did = -1;
// 实际出库的库存编号
int mid = -1;
// 用于查询各仓库中对应物料的库存
Map<String, Object> paramForInventory = new HashMap<>();
paramForInventory.put("mid", groupInfo.getMid());
// 查询各仓库中是否有符合对应数量的库存
for (Depository depository : depositoryByAdminorg) {
paramForInventory.put("did", depository.getId());
// 获取对应库存
Inventory inventoryByMidAndDid = materialMapper.findInventoryByMidAndDid(paramForInventory);
if (inventoryByMidAndDid.getQuantity() > quantity) {
// 如果当前库存充足
did = depository.getId();
mid = inventoryByMidAndDid.getId();
break;
}
}
if (did != -1) {
// 如果有正确的仓库
paramForOutMin.put("depositoryId", did);
paramForOutMin.put("mid",mid);
paramForOutMin.put("trueOut", 0);
paramForOutMin.put("quantity", quantity);
paramForOutMin.put("code", map.get("code"));
paramForOutMin.put("placeId", 0);
result += depositoryRecordMapper.insertApplicationOutRecordMin(paramForOutMin);
}else{
throw new MyException(groupInfo.getMname() + ",库存不足");
}
}
map.put("id",parentId);
return result;
}
/**
* 根据套餐编号获取套餐具体信息
* @param gid 待查讯套餐编号
* @return
*/
@Override
public List<GroupInfo> findGroupInfoByGid(Integer gid) {
return groupMapper.findGroupInfoByGid(gid);
}
// 用于执行线程任务 // 用于执行线程任务
class Task implements Callable<Object> { class Task implements Callable<Object> {
@ -563,4 +690,30 @@ public class GroupServiceImpl implements GroupService {
String code = "g-"+String.format("%05d", num + 1); String code = "g-"+String.format("%05d", num + 1);
return code; return code;
} }
/**
* 生成出库单号
* @return
*/
private String createOutCode( String key, String mainDeparmentName) {
RLock lock = redissonClient.getLock(key);
// 入库单号(公司简称+仓库简称+年月日+数字(位数设置>=9))
String code = "GK";
String nowTime = DateUtil.getNowTime();
lock.lock(5, TimeUnit.SECONDS);
String orderNumber = redisTemplate.opsForValue().get(key);
if (orderNumber == null) {
redisTemplate.opsForValue().set(key, "1", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
orderNumber = "1";
}
int newNumber = ObjectFormatUtil.toInteger(orderNumber) + 1;
redisTemplate.boundValueOps(key).set(String.valueOf(newNumber), DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
lock.unlock();
orderNumber = String.format("%09d", ObjectFormatUtil.toInteger(orderNumber));
mainDeparmentName = WordUtil.getPinYinHeadChar(mainDeparmentName);code = code + mainDeparmentName + nowTime + orderNumber;
return code;
}
} }

34
src/main/java/com/dreamchaser/depository_manage/utils/LinkInterfaceUtil.java

@ -219,4 +219,38 @@ public class LinkInterfaceUtil {
result.put("total", total); result.put("total", total);
return result; return result;
} }
/**
* 获取当前登录用户的部门负责人
* @param user
* @return
*/
public static List<UserByPort> findDepartmentHeadByUser(UserByPort user){
String url = PortConfig.external_url + "/staff/archiveslist";
Integer maindeparment = user.getMaindeparment();
Map<String,Object> 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<UserByPort> 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;
}
} }

122
src/main/resources/templates/pages/application/application-out.html

@ -205,10 +205,17 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">套餐数量:</label> <label class="layui-form-label">套餐数量:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="number" name="quantity" class="layui-input" id="quantityForGroup" <input type="number" name="quantity" class="layui-input" id="quantityForGroup" onblur="groupQuantityIsTrue(this)"
required lay-verify="number" placeholder="请填写套餐数量"/> required lay-verify="number" placeholder="请填写套餐数量"/>
</div> </div>
</div> </div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<input name="applyRemark" placeholder="请填写相关原因及申请原因" value=""
class="layui-input"/>
</div>
</div>
<i class="layui-icon layui-icon-addition" style="display: inline" <i class="layui-icon layui-icon-addition" style="display: inline"
id="addItemForGroup" id="addItemForGroup"
onclick="addItemForGroup(this)"></i> onclick="addItemForGroup(this)"></i>
@ -217,7 +224,7 @@
<!--提交按钮--> <!--提交按钮-->
<div class="layui-form-item" id="btn_sub2"> <div class="layui-form-item" id="btn_sub2">
<div class="layui-input-block"> <div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep2" <button class="layui-btn" lay-submit lay-filter="formStep2" type="button"
style="margin-bottom: 30px;margin-left: 15%"> style="margin-bottom: 30px;margin-left: 15%">
&emsp;提交&emsp; &emsp;提交&emsp;
</button> </button>
@ -302,6 +309,11 @@
function MaterialQuantityIsTrue() { function MaterialQuantityIsTrue() {
} }
// 用于判断当前套餐数量是否合适
function groupQuantityIsTrue() {
}
// 用于扫描条形码 // 用于扫描条形码
function scanBarCode() { function scanBarCode() {
} }
@ -354,7 +366,7 @@
}] }]
}); });
// 提交 // 提交(物料出库)
form.on('submit(formStep)', function (data) { form.on('submit(formStep)', function (data) {
data = data.field; data = data.field;
data.params = params; data.params = params;
@ -412,9 +424,60 @@
return false; return false;
}); });
// 提交(套餐出库)
form.on('submit(formStep2)', function (data) { 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 () { $('.pre').click(function () {
@ -541,7 +604,14 @@
<label class="layui-form-label">套餐数量:</label> <label class="layui-form-label">套餐数量:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="number" name=`+"quantity"+NewIdNumber+` class="layui-input" id=`+"quantityForGroup"+NewIdNumber+` <input type="number" name=`+"quantity"+NewIdNumber+` class="layui-input" id=`+"quantityForGroup"+NewIdNumber+`
required lay-verify="number" placeholder="请填写套餐数量"/> required lay-verify="number" onblur="groupQuantityIsTrue(this)" placeholder="请填写套餐数量"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<input name=`+"applyRemark"+NewIdNumber+` placeholder="请填写相关原因及申请原因" value=""
class="layui-input"/>
</div> </div>
</div> </div>
<i class="layui-icon layui-icon-addition" style="display: inline" id=` + "addItemForGroup" + NewIdNumber + ` <i class="layui-icon layui-icon-addition" style="display: inline" id=` + "addItemForGroup" + NewIdNumber + `
@ -552,9 +622,10 @@
// 获取当前高度 // 获取当前高度
var height = parseInt(($("#stepForm2").css('height')).split("px")[0]); var height = parseInt(($("#stepForm2").css('height')).split("px")[0]);
params2.push(NewIdNumber); params2.push(NewIdNumber);
$("#stepForm2").css("height", height + 236 + 'px'); $("#stepForm2").css("height", height + 289 + 'px');
$("#" + parentId).after(materialItem); $("#" + parentId).after(materialItem);
}; };
// 用于重新渲染页面(套餐) // 用于重新渲染页面(套餐)
CoverpageForGroup = function (num, obj) { CoverpageForGroup = function (num, obj) {
// 获取待添加父类 // 获取待添加父类
@ -637,7 +708,7 @@
reparent.removeChild(parent); reparent.removeChild(parent);
}; };
// 实现卡片删除 // 实现卡片删除(套餐)
deleteItemForGroup = function (obj) { deleteItemForGroup = function (obj) {
// 获取父节点 // 获取父节点
var parent = obj.parentNode; var parent = obj.parentNode;
@ -646,7 +717,7 @@
// 获取祖父节点 // 获取祖父节点
var reparent = parent.parentNode; var reparent = parent.parentNode;
var height = parseInt(($("#stepForm2").css('height')).split("px")[0]); var height = parseInt(($("#stepForm2").css('height')).split("px")[0]);
$("#stepForm2").css("height", height - 236 + 'px'); $("#stepForm2").css("height", height - 289 + 'px');
params2 = remove(params, parentId); params2 = remove(params, parentId);
reparent.removeChild(parent); reparent.removeChild(parent);
}; };
@ -1275,6 +1346,41 @@
$("#quantity" + id).val(""); $("#quantity" + id).val("");
}); });
}
}
});
}
}
};
//用于判断当前套餐数量是否合适
groupQuantityIsTrue = function (obj) {
var id = obj.id.split("quantityForGroup")[1];
var gid = $("#gid" + id).val(); // 获取到当前输入的物料编码
if (gid === "" || gid === undefined || gid === null) {
layer.msg("请输入正确的套餐!", {icon: 0, time: 500}, function () {
$("#quantityForGroup" + id).val("")
});
} else {
let val = $("#quantityForGroup" + id).val();
if (val !== null && val !== undefined && val !== '') {
var req = {};
req.gid = gid;
req.quantity = val;
$.ajax({
url: "/group/groupQuantityIsTrue",
type: "post",
data: JSON.stringify(req),
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (res) {
var flag = res.data;
if (!flag) { // 如果当前数目不合适
layer.msg("当前物料数量不足", {icon: 0, time: 500}, function () {
$("#quantity" + id).val("");
});
} }
} }
}); });

1
src/main/resources/templates/pages/other/welcome.html

@ -248,7 +248,6 @@
**/ **/
$('body').on('click', '.layuimini-myTask', function () { $('body').on('click', '.layuimini-myTask', function () {
var id = $(this).children('.layuimini-myTask-id').text(); var id = $(this).children('.layuimini-myTask-id').text();
console.log(id);
var type = $(this).children('.layuimini-myTask-type').text(); var type = $(this).children('.layuimini-myTask-type').text();
if(type === '出库请求'){ if(type === '出库请求'){
var index = layer.open({ var index = layer.open({

124
target/classes/templates/pages/application/application-out.html

@ -205,10 +205,17 @@
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">套餐数量:</label> <label class="layui-form-label">套餐数量:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="number" name="quantity" class="layui-input" id="quantityForGroup" <input type="number" name="quantity" class="layui-input" id="quantityForGroup" onblur="groupQuantityIsTrue(this)"
required lay-verify="number" placeholder="请填写套餐数量"/> required lay-verify="number" placeholder="请填写套餐数量"/>
</div> </div>
</div> </div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<input name="applyRemark" placeholder="请填写相关原因及申请原因" value=""
class="layui-input"/>
</div>
</div>
<i class="layui-icon layui-icon-addition" style="display: inline" <i class="layui-icon layui-icon-addition" style="display: inline"
id="addItemForGroup" id="addItemForGroup"
onclick="addItemForGroup(this)"></i> onclick="addItemForGroup(this)"></i>
@ -217,7 +224,7 @@
<!--提交按钮--> <!--提交按钮-->
<div class="layui-form-item" id="btn_sub2"> <div class="layui-form-item" id="btn_sub2">
<div class="layui-input-block"> <div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep2" <button class="layui-btn" lay-submit lay-filter="formStep2" type="button"
style="margin-bottom: 30px;margin-left: 15%"> style="margin-bottom: 30px;margin-left: 15%">
&emsp;提交&emsp; &emsp;提交&emsp;
</button> </button>
@ -302,6 +309,11 @@
function MaterialQuantityIsTrue() { function MaterialQuantityIsTrue() {
} }
// 用于判断当前套餐数量是否合适
function groupQuantityIsTrue() {
}
// 用于扫描条形码 // 用于扫描条形码
function scanBarCode() { function scanBarCode() {
} }
@ -354,7 +366,7 @@
}] }]
}); });
// 提交 // 提交(物料出库)
form.on('submit(formStep)', function (data) { form.on('submit(formStep)', function (data) {
data = data.field; data = data.field;
data.params = params; data.params = params;
@ -412,9 +424,60 @@
return false; return false;
}); });
// 提交(套餐出库)
form.on('submit(formStep2)', function (data) { 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 () { $('.pre').click(function () {
@ -541,7 +604,14 @@
<label class="layui-form-label">套餐数量:</label> <label class="layui-form-label">套餐数量:</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="number" name=`+"quantity"+NewIdNumber+` class="layui-input" id=`+"quantityForGroup"+NewIdNumber+` <input type="number" name=`+"quantity"+NewIdNumber+` class="layui-input" id=`+"quantityForGroup"+NewIdNumber+`
required lay-verify="number" placeholder="请填写套餐数量"/> required lay-verify="number" onblur="groupQuantityIsTrue(this)" placeholder="请填写套餐数量"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<input name=`+"applyRemark"+NewIdNumber+` placeholder="请填写相关原因及申请原因" value=""
class="layui-input"/>
</div> </div>
</div> </div>
<i class="layui-icon layui-icon-addition" style="display: inline" id=` + "addItemForGroup" + NewIdNumber + ` <i class="layui-icon layui-icon-addition" style="display: inline" id=` + "addItemForGroup" + NewIdNumber + `
@ -552,9 +622,10 @@
// 获取当前高度 // 获取当前高度
var height = parseInt(($("#stepForm2").css('height')).split("px")[0]); var height = parseInt(($("#stepForm2").css('height')).split("px")[0]);
params2.push(NewIdNumber); params2.push(NewIdNumber);
$("#stepForm2").css("height", height + 236 + 'px'); $("#stepForm2").css("height", height + 289 + 'px');
$("#" + parentId).after(materialItem); $("#" + parentId).after(materialItem);
}; };
// 用于重新渲染页面(套餐) // 用于重新渲染页面(套餐)
CoverpageForGroup = function (num, obj) { CoverpageForGroup = function (num, obj) {
// 获取待添加父类 // 获取待添加父类
@ -637,7 +708,7 @@
reparent.removeChild(parent); reparent.removeChild(parent);
}; };
// 实现卡片删除 // 实现卡片删除(套餐)
deleteItemForGroup = function (obj) { deleteItemForGroup = function (obj) {
// 获取父节点 // 获取父节点
var parent = obj.parentNode; var parent = obj.parentNode;
@ -646,7 +717,7 @@
// 获取祖父节点 // 获取祖父节点
var reparent = parent.parentNode; var reparent = parent.parentNode;
var height = parseInt(($("#stepForm2").css('height')).split("px")[0]); var height = parseInt(($("#stepForm2").css('height')).split("px")[0]);
$("#stepForm2").css("height", height - 236 + 'px'); $("#stepForm2").css("height", height - 289 + 'px');
params2 = remove(params, parentId); params2 = remove(params, parentId);
reparent.removeChild(parent); reparent.removeChild(parent);
}; };
@ -734,7 +805,6 @@
}); });
}; };
// 用于实现通过编码查询套餐 // 用于实现通过编码查询套餐
selectCodeForGroup = function (obj) { selectCodeForGroup = function (obj) {
// 输入code // 输入code
@ -1248,6 +1318,7 @@
} }
}) })
}; };
//用于判断当前物料数量是否合适 //用于判断当前物料数量是否合适
MaterialQuantityIsTrue = function (obj) { MaterialQuantityIsTrue = function (obj) {
var id = obj.id.split("quantity")[1]; var id = obj.id.split("quantity")[1];
@ -1275,6 +1346,41 @@
$("#quantity" + id).val(""); $("#quantity" + id).val("");
}); });
}
}
});
}
}
};
//用于判断当前套餐数量是否合适
groupQuantityIsTrue = function (obj) {
var id = obj.id.split("quantityForGroup")[1];
var gid = $("#gid" + id).val(); // 获取到当前输入的物料编码
if (gid === "" || gid === undefined || gid === null) {
layer.msg("请输入正确的套餐!", {icon: 0, time: 500}, function () {
$("#quantityForGroup" + id).val("")
});
} else {
let val = $("#quantityForGroup" + id).val();
if (val !== null && val !== undefined && val !== '') {
var req = {};
req.gid = gid;
req.quantity = val;
$.ajax({
url: "/group/groupQuantityIsTrue",
type: "post",
data: JSON.stringify(req),
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (res) {
var flag = res.data;
if (!flag) { // 如果当前数目不合适
layer.msg("当前物料数量不足", {icon: 0, time: 500}, function () {
$("#quantity" + id).val("");
});
} }
} }
}); });

1
target/classes/templates/pages/other/welcome.html

@ -248,7 +248,6 @@
**/ **/
$('body').on('click', '.layuimini-myTask', function () { $('body').on('click', '.layuimini-myTask', function () {
var id = $(this).children('.layuimini-myTask-id').text(); var id = $(this).children('.layuimini-myTask-id').text();
console.log(id);
var type = $(this).children('.layuimini-myTask-type').text(); var type = $(this).children('.layuimini-myTask-type').text();
if(type === '出库请求'){ if(type === '出库请求'){
var index = layer.open({ var index = layer.open({

Loading…
Cancel
Save