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. 79
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  6. 65
      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);
if (materialByBarCode != null) {
List<PlaceP> placePList = new ArrayList<>();
for (int j = 0; j < depositoryByAdminorg.size(); j++) {
for (Depository depository : depositoryByAdminorg) {
Boolean isExist = false;
Map<String, Object> param = new HashMap<>();
param.put("depositoryId", depositoryByAdminorg.get(j).getId());
param.put("depositoryId", depository.getId());
param.put("mid", materialByBarCode.getMid());
List<InventoryP> inventory = materialService.findInventory(param);
if (inventory.size() > 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());
placePList.addAll(placeByMidAndDid);
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);
for (int i = 0; i < placeAndMaterialByPid.size(); i++) {
MaterialAndPlace materialAndPlace = placeAndMaterialByPid.get(i);
for (MaterialAndPlace materialAndPlace : placeAndMaterialByPid) {
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.UserByPort;
import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalCallBackInfo;
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.approvalCallBackXml.*;
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.UserKeyAndTokenPool;
@ -532,19 +529,23 @@ public class QyWxOperationController {
ApprovalInfo_Details approvalInfo_details = null;
// 定义当前流程审批时间
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-添加备注
String spStatus = approvalInfo.getStatuChangeEvent();
for (ApprovalInfo_SpRecord approvalInfo_SpRecord : spRecord_list) {
// 获取当前审批节点详情。当节点为标签或上级时,一个节点可能有多个分支
List<ApprovalInfo_Details> details = approvalInfo_SpRecord.getDetails();
// 定义审批操作时间
String spTime = "";
// 定义审批操作状态
@ -552,17 +553,20 @@ public class QyWxOperationController {
// 定义审批详情
ApprovalInfo_Details ap_detail = null;
for (ApprovalInfo_Details ad : details) {
// 获取节点分支审批人审批操作时间,0为尚未操作
spTime = ad.getSpTime();
// 如果当前审批人暂未处理
// 如果当前审批节点已经处理
if (!("0".equals(spTime))) {
// 设置当前处理的详情
ap_detail = ad;
// 设置当前审批的状态
ad_SpStatus = ad.getSpStatus();
// 已审批节点数+1
approval_count++;
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-已转审
if (!("1".equals(spStatus))) {
@ -611,10 +658,11 @@ public class QyWxOperationController {
// 开启一个线程用于进行处理
ApprovalInfo_Details finalApprovalInfo_details = approvalInfo_details;
boolean finalFlagForFirst = flagForFirst;
int finalFlagForDepository = flagForDepository;
new Thread(new Runnable() {
@Override
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();

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

@ -430,7 +430,7 @@ public interface DepositoryRecordService {
* @param flagForFirst 用于标志是否为第一次审批
* @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);
/**
* 判断当前出库记录运行状态否可以直接删除

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

@ -1687,7 +1687,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}
StringBuilder depositoryManagerByQyWx = new StringBuilder();
for (String s : depositoryManagers) {
if("".equals(s)){
if ("".equals(s)) {
continue;
}
Integer uid = ObjectFormatUtil.toInteger(s);
@ -1713,7 +1713,12 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
* @return
*/
@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<>();
@ -1838,35 +1843,34 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}).start();
}
for (Integer integer : depositoryIdList) {
Object o = minIdByDepository.get("depository" + integer);
if (o != null) {
List<Integer> minIdList = (List<Integer>) o;
List<Integer> userIdByDid = roleService.findUserIdByDid(integer);
StringBuilder QyWxUid = new StringBuilder();
for (Integer value : userIdByDid) {
UserByPort manager = LinkInterfaceUtil.FindUserById(value, userByPort);
/*for (Integer integer : depositoryIdList) {
Object o = minIdByDepository.get("depository" + integer);
if (o != null) {
List<Integer> minIdList = (List<Integer>) o;
List<Integer> userIdByDid = roleService.findUserIdByDid(integer);
StringBuilder QyWxUid = new StringBuilder();
for (Integer value : userIdByDid) {
UserByPort manager = LinkInterfaceUtil.FindUserById(value, userByPort);
// QyWxUid.append(manager.getWorkwechat()+",");
}
QyWxUid.append("PangFuZhen,");
// 根据仓库向仓库管理员发送审批
JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplateOut(userAgent, userByPort, ObjectFormatUtil.toInteger(mainId), minIdList, QyWxUid.toString());
String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>();
StringBuilder sb = new StringBuilder();
for (int j = 0; j < minIdList.size(); j++) {
sb.append(minIdList.get(j)).append(",");
}
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("minIdList", sb.toString());
redisTemplate.opsForHash().putAll("wms_out_" + recordP.getId(), QyWxApprovalMap);
// 设置过期时间为7天
redisTemplate.expire("wms_out_" + recordP.getId(), 7, TimeUnit.DAYS);
} else {
continue;
}
QyWxUid.append("PangFuZhen,");
// 根据仓库向仓库管理员发送审批
JSONObject jsonObject = qyWxOperationService.sendOutApprovalTemplateOut(userAgent, userByPort, ObjectFormatUtil.toInteger(mainId), minIdList, QyWxUid.toString());
String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>();
StringBuilder sb = new StringBuilder();
for (int j = 0; j < minIdList.size(); j++) {
sb.append(minIdList.get(j)).append(",");
}
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("minIdList", sb.toString());
redisTemplate.opsForHash().putAll("wms_out_" + recordP.getId(), QyWxApprovalMap);
// 设置过期时间为7天
redisTemplate.expire("wms_out_" + recordP.getId(), 7, TimeUnit.DAYS);
} else {
continue;
}
}
}*/
// 将主订单插入到redis中
redisTemplate.opsForHash().put("record:" + recordP.getId(), "minRecord", minRecordByMain.toString());
@ -1879,8 +1883,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("departmentheadPass", 1);
}
}
else {
} else {
// 如果是不通过
updateInventoryForOutRefused(recordP);
map.put("depositoryManagerPass", 2);
@ -1891,7 +1894,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("state", "部门负责人审核未通过");
map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("departmenthead", userByPort.getId());
map.put("depositoryManagerTime","0");
map.put("depositoryManagerTime", "0");
}
}
// 将当前redis中存储的spno删除
@ -1939,9 +1942,11 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
if (flag) {
return 1;
}
map.put("id", outId);
return depositoryRecordMapper.updateApplicationOutRecord(map);
}
/**
@ -2178,8 +2183,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(id), s, userAgent, 1);
}
}).start();
}
else {
} else {
String result = "";
// 开启线程更改其他用户卡片模板样式
String simpleTime = DateUtil.getSimpleTime(new Date());
@ -2328,20 +2332,19 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 将主订单插入到redis中
redisTemplate.opsForHash().put("record:" + record.getId(), "minRecord", minRecordByMain.toString());
map.put("state", "仓储中心负责人审核通过");
if(!flagForHasOtherDepository){
if (!flagForHasOtherDepository) {
map.put("state", "部门负责人审核通过");
map.put("departmenthead", userid);
map.put("departmentheadPass", 1);
map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("depositoryManagerTime", "0");
}
}
else {
} else {
updateInventoryForOutRefused(record);
result = "驳回";
map.put("pass", 2);
map.put("state", "仓储中心负责人审核未通过");
if(!flagForHasOtherDepository){
if (!flagForHasOtherDepository) {
map.put("state", "部门负责人审核未通过");
map.put("departmenthead", userid);
map.put("departmentheadPass", 2);

65
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.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@Service
@ -55,6 +52,9 @@ public class QyWxOperationService {
@Autowired
NoticeMapper noticeMapper;
@Autowired
RoleMapper roleMapper;
/**
* 用于向企业微信发送出库消息
@ -1433,7 +1433,8 @@ public class QyWxOperationService {
// 获取当前部门信息
qywxDepartment qyWxDepartment = QyWxConfig.getQyWxDepartment(userAgent, portByQyWxInteger);
// 获取部门负责人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);
@ -1527,15 +1528,25 @@ public class QyWxOperationService {
// 设置标志位,用于标志是否全为办公用品库或消防用品库
boolean flag = true;
// 定义仓库Id列表
List<Integer> depositoryIdList = new ArrayList<>();
for (ApplicationOutRecordMin recordMin : minRecordList) {
// 获取明细信息
// 获取当前出库物料
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<>();
// 定义明细种的控件列表
List<Object> detail_list_control = new ArrayList<>();
@ -1730,7 +1741,7 @@ public class QyWxOperationService {
// 获取仓储中心负责人标签的用户userId
List<String> qyWxLabelUserList = QyWxConfig.getQyWxLabelUserList(userAgent);
// 用于设置部门负责人流程
// 用于设置仓储中心负责人流程
Approval_template_approver approval_template_approver_Label = new Approval_template_approver();
approval_template_approver_Label.setAttr(1);
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);
@ -2531,11 +2569,12 @@ public class QyWxOperationService {
/**
* 用于向企业中所有用户发送公告信息
* @param nid 公告id
*
* @param nid 公告id
* @param userAgent md5加密后user-agent
* @return
*/
public JSONObject sendNoticeForAllUser(Integer nid,String userAgent){
public JSONObject sendNoticeForAllUser(Integer nid, String userAgent) {
// 获取当前要发生的公告信息
Notice noticeById = noticeMapper.findNoticeById(nid);
TextTemplateCard textTemplateCard = new TextTemplateCard();
@ -2552,13 +2591,13 @@ public class QyWxOperationService {
TextCardContent textCardContent = new TextCardContent();
// 设置标题
textCardContent.setTitle(noticeById.getTitle());
String noticeContent = "<div class='gray'>"+DateUtil.TimeStampToDateTime(noticeById.getTime())+
"</div><div class='normal'>"+noticeById.getContent()+"</div><div class='highlight'>"+
LinkInterfaceUtil.FindUserById(noticeById.getUserId(),null).getName()+"</div>";
String noticeContent = "<div class='gray'>" + DateUtil.TimeStampToDateTime(noticeById.getTime()) +
"</div><div class='normal'>" + noticeById.getContent() + "</div><div class='highlight'>" +
LinkInterfaceUtil.FindUserById(noticeById.getUserId(), null).getName() + "</div>";
// 设置内容
textCardContent.setDescription(noticeContent);
// 设置点击后跳转的链接
textCardContent.setUrl("https://jy.hxgk.group/noticeView?id="+noticeById.getId());
textCardContent.setUrl("https://jy.hxgk.group/noticeView?id=" + noticeById.getId());
// 设置跳转按钮文本
textCardContent.setBtntxt("详情");

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

@ -1311,7 +1311,7 @@
var idNumber = materialId.name.split("mid")[1];
var unit = $("#unit" + idNumber);
unit.empty();
$("#unit" + idNumber).append(new Option(data.baseUnit, "-1"));
$("#unit" + idNumber).append(new Option(data.unit, "-1"));
var unitList = data["splitInfoList"];
for (let i = 0; i < unitList.length; i++) {
$("#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%'],
move: '.layui-layer-title',
fixed: false,
content: '/selectDepository?type=2',
content: '/selectDepository?type=1',
success: function (layero, index) {
var children = layero.children();
var content = $(children[1]);
@ -119,6 +119,7 @@
});
});
table.render({
elem: "#currentTableId",
url: '/material/findInventory',

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

@ -54,7 +54,13 @@
var barCode = null;
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',
needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
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.Collections;
import java.util.List;
import java.util.Random;
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestOther {
@Autowired
QyWxOperationService qyWxOperationService;
@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