Browse Source

修改出库申请审批流程,将仓库管理员也接入审批中

lwx_dev
erdanergou 3 years ago
parent
commit
54ad17ae3e
  1. 6
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  2. 3
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  3. 70
      src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java
  4. 2
      src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java
  5. 23
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  6. 53
      src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java
  7. 2
      src/main/resources/templates/pages/application/application-out.html
  8. 3
      src/main/resources/templates/pages/depository/table-stock.html
  9. 8
      src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html
  10. 11
      src/test/java/com/dreamchaser/depository_manage/TestOther.java

6
src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java

@ -1247,16 +1247,16 @@ public class MaterialController {
MaterialAndBarCode materialByBarCode = materialService.findMaterialByBarCode(barCode); MaterialAndBarCode materialByBarCode = materialService.findMaterialByBarCode(barCode);
if (materialByBarCode != null) { if (materialByBarCode != null) {
List<PlaceP> placePList = new ArrayList<>(); List<PlaceP> placePList = new ArrayList<>();
for (int j = 0; j < depositoryByAdminorg.size(); j++) { for (Depository depository : depositoryByAdminorg) {
Boolean isExist = false; Boolean isExist = false;
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("depositoryId", depositoryByAdminorg.get(j).getId()); param.put("depositoryId", depository.getId());
param.put("mid", materialByBarCode.getMid()); param.put("mid", materialByBarCode.getMid());
List<InventoryP> inventory = materialService.findInventory(param); List<InventoryP> inventory = materialService.findInventory(param);
if (inventory.size() > 0) { if (inventory.size() > 0) {
// 如果存在该物料 // 如果存在该物料
InventoryP inventoryP = inventory.get(0); InventoryP inventoryP = inventory.get(0);
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(inventoryP.getId(), depositoryByAdminorg.get(j).getId()); List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(inventoryP.getId(), depository.getId());
materialByBarCode.setIid(inventoryP.getId()); materialByBarCode.setIid(inventoryP.getId());
placePList.addAll(placeByMidAndDid); placePList.addAll(placeByMidAndDid);
isExist = true; isExist = true;

3
src/main/java/com/dreamchaser/depository_manage/controller/PageController.java

@ -2099,8 +2099,7 @@ public class PageController {
// 获取当前库位中存储的物料 // 获取当前库位中存储的物料
List<MaterialAndPlace> placeAndMaterialByPid = placeService.findPlaceAndMaterialByPid(pid); List<MaterialAndPlace> placeAndMaterialByPid = placeService.findPlaceAndMaterialByPid(pid);
for (int i = 0; i < placeAndMaterialByPid.size(); i++) { for (MaterialAndPlace materialAndPlace : placeAndMaterialByPid) {
MaterialAndPlace materialAndPlace = placeAndMaterialByPid.get(i);
midList.add(materialAndPlace.getMid()); midList.add(materialAndPlace.getMid());
} }

70
src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java

@ -8,10 +8,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.CallBackLog;
import com.dreamchaser.depository_manage.entity.UserByPort; import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.pojo.RestResponse; import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalCallBackInfo; import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.*;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_SpRecord;
import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard; import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool; import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.security.pool.UserKeyAndTokenPool; import com.dreamchaser.depository_manage.security.pool.UserKeyAndTokenPool;
@ -532,19 +529,23 @@ public class QyWxOperationController {
ApprovalInfo_Details approvalInfo_details = null; ApprovalInfo_Details approvalInfo_details = null;
// 定义当前流程审批时间 // 定义当前流程审批时间
String as_SpTime = ""; String as_SpTime = "";
// 定义当前审批流程是是否为第一个节点 // 定义当前审批流程是是否要通过仓储中心
boolean flagForFirst = spRecord_list.size() > 1; // 当审批节点大于1时默认是第一个 boolean flagForFirst = true; // 默认通过
// 设置当前审批是否为仓库管理员(1为部门负责人,2为仓储中心,3为仓库管理员)
int flagForDepository = 1; // 默认为部门负责人
// 定义已完成审批的节点数
int approval_count = 0;
// 获取审批申请状态变化类型:1-提单;2-同意;3-驳回;4-转审;5-催办;6-撤销;8-通过后撤销;10-添加备注 // 获取审批申请状态变化类型:1-提单;2-同意;3-驳回;4-转审;5-催办;6-撤销;8-通过后撤销;10-添加备注
String spStatus = approvalInfo.getStatuChangeEvent(); String spStatus = approvalInfo.getStatuChangeEvent();
for (ApprovalInfo_SpRecord approvalInfo_SpRecord : spRecord_list) { for (ApprovalInfo_SpRecord approvalInfo_SpRecord : spRecord_list) {
// 获取当前审批节点详情。当节点为标签或上级时,一个节点可能有多个分支 // 获取当前审批节点详情。当节点为标签或上级时,一个节点可能有多个分支
List<ApprovalInfo_Details> details = approvalInfo_SpRecord.getDetails(); List<ApprovalInfo_Details> details = approvalInfo_SpRecord.getDetails();
// 定义审批操作时间 // 定义审批操作时间
String spTime = ""; String spTime = "";
// 定义审批操作状态 // 定义审批操作状态
@ -552,17 +553,20 @@ public class QyWxOperationController {
// 定义审批详情 // 定义审批详情
ApprovalInfo_Details ap_detail = null; ApprovalInfo_Details ap_detail = null;
for (ApprovalInfo_Details ad : details) { for (ApprovalInfo_Details ad : details) {
// 获取节点分支审批人审批操作时间,0为尚未操作 // 获取节点分支审批人审批操作时间,0为尚未操作
spTime = ad.getSpTime(); spTime = ad.getSpTime();
// 如果当前审批人暂未处理
// 如果当前审批节点已经处理
if (!("0".equals(spTime))) { if (!("0".equals(spTime))) {
// 设置当前处理的详情 // 设置当前处理的详情
ap_detail = ad; ap_detail = ad;
// 设置当前审批的状态 // 设置当前审批的状态
ad_SpStatus = ad.getSpStatus(); ad_SpStatus = ad.getSpStatus();
// 已审批节点数+1
approval_count++;
break; break;
} }
} }
@ -601,6 +605,49 @@ public class QyWxOperationController {
} }
} }
// 获取第二个节点数据
ApprovalInfo_SpRecord approvalInfo_spRecord = spRecord_list.get(1);
// 获取第二个节点中审批人信息
List<ApprovalInfo_Details> details = approvalInfo_spRecord.getDetails();
// 获取仓储中心负责人标签下的成员
List<String> qyWxLabelUserList = QyWxConfig.getQyWxLabelUserList(crypt);
// 定义当前是否为标签
boolean flagForLabel = true; // 默认为标签
if (details.size() != qyWxLabelUserList.size()) {
// 如果节点数目不等于标签人员数
flagForLabel = false;
} else {
for (ApprovalInfo_Details ad : details
) {
// 获取当前节点审批人userId
String approver = ad.getApprover().getUserId();
flagForLabel = flagForLabel && qyWxLabelUserList.contains(approver);
}
}
if (!flagForLabel) {
// 如果第二个节点不是标签节点
if(approval_count > 1){
// 如果完成审批的节点数大于1
flagForDepository = 3;
}else{
// 如果当前是第一个节点
flagForFirst = false;
}
} else {
// 如果第二个节点是标签节点
if(approval_count > 2){
// 如果完成审批的节点数大于2
flagForDepository = 3;
}else{
// 如果当前并不是标签节点后
flagForDepository = 2;
}
}
// 1-审批中;2-已同意;3-已驳回;4-已转审 // 1-审批中;2-已同意;3-已驳回;4-已转审
if (!("1".equals(spStatus))) { if (!("1".equals(spStatus))) {
@ -611,10 +658,11 @@ public class QyWxOperationController {
// 开启一个线程用于进行处理 // 开启一个线程用于进行处理
ApprovalInfo_Details finalApprovalInfo_details = approvalInfo_details; ApprovalInfo_Details finalApprovalInfo_details = approvalInfo_details;
boolean finalFlagForFirst = flagForFirst; boolean finalFlagForFirst = flagForFirst;
int finalFlagForDepository = flagForDepository;
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
depositoryRecordService.reviewByQyWxApproval(mainId, finalApprovalInfo_details, crypt, spStatus, approvalInfo.getSpNo(), finalFlagForFirst); depositoryRecordService.reviewByQyWxApproval(mainId, finalApprovalInfo_details, crypt, spStatus, approvalInfo.getSpNo(), finalFlagForFirst, finalFlagForDepository);
} }
}).start(); }).start();

2
src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java

@ -430,7 +430,7 @@ public interface DepositoryRecordService {
* @param flagForFirst 用于标志是否为第一次审批 * @param flagForFirst 用于标志是否为第一次审批
* @return * @return
*/ */
Integer reviewByQyWxApproval(String mainId, ApprovalInfo_Details approvalInfo_details, String userAgent,String spStatus,String spNo,boolean flagForFirst); Integer reviewByQyWxApproval(String mainId, ApprovalInfo_Details approvalInfo_details, String userAgent,String spStatus,String spNo,boolean flagForFirst,int flagForDepository);
/** /**
* 判断当前出库记录运行状态否可以直接删除 * 判断当前出库记录运行状态否可以直接删除

23
src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java

@ -1713,7 +1713,12 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
* @return * @return
*/ */
@Override @Override
public Integer reviewByQyWxApproval(String mainId, ApprovalInfo_Details approvalInfo_details, String userAgent, String spStatus, String spNo, boolean flagForFirst) { public Integer reviewByQyWxApproval(String mainId, ApprovalInfo_Details approvalInfo_details, String userAgent, String spStatus, String spNo, boolean flagForFirst, int flagForDepository) {
if(flagForDepository == 3){
// 如果是仓库管理员审批,直接返回
return 0;
}
// 用于更新订单 // 用于更新订单
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
@ -1838,7 +1843,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}).start(); }).start();
} }
for (Integer integer : depositoryIdList) { /*for (Integer integer : depositoryIdList) {
Object o = minIdByDepository.get("depository" + integer); Object o = minIdByDepository.get("depository" + integer);
if (o != null) { if (o != null) {
List<Integer> minIdList = (List<Integer>) o; List<Integer> minIdList = (List<Integer>) o;
@ -1857,7 +1862,6 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
for (int j = 0; j < minIdList.size(); j++) { for (int j = 0; j < minIdList.size(); j++) {
sb.append(minIdList.get(j)).append(","); sb.append(minIdList.get(j)).append(",");
} }
QyWxApprovalMap.put("sp_no", sp_no); QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("minIdList", sb.toString()); QyWxApprovalMap.put("minIdList", sb.toString());
redisTemplate.opsForHash().putAll("wms_out_" + recordP.getId(), QyWxApprovalMap); redisTemplate.opsForHash().putAll("wms_out_" + recordP.getId(), QyWxApprovalMap);
@ -1866,7 +1870,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
} else { } else {
continue; continue;
} }
} }*/
// 将主订单插入到redis中 // 将主订单插入到redis中
redisTemplate.opsForHash().put("record:" + recordP.getId(), "minRecord", minRecordByMain.toString()); redisTemplate.opsForHash().put("record:" + recordP.getId(), "minRecord", minRecordByMain.toString());
@ -1879,8 +1883,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("departmentheadPass", 1); map.put("departmentheadPass", 1);
} }
} } else {
else {
// 如果是不通过 // 如果是不通过
updateInventoryForOutRefused(recordP); updateInventoryForOutRefused(recordP);
map.put("depositoryManagerPass", 2); map.put("depositoryManagerPass", 2);
@ -1939,9 +1942,11 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
if (flag) { if (flag) {
return 1; return 1;
} }
map.put("id", outId); map.put("id", outId);
return depositoryRecordMapper.updateApplicationOutRecord(map); return depositoryRecordMapper.updateApplicationOutRecord(map);
} }
/** /**
@ -2178,8 +2183,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(id), s, userAgent, 1); qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(id), s, userAgent, 1);
} }
}).start(); }).start();
} } else {
else {
String result = ""; String result = "";
// 开启线程更改其他用户卡片模板样式 // 开启线程更改其他用户卡片模板样式
String simpleTime = DateUtil.getSimpleTime(new Date()); String simpleTime = DateUtil.getSimpleTime(new Date());
@ -2335,8 +2339,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime)); map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("depositoryManagerTime", "0"); map.put("depositoryManagerTime", "0");
} }
} } else {
else {
updateInventoryForOutRefused(record); updateInventoryForOutRefused(record);
result = "驳回"; result = "驳回";
map.put("pass", 2); map.put("pass", 2);

53
src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java

@ -20,10 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service @Service
@ -55,6 +52,9 @@ public class QyWxOperationService {
@Autowired @Autowired
NoticeMapper noticeMapper; NoticeMapper noticeMapper;
@Autowired
RoleMapper roleMapper;
/** /**
* 用于向企业微信发送出库消息 * 用于向企业微信发送出库消息
@ -1433,7 +1433,8 @@ public class QyWxOperationService {
// 获取当前部门信息 // 获取当前部门信息
qywxDepartment qyWxDepartment = QyWxConfig.getQyWxDepartment(userAgent, portByQyWxInteger); qywxDepartment qyWxDepartment = QyWxConfig.getQyWxDepartment(userAgent, portByQyWxInteger);
// 获取部门负责人id列表 // 获取部门负责人id列表
List<String> userIdList = new ArrayList<>(qyWxDepartment.getDepartment_leader()); // List<String> userIdList = new ArrayList<>(qyWxDepartment.getDepartment_leader());
List<String> userIdList = new ArrayList<String>(Collections.singleton("PangFuZhen"));
approval_template_approver_departMentHeader.setUserid(userIdList); approval_template_approver_departMentHeader.setUserid(userIdList);
@ -1527,15 +1528,25 @@ public class QyWxOperationService {
// 设置标志位,用于标志是否全为办公用品库或消防用品库 // 设置标志位,用于标志是否全为办公用品库或消防用品库
boolean flag = true; boolean flag = true;
// 定义仓库Id列表
List<Integer> depositoryIdList = new ArrayList<>();
for (ApplicationOutRecordMin recordMin : minRecordList) { for (ApplicationOutRecordMin recordMin : minRecordList) {
// 获取明细信息 // 获取明细信息
// 获取当前出库物料 // 获取当前出库物料
Inventory materialById = materialMapper.findInventoryById(recordMin.getMid()); Inventory materialById = materialMapper.findInventoryById(recordMin.getMid());
// 获取当前物料所在仓库 // 获取当前物料所在仓库
Depository depositoryById = depositoryMapper.findDepositoryById(recordMin.getDepositoryId()); Integer depositoryId = recordMin.getDepositoryId();
Depository depositoryById = depositoryMapper.findDepositoryById(depositoryId);
if (!depositoryIdList.contains(depositoryId)) {
// 如果当前仓库列表中不存在该仓库id
depositoryIdList.add(depositoryId);
}
Map<String, Object> detail_list = new HashMap<>(); Map<String, Object> detail_list = new HashMap<>();
// 定义明细种的控件列表 // 定义明细种的控件列表
List<Object> detail_list_control = new ArrayList<>(); List<Object> detail_list_control = new ArrayList<>();
@ -1730,7 +1741,7 @@ public class QyWxOperationService {
// 获取仓储中心负责人标签的用户userId // 获取仓储中心负责人标签的用户userId
List<String> qyWxLabelUserList = QyWxConfig.getQyWxLabelUserList(userAgent); List<String> qyWxLabelUserList = QyWxConfig.getQyWxLabelUserList(userAgent);
// 用于设置部门负责人流程 // 用于设置仓储中心负责人流程
Approval_template_approver approval_template_approver_Label = new Approval_template_approver(); Approval_template_approver approval_template_approver_Label = new Approval_template_approver();
approval_template_approver_Label.setAttr(1); approval_template_approver_Label.setAttr(1);
approval_template_approver_Label.setUserid(qyWxLabelUserList); approval_template_approver_Label.setUserid(qyWxLabelUserList);
@ -1739,6 +1750,33 @@ public class QyWxOperationService {
} }
for (Integer depositoryId : depositoryIdList
) {
// 获取当前仓库的管理员列表
List<Integer> userIdByDid = roleMapper.findUserIdByDid(depositoryId);
// 获取当前管理员的企业微信userId
List<String> qywxUserIdList = new ArrayList<>();
for (Integer userId : userIdByDid
) {
// 获取对应管理员信息
UserByPort userByPort = LinkInterfaceUtil.FindUserById(userId, userToken);
String user = userByPort.getWorkwechat();
if (user == null || "".equals(user)) {
user = userByPort.getWechat();
}
qywxUserIdList.add(user);
}
// 用于设置仓库管理员流程
Approval_template_approver approval_template_approver_depository_manager = new Approval_template_approver();
approval_template_approver_depository_manager.setAttr(1);
approval_template_approver_depository_manager.setUserid(qywxUserIdList);
approval_template_approver_list.add(approval_template_approver_depository_manager);
}
// 设置审批流程 // 设置审批流程
approvalTemplate.setApprover(approval_template_approver_list); approvalTemplate.setApprover(approval_template_approver_list);
@ -2531,6 +2569,7 @@ public class QyWxOperationService {
/** /**
* 用于向企业中所有用户发送公告信息 * 用于向企业中所有用户发送公告信息
*
* @param nid 公告id * @param nid 公告id
* @param userAgent md5加密后user-agent * @param userAgent md5加密后user-agent
* @return * @return

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

@ -1311,7 +1311,7 @@
var idNumber = materialId.name.split("mid")[1]; var idNumber = materialId.name.split("mid")[1];
var unit = $("#unit" + idNumber); var unit = $("#unit" + idNumber);
unit.empty(); unit.empty();
$("#unit" + idNumber).append(new Option(data.baseUnit, "-1")); $("#unit" + idNumber).append(new Option(data.unit, "-1"));
var unitList = data["splitInfoList"]; var unitList = data["splitInfoList"];
for (let i = 0; i < unitList.length; i++) { for (let i = 0; i < unitList.length; i++) {
$("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit)); $("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit));

3
src/main/resources/templates/pages/depository/table-stock.html

@ -108,7 +108,7 @@
area: ['70%', '70%'], area: ['70%', '70%'],
move: '.layui-layer-title', move: '.layui-layer-title',
fixed: false, fixed: false,
content: '/selectDepository?type=2', content: '/selectDepository?type=1',
success: function (layero, index) { success: function (layero, index) {
var children = layero.children(); var children = layero.children();
var content = $(children[1]); var content = $(children[1]);
@ -119,6 +119,7 @@
}); });
}); });
table.render({ table.render({
elem: "#currentTableId", elem: "#currentTableId",
url: '/material/findInventory', url: '/material/findInventory',

8
src/main/resources/templates/pages/scanQrCode/ScanBarOrQrCodeOut.html

@ -54,7 +54,13 @@
var barCode = null; var barCode = null;
layui.$(function () { layui.$(function () {
parent.parent.parent.wx.scanQRCode({ let wxScan = parent.parent.parent;
if(wxScan.wx !== undefined){
wxScan = wxScan.wx;
}else{
wxScan = wxScan.parent.wx;
}
wxScan.scanQRCode({
desc: 'scanQRCode desc', desc: 'scanQRCode desc',
needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
scanType: ["barCode", "qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 scanType: ["barCode", "qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有

11
src/test/java/com/dreamchaser/depository_manage/TestOther.java

@ -14,17 +14,20 @@ import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Random;
@SpringBootTest @SpringBootTest
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
public class TestOther { public class TestOther {
@Autowired
QyWxOperationService qyWxOperationService;
@Test @Test
public void Test() { public void Test() {
System.out.println(System.currentTimeMillis()); ArrayList<String> list = new ArrayList<String>();
list.add("PangFuZhen");
list.add("KaiXinGuo");
list.add("WoBenShanLiang_3");
System.out.println(list.contains("PangFuZhen"));
System.out.println(list.contains("PangFuZhen1"));
} }
} }

Loading…
Cancel
Save