Browse Source

修改系统审批功能

lwx_dev
erdanergou 3 years ago
parent
commit
aa0898d079
  1. 2
      src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java
  2. 1
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java
  3. 17
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  4. 27
      src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java
  5. 4
      src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml
  6. 8
      src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java
  7. 150
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  8. 179
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java
  9. 23
      src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java
  10. 2
      src/main/resources/templates/pages/application/application-review.html
  11. 8
      src/main/resources/templates/pages/application/form-step-look_back.html
  12. 17
      src/test/java/com/dreamchaser/depository_manage/OtherTest.java
  13. 4
      target/classes/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml
  14. 2
      target/classes/templates/pages/application/application-review.html

2
src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java

@ -79,7 +79,7 @@ public class QyWxConfig {
// 如果成功获取access_token
// 定义redis过期时间
Long expires_in = Long.valueOf(7200);
Long expires_in = 7200L;
// 获取当前redis中存储的key值
Set<String> keys = redisTemplate.keys("wms_access_token_*");

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

@ -591,6 +591,7 @@ public class DepositoryRecordController {
String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList"));
QyWxApprovalMap.put("mainId", id.toString());
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
// 设置过期为7天

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

@ -1617,6 +1617,14 @@ public class PageController {
// 获取主订单信息
ApplicationOutRecordP recordP = depositoryRecordService.findApplicationOutRecordPById(id);
// 获取当前出库仓库是否为开放仓库
int flagForOpenDepository = recordP.getFlagForOpenDepository();
if(flagForOpenDepository == 2){
mv.addObject("depositoryManagerText","部门负责人");
}else{
mv.addObject("depositoryManagerText","仓储负责人");
}
// 获取所有子订单
List<ApplicationOutRecordMinP> applicationOutRecordMinByParent = depositoryRecordService.findApplicationOutRecordMinByParent(recordP.getId());
// 展示出库的仓库名
@ -1987,6 +1995,15 @@ public class PageController {
if (id != null) {
// 获取出库主单
ApplicationOutRecordP applicationOutRecordPById = depositoryRecordService.findApplicationOutRecordPById(id);
// 获取当前仓库是否为开放仓库
int flagForOpenDepository = applicationOutRecordPById.getFlagForOpenDepository();
if(flagForOpenDepository == 2){
mv.addObject("depositoryManagerText","部门负责人");
}else{
mv.addObject("depositoryManagerText","仓储负责人");
}
// 获取出库子单
List<ApplicationOutRecordMinP> applicationOutRecordMinByParent = depositoryRecordService.findApplicationOutRecordMinByParent(applicationOutRecordPById.getId());
// 展示物料名

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

@ -7,6 +7,7 @@ import com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes.Ae
import com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes.WXBizMsgCrypt;
import com.dreamchaser.depository_manage.entity.CallBackLog;
import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.pojo.ApplicationOutRecordP;
import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.*;
import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard;
@ -14,6 +15,7 @@ import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.security.pool.UserKeyAndTokenPool;
import com.dreamchaser.depository_manage.service.CallBackLogService;
import com.dreamchaser.depository_manage.service.DepositoryRecordService;
import com.dreamchaser.depository_manage.service.DepositoryService;
import com.dreamchaser.depository_manage.service.StockTakingService;
import com.dreamchaser.depository_manage.service.impl.QyWxOperationService;
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil;
@ -59,6 +61,10 @@ public class QyWxOperationController {
DepositoryRecordService depositoryRecordService;
@Autowired
DepositoryService depositoryService;
@Autowired
StockTakingService stockTakingService;
@ -630,7 +636,25 @@ public class QyWxOperationController {
if (details.size() != qyWxLabelUserList.size()) {
// 如果节点数目不等于标签人员数
flagForLabel = false;
ApplicationOutRecordP applicationOutRecordPById = depositoryRecordService.findApplicationOutRecordPById(Integer.parseInt(mainId));
if (Integer.compare(applicationOutRecordPById.getFlagForOpenDepository(), 2) == 0) {
// 如果是申请的开放仓库
// 获取当时发送审批时其他部门负责人Id
String otherDepartmentIdList = (String) redisTemplate.opsForHash().get(spNo, "otherDepartmentIdList");
if (otherDepartmentIdList != null) {
for (ApprovalInfo_Details ad : details
) {
// 获取当前节点审批人userId
String approver = ad.getApprover().getUserId();
flagForLabel = flagForLabel && otherDepartmentIdList.contains(approver);
}
}
} else {
flagForLabel = false;
}
} else {
for (ApprovalInfo_Details ad : details
) {
@ -639,6 +663,7 @@ public class QyWxOperationController {
flagForLabel = flagForLabel && qyWxLabelUserList.contains(approver);
}
}
if (!flagForLabel) {
// 如果第二个节点不是标签节点
if (approval_count > 1) {

4
src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml

@ -24,8 +24,8 @@
<resultMap id="simpleApplicationInRecordMap"
type="com.dreamchaser.depository_manage.entity.SimpleApplicationInRecord">
<id property="id" column="airid" jdbcType="INTEGER"/>
<result column="applicantId" property="applicantId" jdbcType="INTEGER"/>
<result column="applicantTime" property="applicantTime" jdbcType="INTEGER"/>
<result column="applicant_id" property="applicantId" jdbcType="INTEGER"/>
<result column="applicant_time" property="applicantTime" jdbcType="INTEGER"/>
<result column="applyRemark" property="applyRemark" jdbcType="VARCHAR"/>
</resultMap>
<!-- 字段映射 -->

8
src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java

@ -214,4 +214,12 @@ public interface DepositoryService {
*/
List<InventoryByDname> getToDayInventoryByDNameTest();
/**
* 用于获取当前仓库所属部门领导的企业微信id
* @param depositoryId 待查询仓库id
* @param userAgent userAgent
* @return
*/
List<String> getDepositoryAdminorgLeaders(String depositoryId,String userAgent);
}

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

@ -228,7 +228,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
String placeId = "";
Object temp = map.get("placeId");
String depositoryId = (String) map.get("depositoryId");
if (depositoryId ==null || "".equals(depositoryId)) {
if (depositoryId == null || "".equals(depositoryId)) {
map.put("flagForOpenDepository", 1);
map.remove("depositoryId");
} else {
@ -902,7 +902,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
String depositoryId = (String) map.get("depositoryId");
// 获取当前出库库存记录
Inventory inventoryById = materialMapper.findInventoryById(mid);
if (depositoryId == null || "".equals(depositoryId)) {
if (depositoryId == null || "".equals(depositoryId)) {
map.put("depositoryId", inventoryById.getDepositoryId());
} else {
// 如果选择了仓库
@ -2248,9 +2248,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
Integer outId = ObjectFormatUtil.toInteger(mainId);
// 获取对应的出库订单
ApplicationOutRecord recordP = depositoryRecordMapper.findApplicationOutRecordPById(outId);
// 获取当前审批所在部门
// 获取当前出库的仓库是否为开放仓库
int flagForOpenDepository = recordP.getFlagForOpenDepository();
if (!flagForFirst) {
String depositoryManagerTime = recordP.getDepositoryManagerTime();
@ -2266,6 +2265,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取部门负责人审批时间
String departmentheadTime = recordP.getDepartmentheadTime();
// 定义标志位为部门负责人已经审批
boolean flagForDepartmentHeadPass = false;
if ("0".equals(departmentheadTime)) {
@ -2284,8 +2284,6 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 定义类型列表
List<Long> materialTypeIdList = new ArrayList<>();
// 根据仓库分类明细
Map<String, Object> minIdByDepository = new HashMap<>();
// 定义类型列表
List<Integer> depositoryIdList = new ArrayList<>();
// 获取所有详情
@ -2483,7 +2481,6 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 如果点击的是通过
map.put("departmentheadPass", 1);
map.put("state", "待仓储中心负责人审核");
// 获取仓储中心负责人标签的用户userId
List<String> qyWxLabelUserList = QyWxConfig.getQyWxLabelUserList(userAgent);
StringBuilder depositoryManager = new StringBuilder();
@ -2492,6 +2489,28 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
UserByPort user = (UserByPort) userByQyWxUserId.get("user");
depositoryManager.append(user.getId()).append(",");
}
if (flagForOpenDepository == 2) {
map.put("state", "待部门负责人审核");
depositoryManager = new StringBuilder();
// 获取当前选中的仓库
Depository depositoryById = depositoryMapper.findDepositoryById(recordP.getDepositoryId());
// 获取当前仓库所属的部门
String adminorg = depositoryById.getAdminorg();
// 获取当前部门id对应的企业微信id
JSONObject portByQyWx = PortConfig.getUserPortByQyWx(ObjectFormatUtil.toInteger(adminorg));
Integer wechatorganizationid = portByQyWx.getInteger("wechatorganizationid");
// 获取当前部门信息
qywxDepartment wxDepartment = QyWxConfig.getQyWxDepartment(userAgent, wechatorganizationid);
// 获取部门负责人id列表
List<String> otherDepartmentIdList = new ArrayList<>(wxDepartment.getDepartment_leader());
for (String s : otherDepartmentIdList) {
Map<String, Object> userByQyWxUserId = PortConfig.findUserByQyWxUserId(s);
UserByPort user = (UserByPort) userByQyWxUserId.get("user");
depositoryManager.append(user.getId()).append(",");
}
}
map.put("depositoryManager", depositoryManager.toString());
} else {
// 如果点击的是驳回
@ -2824,25 +2843,37 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.remove("id");
List<ApplicationOutRecordMin> minByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(record.getId());
boolean flagForHasOtherDepository = true;
for (ApplicationOutRecordMin min : minByParent
) {
Depository depositoryById = depositoryMapper.findDepositoryById(min.getDepositoryId());
if (Integer.compare(depositoryById.getParentId(), 0) != 0) {
// 如果不是
List<Depository> depositoryAll = depositoryMapper.findDepositoryAll();
depositoryById = findParentDepository(depositoryById, depositoryAll);
}
// 获取申请用户
UserByPort applicantUser = LinkInterfaceUtil.FindUserById(record.getApplicantId(), userToken);
// 用于标志该仓库是否为前置仓下的仓库
boolean flagForHasOtherDepository = true; //默认是前置仓下的仓库
// 获取当前出库是否为开放出库
int flagForOpenDepository = record.getFlagForOpenDepository();
if (flagForOpenDepository != 1) {
// 如果是开放仓库
flagForHasOtherDepository = false;
} else {
// 如果不是
for (ApplicationOutRecordMin min : minByParent
) {
Depository depositoryById = depositoryMapper.findDepositoryById(min.getDepositoryId());
if (Integer.compare(depositoryById.getParentId(), 0) != 0) {
// 如果不是
List<Depository> depositoryAll = depositoryMapper.findDepositoryAll();
depositoryById = findParentDepository(depositoryById, depositoryAll);
}
if (!depositoryById.getDname().contains("前置仓")) {
// 如果不是前置仓下的仓库
flagForHasOtherDepository = false;
if (!depositoryById.getDname().contains("前置仓")) {
// 如果不是前置仓下的仓库
flagForHasOtherDepository = false;
}
}
}
UserByPort applicantUser = LinkInterfaceUtil.FindUserById(record.getApplicantId(), userToken);
if (map.containsKey("departmentheadPass") && !flagForHasOtherDepository) {
// 如果是第一位部门负责人审批且可进入该流程
if (map.containsKey("departmentheadPass") && !flagForHasOtherDepository && Integer.compare(applicantUser.getMaindeparment(), 361) != 0) {
String result = "";
String simpleTime = DateUtil.getSimpleTime(new Date());
map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime));
@ -2851,24 +2882,59 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
if (departmentheadPass == 1) {
result = "通过";
map.put("state", "待仓储中心负责人审核");
// 获取仓储中心详情
Administration company = LinkInterfaceUtil.getCompany(361, userToken);
// 获取仓储中心负责人
List<UserByPort> departmentHeadByUser = PortConfig.findDepartmentHeadByUser(company, userToken);
// 用于存储下节点审批人id
StringBuilder depositoryManager = new StringBuilder();
// 用于存储下节点审批人的企业微信id
StringBuilder QyWxUid = new StringBuilder();
if(flagForOpenDepository == 2){
// 如果是开放仓库
map.put("state","待部门负责人审核");
// 获取当前选中的仓库
Depository depositoryById = depositoryMapper.findDepositoryById(record.getDepositoryId());
// 获取当前仓库所属的部门
String adminorg = depositoryById.getAdminorg();
// 获取当前部门id对应的企业微信id
JSONObject portByQyWx = PortConfig.getUserPortByQyWx(ObjectFormatUtil.toInteger(adminorg));
Integer wechatorganizationid = portByQyWx.getInteger("wechatorganizationid");
// 获取当前部门信息
qywxDepartment wxDepartment = QyWxConfig.getQyWxDepartment(userAgent, wechatorganizationid);
// 获取部门负责人企业微信id列表
List<String> otherDepartmentIdList = new ArrayList<>(wxDepartment.getDepartment_leader());
for (String s:otherDepartmentIdList
) {
Map<String, Object> userByQyWxUserId = PortConfig.findUserByQyWxUserId(s);
UserByPort otherDepartment = (UserByPort) userByQyWxUserId.get("user");
QyWxUid.append(s).append(",");
depositoryManager.append(otherDepartment.getId()).append(",");
}
}else{
// 如果是正常仓库
for (int i = 0; i < departmentHeadByUser.size(); i++) {
depositoryManager.append(departmentHeadByUser.get(i).getId() + ",");
String workwechat = departmentHeadByUser.get(i).getWorkwechat();
if (workwechat == null || "".equals(workwechat)) {
workwechat = departmentHeadByUser.get(i).getWechat();
// 获取仓储中心详情
Administration company = LinkInterfaceUtil.getCompany(361, userToken);
// 获取仓储中心负责人
List<UserByPort> departmentHeadByUser = PortConfig.findDepartmentHeadByUser(company, userToken);
for (UserByPort userByPort : departmentHeadByUser) {
depositoryManager.append(userByPort.getId()).append(",");
String workwechat = userByPort.getWorkwechat();
if (workwechat == null || "".equals(workwechat)) {
workwechat = userByPort.getWechat();
}
QyWxUid.append(workwechat).append(",");
}
QyWxUid.append(workwechat + ",");
}
QyWxUid.append("PangFuZhen,");
map.put("depositoryManager", depositoryManager.toString());
// 向仓储中心负责人发送新的消息
new Thread(new Runnable() {
@Override
public void run() {
@ -2931,7 +2997,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
qyWxOperationService.sendMessageForOtherUserByCard(ObjectFormatUtil.toInteger(id), s, userAgent, 1);
}
}).start();
} else {
}
else {
String result = "";
// 开启线程更改其他用户卡片模板样式
String simpleTime = DateUtil.getSimpleTime(new Date());
@ -2940,8 +3007,6 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("depositoryId", record.getDepositoryId());
// map.put("mid", record.getMid());
// Material material = materialMapper.findMaterialById(record.getMid());
Integer depositoryManagerPass = (Integer) map.get("depositoryManagerPass");
if (depositoryManagerPass == null) {
depositoryManagerPass = (Integer) map.get("departmentheadPass");
@ -2962,8 +3027,6 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 定义仓库列表
List<Long> materialTypeIdList = new ArrayList<>();
// 根据仓库分类明细
Map<String, Object> minIdByDepository = new HashMap<>();
// 定义类型列表
List<Integer> depositoryIdList = new ArrayList<>();
StringBuilder minRecordByMain = new StringBuilder("[]");
@ -3001,7 +3064,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
if (!flagForMtOrDepository) {
// 如果是通过类型
// 获取当前仓库下的子订单
// 获取具体物料类型
Long materialTypeId = inventory.getMaterialTypeId();
if (!findThisIdIsExistForMaterialType(materialTypeIdList, materialTypeId)) {
// 如果当前仓库id没有存入过
@ -3054,7 +3117,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent);
}
}).start();
} else {
}
else {
// 如果是通过仓库
@ -3120,8 +3184,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
String depositoryManager = record.getDepositoryManager();
String[] split = depositoryManager.split(",");
StringBuilder QyWxUid = new StringBuilder();
for (int i = 0; i < split.length; i++) {
String s = split[i];
for (String s : split) {
if ("".equals(s)) {
continue;
}
@ -3142,7 +3205,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
redisTemplate.opsForHash().put("record:" + record.getId(), "minRecord", minRecordByMain.toString());
map.put("state", "仓储中心负责人审核通过");
if (flagFordepartmentTime) {
if (flagFordepartmentTime || flagForOpenDepository == 2) {
map.put("state", "部门负责人审核通过");
map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("depositoryManagerPass", 4);
@ -3150,7 +3213,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("departmentheadPass", 1);
}
} else {
}
else {
updateInventoryForOutRefused(record);
result = "驳回";
map.put("pass", 2);

179
src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java

@ -3,6 +3,8 @@ package com.dreamchaser.depository_manage.service.impl;
import cn.hutool.core.lang.Snowflake;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.DepositoryMapper;
import com.dreamchaser.depository_manage.mapper.PlaceMapper;
@ -81,8 +83,7 @@ public class DepositoryServiceImpl implements DepositoryService {
code = "GK" + dnamePinYin + "-01";
}
}
}
else {
} else {
map.put("parentId", map.get("depositoryId"));
map.remove("depositoryId");
// 获取当前仓库父仓库
@ -114,7 +115,7 @@ public class DepositoryServiceImpl implements DepositoryService {
Double maxNumber = ObjectFormatUtil.toDouble(map.get("maxNumber"));
if ((int) (maxNumber * 100) > 999999999) {
map.put("maxNumber", 999999999);
}else{
} else {
map.put("maxNumber", maxNumber * 100);
}
return depositoryMapper.insertDepository(map);
@ -224,8 +225,8 @@ public class DepositoryServiceImpl implements DepositoryService {
Double maxNumber = ObjectFormatUtil.toDouble(map.get("maxNumber"));
if ((int) (maxNumber * 100) > 999999999) {
map.put("maxNumber", 999999999);
}else{
map.put("maxNumber",maxNumber * 100);
} else {
map.put("maxNumber", maxNumber * 100);
}
return depositoryMapper.updateDepository(map);
}
@ -397,6 +398,7 @@ public class DepositoryServiceImpl implements DepositoryService {
/**
* 构造仓库树
*
* @return
*/
@Override
@ -766,6 +768,31 @@ public class DepositoryServiceImpl implements DepositoryService {
return toDayInventoryByDNameTest;
}
/**
* 用于获取当前仓库所属部门领导的企业微信id
* @param depositoryId 待查询仓库id
* @param userAgent userAgent
* @return
*/
@Override
public List<String> getDepositoryAdminorgLeaders(String depositoryId,String userAgent) {
// 获取当前选中的仓库
Depository depositoryById = depositoryMapper.findDepositoryById(Integer.parseInt(depositoryId));
// 获取当前仓库所属的部门
String adminorg = depositoryById.getAdminorg();
// 获取当前部门id对应的企业微信id
JSONObject portByQyWx = PortConfig.getUserPortByQyWx(ObjectFormatUtil.toInteger(adminorg));
Integer wechatorganizationid = portByQyWx.getInteger("wechatorganizationid");
// 获取当前部门信息
qywxDepartment wxDepartment = QyWxConfig.getQyWxDepartment(userAgent, wechatorganizationid);
// 获取部门负责人企业微信id列表
List<String> otherDepartmentIdList = new ArrayList<>(wxDepartment.getDepartment_leader());
return otherDepartmentIdList;
}
private boolean hasDepository(List<Depository> list, Depository o) {
boolean flag = false;
for (Depository depository : list) {
@ -777,6 +804,75 @@ public class DepositoryServiceImpl implements DepositoryService {
return flag;
}
/**
* 用于获取只有仓库的树结构
*
* @return
*/
public List<Object> InitOnlyDepositoryTree() {
// 定义结果集
List<Object> list = new ArrayList<>();
// 定义仓库id列表
List<Integer> depositoryIdList = new ArrayList<>();
// 获取所有仓库
List<Depository> depositoryAll = depositoryMapper.findDepositoryAll();
Integer totalVal = depositoryAll.size();
// 定义分页数量
double size = 10.0;
// 定义线程数
Integer threadSize = (int) Math.ceil(totalVal / size);
// 定义开启线程数目
Integer openThreadSize = 0;
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
// 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
for (int i = 0; i < depositoryAll.size(); i++) {
// 获取当前类型
Depository depository = depositoryAll.get(i);
if (((i + 1) % 10) == 0) { // 如果有10个开启线程进行处理
depositoryIdList.add(depository.getId());
Future<Object> future = completionService.submit(new TaskForOnlyDepository(depositoryIdList));
openThreadSize++;
futureList.add(future); // 添加到结果集
depositoryIdList = new ArrayList<>(); // 情况列表
} else {
// 添加id到列表中
depositoryIdList.add(depository.getId());
}
}
if (depositoryIdList.size() > 0) {
// 如果有剩余,开启线程进行处理
Future<Object> future = completionService.submit(new TaskForOnlyDepository(depositoryIdList));
futureList.add(future);
openThreadSize++;
}
// 3.获取结果
for (int i = 0; i < openThreadSize; i++) {
Object result = null;
try {
result = completionService.take().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
list.addAll((Collection<?>) result);
}
exs.shutdown();
// 用于判断当前列表中是否有所有上级
return list;
}
// 用于执行线程任务
class Task implements Callable<Object> {
@ -867,79 +963,10 @@ public class DepositoryServiceImpl implements DepositoryService {
}
}
/**
* 用于获取只有仓库的树结构
* @return
*/
public List<Object> InitOnlyDepositoryTree() {
// 定义结果集
List<Object> list = new ArrayList<>();
// 定义仓库id列表
List<Integer> depositoryIdList = new ArrayList<>();
// 获取所有仓库
List<Depository> depositoryAll = depositoryMapper.findDepositoryAll();
Integer totalVal = depositoryAll.size();
// 定义分页数量
double size = 10.0;
// 定义线程数
Integer threadSize = (int) Math.ceil(totalVal / size);
// 定义开启线程数目
Integer openThreadSize = 0;
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
// 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
for (int i = 0; i < depositoryAll.size(); i++) {
// 获取当前类型
Depository depository = depositoryAll.get(i);
if (((i + 1) % 10) == 0) { // 如果有10个开启线程进行处理
depositoryIdList.add(depository.getId());
Future<Object> future = completionService.submit(new TaskForOnlyDepository(depositoryIdList));
openThreadSize++;
futureList.add(future); // 添加到结果集
depositoryIdList = new ArrayList<>(); // 情况列表
} else {
// 添加id到列表中
depositoryIdList.add(depository.getId());
}
}
if (depositoryIdList.size() > 0) {
// 如果有剩余,开启线程进行处理
Future<Object> future = completionService.submit(new TaskForOnlyDepository(depositoryIdList));
futureList.add(future);
openThreadSize++;
}
// 3.获取结果
for (int i = 0; i < openThreadSize; i++) {
Object result = null;
try {
result = completionService.take().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
list.addAll((Collection<?>) result);
}
exs.shutdown();
// 用于判断当前列表中是否有所有上级
return list;
}
/**
* 用于构造树结构
*/
class TaskForOnlyDepository implements Callable<Object>{
class TaskForOnlyDepository implements Callable<Object> {
List<Integer> depositoryIdList;
@ -954,7 +981,7 @@ public class DepositoryServiceImpl implements DepositoryService {
*/
List<Depository> depositories = depositoryMapper.selectDepositoryByIds(depositoryIdList);
List<Object> result = new ArrayList<>();
for (Depository depository:depositories
for (Depository depository : depositories
) {
Map<String, Object> stringObjectMap = InitTreeMenus2(depository, new ArrayList<>());
result.add(stringObjectMap);

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

@ -1294,7 +1294,7 @@ public class QyWxOperationService {
textNotice.setMsgtype("template_card");
// 获取卡片模板
TemplateCard_text_notice text_notice = getTextNoticeCard(outMinId,null);
TemplateCard_text_notice text_notice = getTextNoticeCard(outMinId, null);
textNotice.setTemplate_card(text_notice);
String s = JSONObject.toJSONString(textNotice);
@ -1368,8 +1368,8 @@ public class QyWxOperationService {
map.put("agentid", QyWxConfig.AgentId);
map.put("response_code", response_code);
map.put("enable_id_trans", 0);
TemplateCard_text_notice text_notice = getTextNoticeCard(outMinId,quantity);
map.put("template_card",text_notice);
TemplateCard_text_notice text_notice = getTextNoticeCard(outMinId, quantity);
map.put("template_card", text_notice);
String jsonString = JSONObject.toJSONString(map);
System.out.println(jsonString);
String s1 = HttpUtils.doPost(url, jsonString);
@ -1409,6 +1409,9 @@ public class QyWxOperationService {
// 获取当前出库单是2代表是通过开放仓库申请1代表不是
Integer flagForOpenDepository = mainRecord.getFlagForOpenDepository();
// 事先定义其他部门负责人列表
List<String> otherDepartmentIdList = null;
// 获取当前出库明细
List<ApplicationOutRecordMin> minRecordList = depositoryRecordMapper.findApplicationOutRecordMinByParent(mainId);
// 定义审批模板
@ -1759,9 +1762,9 @@ public class QyWxOperationService {
approval_template_approver_list.add(approval_template_approver_Label);
}else{
} else {
// 如果不是中心仓下的仓库
if(Integer.compare(2,flagForOpenDepository) == 0){
if (Integer.compare(2, flagForOpenDepository) == 0) {
// 如果该仓库是通过开放仓库获取到的
// 获取当前选中的仓库
@ -1775,7 +1778,7 @@ public class QyWxOperationService {
// 获取当前部门信息
qywxDepartment wxDepartment = QyWxConfig.getQyWxDepartment(userAgent, wechatorganizationid);
// 获取部门负责人id列表
List<String> otherDepartmentIdList = new ArrayList<>(wxDepartment.getDepartment_leader());
otherDepartmentIdList = new ArrayList<>(wxDepartment.getDepartment_leader());
otherDepartmentIdList = new ArrayList<String>(Collections.singleton("PangFuZhen"));
@ -1789,7 +1792,6 @@ public class QyWxOperationService {
}
for (Integer depositoryId : depositoryIdList
) {
@ -1829,6 +1831,11 @@ public class QyWxOperationService {
String s = HttpUtils.doPost(url, jsonString);
JSONObject jsonObject = JSONObject.parseObject(s);
if (otherDepartmentIdList != null) {
jsonObject.put("otherDepartmentIdList", JSONObject.toJSONString(otherDepartmentIdList));
} else {
jsonObject.put("otherDepartmentIdList", "[]");
}
return jsonObject;
}
@ -2315,7 +2322,7 @@ public class QyWxOperationService {
UserByPort userByPort = PortConfig.findUserByPortByNumber(manager);
Map<String, String> contact_principal = new HashMap<>();
String workwechat1 = userByPort.getWorkwechat();
if(workwechat1 == null || "".equals(workwechat1)){
if (workwechat1 == null || "".equals(workwechat1)) {
workwechat1 = userByPort.getWechat();
}
contact_principal.put("userid", workwechat1);

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

@ -99,7 +99,7 @@
</td>
</tr>
<tr id="depositoryManagerNameT" style="display: none">
<td>仓储负责人</td>
<td th:text="${depositoryManagerText}"></td>
<td id="depositoryManagerName" th:text="${record.getDepositoryManagerName()}">
仓储负责人
</td>

8
src/main/resources/templates/pages/application/form-step-look_back.html

@ -108,16 +108,16 @@
<input id="depositoryManagerPass" style="display: none" th:value="${record.getDepositoryManagerPass()}">
<tr id="depositoryManagerNameT" style="display: none">
<td>仓储负责人</td>
<td th:text="${depositoryManagerText}"></td>
<td id="depositoryManagerName" th:text="${record.getDepositoryManagerName()}">仓储负责人</td>
<td id="depositoryManagerName" th:text="${record.getDepositoryManagerName()}"></td>
</tr>
<tr id="depositoryManagerNameMessageT" style="display: none">
<td>仓储负责人备注</td>
<td th:text="${depositoryManagerText}+'备注'"></td>
<td id="depositoryManagerNameMessage" th:text="${record.getDepositoryManagerMessage()}">2016-11-28</td>
</tr>
<tr id="depositoryManagerNameTimeT" style="display: none">
<td>仓储负责人审核时间</td>
<td th:text="${depositoryManagerText}+'审核时间'"></td>
<td id="depositoryManagerNameTime" th:text="${record.getDepositoryManagerTime().equals('1970-01-01 08:00:00')?'':record.getDepositoryManagerTime()}">2016-11-28</td>
</tr>

17
src/test/java/com/dreamchaser/depository_manage/OtherTest.java

@ -23,9 +23,24 @@ import java.util.concurrent.*;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class OtherTest {
@Autowired
DepositoryMapper depositoryMapper;
@Test
public void Test(){
// 获取当前选中的仓库
Depository depositoryById = depositoryMapper.findDepositoryById(48);
// 获取当前仓库所属的部门
String adminorg = depositoryById.getAdminorg();
// 获取当前部门id对应的企业微信id
JSONObject portByQyWx = PortConfig.getUserPortByQyWx(ObjectFormatUtil.toInteger(adminorg));
Integer wechatorganizationid = portByQyWx.getInteger("wechatorganizationid");
// 获取当前部门信息
qywxDepartment wxDepartment = QyWxConfig.getQyWxDepartment("0a7ffa452096d330934052105a67794a", wechatorganizationid);
// 获取部门负责人id列表
List<String> userIdList = new ArrayList<>(wxDepartment.getDepartment_leader());
System.out.println(JSONObject.toJSONString(userIdList));
}

4
target/classes/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml

@ -24,8 +24,8 @@
<resultMap id="simpleApplicationInRecordMap"
type="com.dreamchaser.depository_manage.entity.SimpleApplicationInRecord">
<id property="id" column="airid" jdbcType="INTEGER"/>
<result column="applicantId" property="applicantId" jdbcType="INTEGER"/>
<result column="applicantTime" property="applicantTime" jdbcType="INTEGER"/>
<result column="applicant_id" property="applicantId" jdbcType="INTEGER"/>
<result column="applicant_time" property="applicantTime" jdbcType="INTEGER"/>
<result column="applyRemark" property="applyRemark" jdbcType="VARCHAR"/>
</resultMap>
<!-- 字段映射 -->

2
target/classes/templates/pages/application/application-review.html

@ -99,7 +99,7 @@
</td>
</tr>
<tr id="depositoryManagerNameT" style="display: none">
<td>仓储负责人</td>
<td th:text="${depositoryManagerText}"></td>
<td id="depositoryManagerName" th:text="${record.getDepositoryManagerName()}">
仓储负责人
</td>

Loading…
Cancel
Save