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 // 如果成功获取access_token
// 定义redis过期时间 // 定义redis过期时间
Long expires_in = Long.valueOf(7200); Long expires_in = 7200L;
// 获取当前redis中存储的key值 // 获取当前redis中存储的key值
Set<String> keys = redisTemplate.keys("wms_access_token_*"); 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"); String sp_no = jsonObject.getString("sp_no");
Map<String, Object> QyWxApprovalMap = new HashMap<>(); Map<String, Object> QyWxApprovalMap = new HashMap<>();
QyWxApprovalMap.put("sp_no", sp_no); QyWxApprovalMap.put("sp_no", sp_no);
QyWxApprovalMap.put("otherDepartmentIdList", jsonObject.getString("otherDepartmentIdList"));
QyWxApprovalMap.put("mainId", id.toString()); QyWxApprovalMap.put("mainId", id.toString());
redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap); redisTemplateForHash.opsForHash().putAll(sp_no, QyWxApprovalMap);
// 设置过期为7天 // 设置过期为7天

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

@ -1617,6 +1617,14 @@ public class PageController {
// 获取主订单信息 // 获取主订单信息
ApplicationOutRecordP recordP = depositoryRecordService.findApplicationOutRecordPById(id); 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()); List<ApplicationOutRecordMinP> applicationOutRecordMinByParent = depositoryRecordService.findApplicationOutRecordMinByParent(recordP.getId());
// 展示出库的仓库名 // 展示出库的仓库名
@ -1987,6 +1995,15 @@ public class PageController {
if (id != null) { if (id != null) {
// 获取出库主单 // 获取出库主单
ApplicationOutRecordP applicationOutRecordPById = depositoryRecordService.findApplicationOutRecordPById(id); 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()); 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.config.QyWxJMJM.com.qq.weixin.mp.aes.WXBizMsgCrypt;
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.ApplicationOutRecordP;
import com.dreamchaser.depository_manage.pojo.RestResponse; import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.*; import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.*;
import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard; 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.security.pool.UserKeyAndTokenPool;
import com.dreamchaser.depository_manage.service.CallBackLogService; import com.dreamchaser.depository_manage.service.CallBackLogService;
import com.dreamchaser.depository_manage.service.DepositoryRecordService; 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.StockTakingService;
import com.dreamchaser.depository_manage.service.impl.QyWxOperationService; import com.dreamchaser.depository_manage.service.impl.QyWxOperationService;
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil; import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil;
@ -59,6 +61,10 @@ public class QyWxOperationController {
DepositoryRecordService depositoryRecordService; DepositoryRecordService depositoryRecordService;
@Autowired
DepositoryService depositoryService;
@Autowired @Autowired
StockTakingService stockTakingService; StockTakingService stockTakingService;
@ -630,7 +636,25 @@ public class QyWxOperationController {
if (details.size() != qyWxLabelUserList.size()) { 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 { } else {
for (ApprovalInfo_Details ad : details for (ApprovalInfo_Details ad : details
) { ) {
@ -639,6 +663,7 @@ public class QyWxOperationController {
flagForLabel = flagForLabel && qyWxLabelUserList.contains(approver); flagForLabel = flagForLabel && qyWxLabelUserList.contains(approver);
} }
} }
if (!flagForLabel) { if (!flagForLabel) {
// 如果第二个节点不是标签节点 // 如果第二个节点不是标签节点
if (approval_count > 1) { if (approval_count > 1) {

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

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

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

@ -214,4 +214,12 @@ public interface DepositoryService {
*/ */
List<InventoryByDname> getToDayInventoryByDNameTest(); 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 = ""; String placeId = "";
Object temp = map.get("placeId"); Object temp = map.get("placeId");
String depositoryId = (String) map.get("depositoryId"); String depositoryId = (String) map.get("depositoryId");
if (depositoryId ==null || "".equals(depositoryId)) { if (depositoryId == null || "".equals(depositoryId)) {
map.put("flagForOpenDepository", 1); map.put("flagForOpenDepository", 1);
map.remove("depositoryId"); map.remove("depositoryId");
} else { } else {
@ -902,7 +902,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
String depositoryId = (String) map.get("depositoryId"); String depositoryId = (String) map.get("depositoryId");
// 获取当前出库库存记录 // 获取当前出库库存记录
Inventory inventoryById = materialMapper.findInventoryById(mid); Inventory inventoryById = materialMapper.findInventoryById(mid);
if (depositoryId == null || "".equals(depositoryId)) { if (depositoryId == null || "".equals(depositoryId)) {
map.put("depositoryId", inventoryById.getDepositoryId()); map.put("depositoryId", inventoryById.getDepositoryId());
} else { } else {
// 如果选择了仓库 // 如果选择了仓库
@ -2248,9 +2248,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
Integer outId = ObjectFormatUtil.toInteger(mainId); Integer outId = ObjectFormatUtil.toInteger(mainId);
// 获取对应的出库订单 // 获取对应的出库订单
ApplicationOutRecord recordP = depositoryRecordMapper.findApplicationOutRecordPById(outId); ApplicationOutRecord recordP = depositoryRecordMapper.findApplicationOutRecordPById(outId);
// 获取当前出库的仓库是否为开放仓库
// 获取当前审批所在部门 int flagForOpenDepository = recordP.getFlagForOpenDepository();
if (!flagForFirst) { if (!flagForFirst) {
String depositoryManagerTime = recordP.getDepositoryManagerTime(); String depositoryManagerTime = recordP.getDepositoryManagerTime();
@ -2266,6 +2265,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取部门负责人审批时间 // 获取部门负责人审批时间
String departmentheadTime = recordP.getDepartmentheadTime(); String departmentheadTime = recordP.getDepartmentheadTime();
// 定义标志位为部门负责人已经审批 // 定义标志位为部门负责人已经审批
boolean flagForDepartmentHeadPass = false; boolean flagForDepartmentHeadPass = false;
if ("0".equals(departmentheadTime)) { if ("0".equals(departmentheadTime)) {
@ -2284,8 +2284,6 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 定义类型列表 // 定义类型列表
List<Long> materialTypeIdList = new ArrayList<>(); List<Long> materialTypeIdList = new ArrayList<>();
// 根据仓库分类明细
Map<String, Object> minIdByDepository = new HashMap<>();
// 定义类型列表 // 定义类型列表
List<Integer> depositoryIdList = new ArrayList<>(); List<Integer> depositoryIdList = new ArrayList<>();
// 获取所有详情 // 获取所有详情
@ -2483,7 +2481,6 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 如果点击的是通过 // 如果点击的是通过
map.put("departmentheadPass", 1); map.put("departmentheadPass", 1);
map.put("state", "待仓储中心负责人审核"); map.put("state", "待仓储中心负责人审核");
// 获取仓储中心负责人标签的用户userId // 获取仓储中心负责人标签的用户userId
List<String> qyWxLabelUserList = QyWxConfig.getQyWxLabelUserList(userAgent); List<String> qyWxLabelUserList = QyWxConfig.getQyWxLabelUserList(userAgent);
StringBuilder depositoryManager = new StringBuilder(); StringBuilder depositoryManager = new StringBuilder();
@ -2492,6 +2489,28 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
UserByPort user = (UserByPort) userByQyWxUserId.get("user"); UserByPort user = (UserByPort) userByQyWxUserId.get("user");
depositoryManager.append(user.getId()).append(","); 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()); map.put("depositoryManager", depositoryManager.toString());
} else { } else {
// 如果点击的是驳回 // 如果点击的是驳回
@ -2824,25 +2843,37 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.remove("id"); map.remove("id");
List<ApplicationOutRecordMin> minByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(record.getId()); List<ApplicationOutRecordMin> minByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(record.getId());
boolean flagForHasOtherDepository = true; // 获取申请用户
for (ApplicationOutRecordMin min : minByParent UserByPort applicantUser = LinkInterfaceUtil.FindUserById(record.getApplicantId(), userToken);
) { // 用于标志该仓库是否为前置仓下的仓库
Depository depositoryById = depositoryMapper.findDepositoryById(min.getDepositoryId()); boolean flagForHasOtherDepository = true; //默认是前置仓下的仓库
if (Integer.compare(depositoryById.getParentId(), 0) != 0) { // 获取当前出库是否为开放出库
// 如果不是 int flagForOpenDepository = record.getFlagForOpenDepository();
List<Depository> depositoryAll = depositoryMapper.findDepositoryAll(); if (flagForOpenDepository != 1) {
depositoryById = findParentDepository(depositoryById, depositoryAll);
} // 如果是开放仓库
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("前置仓")) { if (!depositoryById.getDname().contains("前置仓")) {
// 如果不是前置仓下的仓库 // 如果不是前置仓下的仓库
flagForHasOtherDepository = false; 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 result = "";
String simpleTime = DateUtil.getSimpleTime(new Date()); String simpleTime = DateUtil.getSimpleTime(new Date());
map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime)); map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime));
@ -2851,24 +2882,59 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
if (departmentheadPass == 1) { if (departmentheadPass == 1) {
result = "通过"; result = "通过";
map.put("state", "待仓储中心负责人审核"); map.put("state", "待仓储中心负责人审核");
// 获取仓储中心详情
Administration company = LinkInterfaceUtil.getCompany(361, userToken);
// 获取仓储中心负责人 // 用于存储下节点审批人id
List<UserByPort> departmentHeadByUser = PortConfig.findDepartmentHeadByUser(company, userToken);
StringBuilder depositoryManager = new StringBuilder(); StringBuilder depositoryManager = new StringBuilder();
// 用于存储下节点审批人的企业微信id
StringBuilder QyWxUid = new StringBuilder(); 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() + ","); Administration company = LinkInterfaceUtil.getCompany(361, userToken);
String workwechat = departmentHeadByUser.get(i).getWorkwechat();
if (workwechat == null || "".equals(workwechat)) { // 获取仓储中心负责人
workwechat = departmentHeadByUser.get(i).getWechat(); 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,"); QyWxUid.append("PangFuZhen,");
map.put("depositoryManager", depositoryManager.toString()); map.put("depositoryManager", depositoryManager.toString());
// 向仓储中心负责人发送新的消息 // 向仓储中心负责人发送新的消息
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
@ -2931,7 +2997,8 @@ 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());
@ -2940,8 +3007,6 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("depositoryId", record.getDepositoryId()); map.put("depositoryId", record.getDepositoryId());
// map.put("mid", record.getMid());
// Material material = materialMapper.findMaterialById(record.getMid());
Integer depositoryManagerPass = (Integer) map.get("depositoryManagerPass"); Integer depositoryManagerPass = (Integer) map.get("depositoryManagerPass");
if (depositoryManagerPass == null) { if (depositoryManagerPass == null) {
depositoryManagerPass = (Integer) map.get("departmentheadPass"); depositoryManagerPass = (Integer) map.get("departmentheadPass");
@ -2962,8 +3027,6 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 定义仓库列表 // 定义仓库列表
List<Long> materialTypeIdList = new ArrayList<>(); List<Long> materialTypeIdList = new ArrayList<>();
// 根据仓库分类明细
Map<String, Object> minIdByDepository = new HashMap<>();
// 定义类型列表 // 定义类型列表
List<Integer> depositoryIdList = new ArrayList<>(); List<Integer> depositoryIdList = new ArrayList<>();
StringBuilder minRecordByMain = new StringBuilder("[]"); StringBuilder minRecordByMain = new StringBuilder("[]");
@ -3001,7 +3064,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
if (!flagForMtOrDepository) { if (!flagForMtOrDepository) {
// 如果是通过类型 // 如果是通过类型
// 获取当前仓库下的子订单 // 获取具体物料类型
Long materialTypeId = inventory.getMaterialTypeId(); Long materialTypeId = inventory.getMaterialTypeId();
if (!findThisIdIsExistForMaterialType(materialTypeIdList, materialTypeId)) { if (!findThisIdIsExistForMaterialType(materialTypeIdList, materialTypeId)) {
// 如果当前仓库id没有存入过 // 如果当前仓库id没有存入过
@ -3054,7 +3117,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent); JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId(), userAgent);
} }
}).start(); }).start();
} else { }
else {
// 如果是通过仓库 // 如果是通过仓库
@ -3120,8 +3184,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
String depositoryManager = record.getDepositoryManager(); String depositoryManager = record.getDepositoryManager();
String[] split = depositoryManager.split(","); String[] split = depositoryManager.split(",");
StringBuilder QyWxUid = new StringBuilder(); StringBuilder QyWxUid = new StringBuilder();
for (int i = 0; i < split.length; i++) { for (String s : split) {
String s = split[i];
if ("".equals(s)) { if ("".equals(s)) {
continue; continue;
} }
@ -3142,7 +3205,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
redisTemplate.opsForHash().put("record:" + record.getId(), "minRecord", minRecordByMain.toString()); redisTemplate.opsForHash().put("record:" + record.getId(), "minRecord", minRecordByMain.toString());
map.put("state", "仓储中心负责人审核通过"); map.put("state", "仓储中心负责人审核通过");
if (flagFordepartmentTime) { if (flagFordepartmentTime || flagForOpenDepository == 2) {
map.put("state", "部门负责人审核通过"); map.put("state", "部门负责人审核通过");
map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime)); map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("depositoryManagerPass", 4); map.put("depositoryManagerPass", 4);
@ -3150,7 +3213,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("departmentheadPass", 1); map.put("departmentheadPass", 1);
} }
} else { }
else {
updateInventoryForOutRefused(record); updateInventoryForOutRefused(record);
result = "驳回"; result = "驳回";
map.put("pass", 2); 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 cn.hutool.core.lang.Snowflake;
import com.alibaba.fastjson.JSONArray; 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.config.QyWxConfig;
import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.DepositoryMapper; import com.dreamchaser.depository_manage.mapper.DepositoryMapper;
import com.dreamchaser.depository_manage.mapper.PlaceMapper; import com.dreamchaser.depository_manage.mapper.PlaceMapper;
@ -81,8 +83,7 @@ public class DepositoryServiceImpl implements DepositoryService {
code = "GK" + dnamePinYin + "-01"; code = "GK" + dnamePinYin + "-01";
} }
} }
} } else {
else {
map.put("parentId", map.get("depositoryId")); map.put("parentId", map.get("depositoryId"));
map.remove("depositoryId"); map.remove("depositoryId");
// 获取当前仓库父仓库 // 获取当前仓库父仓库
@ -114,7 +115,7 @@ public class DepositoryServiceImpl implements DepositoryService {
Double maxNumber = ObjectFormatUtil.toDouble(map.get("maxNumber")); Double maxNumber = ObjectFormatUtil.toDouble(map.get("maxNumber"));
if ((int) (maxNumber * 100) > 999999999) { if ((int) (maxNumber * 100) > 999999999) {
map.put("maxNumber", 999999999); map.put("maxNumber", 999999999);
}else{ } else {
map.put("maxNumber", maxNumber * 100); map.put("maxNumber", maxNumber * 100);
} }
return depositoryMapper.insertDepository(map); return depositoryMapper.insertDepository(map);
@ -224,8 +225,8 @@ public class DepositoryServiceImpl implements DepositoryService {
Double maxNumber = ObjectFormatUtil.toDouble(map.get("maxNumber")); Double maxNumber = ObjectFormatUtil.toDouble(map.get("maxNumber"));
if ((int) (maxNumber * 100) > 999999999) { if ((int) (maxNumber * 100) > 999999999) {
map.put("maxNumber", 999999999); map.put("maxNumber", 999999999);
}else{ } else {
map.put("maxNumber",maxNumber * 100); map.put("maxNumber", maxNumber * 100);
} }
return depositoryMapper.updateDepository(map); return depositoryMapper.updateDepository(map);
} }
@ -397,6 +398,7 @@ public class DepositoryServiceImpl implements DepositoryService {
/** /**
* 构造仓库树 * 构造仓库树
*
* @return * @return
*/ */
@Override @Override
@ -766,6 +768,31 @@ public class DepositoryServiceImpl implements DepositoryService {
return toDayInventoryByDNameTest; 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) { private boolean hasDepository(List<Depository> list, Depository o) {
boolean flag = false; boolean flag = false;
for (Depository depository : list) { for (Depository depository : list) {
@ -777,6 +804,75 @@ public class DepositoryServiceImpl implements DepositoryService {
return flag; 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> { 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; List<Integer> depositoryIdList;
@ -954,7 +981,7 @@ public class DepositoryServiceImpl implements DepositoryService {
*/ */
List<Depository> depositories = depositoryMapper.selectDepositoryByIds(depositoryIdList); List<Depository> depositories = depositoryMapper.selectDepositoryByIds(depositoryIdList);
List<Object> result = new ArrayList<>(); List<Object> result = new ArrayList<>();
for (Depository depository:depositories for (Depository depository : depositories
) { ) {
Map<String, Object> stringObjectMap = InitTreeMenus2(depository, new ArrayList<>()); Map<String, Object> stringObjectMap = InitTreeMenus2(depository, new ArrayList<>());
result.add(stringObjectMap); 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"); 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); textNotice.setTemplate_card(text_notice);
String s = JSONObject.toJSONString(textNotice); String s = JSONObject.toJSONString(textNotice);
@ -1368,8 +1368,8 @@ public class QyWxOperationService {
map.put("agentid", QyWxConfig.AgentId); map.put("agentid", QyWxConfig.AgentId);
map.put("response_code", response_code); map.put("response_code", response_code);
map.put("enable_id_trans", 0); map.put("enable_id_trans", 0);
TemplateCard_text_notice text_notice = getTextNoticeCard(outMinId,quantity); TemplateCard_text_notice text_notice = getTextNoticeCard(outMinId, quantity);
map.put("template_card",text_notice); map.put("template_card", text_notice);
String jsonString = JSONObject.toJSONString(map); String jsonString = JSONObject.toJSONString(map);
System.out.println(jsonString); System.out.println(jsonString);
String s1 = HttpUtils.doPost(url, jsonString); String s1 = HttpUtils.doPost(url, jsonString);
@ -1409,6 +1409,9 @@ public class QyWxOperationService {
// 获取当前出库单是2代表是通过开放仓库申请1代表不是 // 获取当前出库单是2代表是通过开放仓库申请1代表不是
Integer flagForOpenDepository = mainRecord.getFlagForOpenDepository(); Integer flagForOpenDepository = mainRecord.getFlagForOpenDepository();
// 事先定义其他部门负责人列表
List<String> otherDepartmentIdList = null;
// 获取当前出库明细 // 获取当前出库明细
List<ApplicationOutRecordMin> minRecordList = depositoryRecordMapper.findApplicationOutRecordMinByParent(mainId); List<ApplicationOutRecordMin> minRecordList = depositoryRecordMapper.findApplicationOutRecordMinByParent(mainId);
// 定义审批模板 // 定义审批模板
@ -1759,9 +1762,9 @@ public class QyWxOperationService {
approval_template_approver_list.add(approval_template_approver_Label); 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); qywxDepartment wxDepartment = QyWxConfig.getQyWxDepartment(userAgent, wechatorganizationid);
// 获取部门负责人id列表 // 获取部门负责人id列表
List<String> otherDepartmentIdList = new ArrayList<>(wxDepartment.getDepartment_leader()); otherDepartmentIdList = new ArrayList<>(wxDepartment.getDepartment_leader());
otherDepartmentIdList = new ArrayList<String>(Collections.singleton("PangFuZhen")); otherDepartmentIdList = new ArrayList<String>(Collections.singleton("PangFuZhen"));
@ -1789,7 +1792,6 @@ public class QyWxOperationService {
} }
for (Integer depositoryId : depositoryIdList for (Integer depositoryId : depositoryIdList
) { ) {
@ -1829,6 +1831,11 @@ public class QyWxOperationService {
String s = HttpUtils.doPost(url, jsonString); String s = HttpUtils.doPost(url, jsonString);
JSONObject jsonObject = JSONObject.parseObject(s); JSONObject jsonObject = JSONObject.parseObject(s);
if (otherDepartmentIdList != null) {
jsonObject.put("otherDepartmentIdList", JSONObject.toJSONString(otherDepartmentIdList));
} else {
jsonObject.put("otherDepartmentIdList", "[]");
}
return jsonObject; return jsonObject;
} }
@ -2315,7 +2322,7 @@ public class QyWxOperationService {
UserByPort userByPort = PortConfig.findUserByPortByNumber(manager); UserByPort userByPort = PortConfig.findUserByPortByNumber(manager);
Map<String, String> contact_principal = new HashMap<>(); Map<String, String> contact_principal = new HashMap<>();
String workwechat1 = userByPort.getWorkwechat(); String workwechat1 = userByPort.getWorkwechat();
if(workwechat1 == null || "".equals(workwechat1)){ if (workwechat1 == null || "".equals(workwechat1)) {
workwechat1 = userByPort.getWechat(); workwechat1 = userByPort.getWechat();
} }
contact_principal.put("userid", workwechat1); contact_principal.put("userid", workwechat1);

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

@ -99,7 +99,7 @@
</td> </td>
</tr> </tr>
<tr id="depositoryManagerNameT" style="display: none"> <tr id="depositoryManagerNameT" style="display: none">
<td>仓储负责人</td> <td th:text="${depositoryManagerText}"></td>
<td id="depositoryManagerName" th:text="${record.getDepositoryManagerName()}"> <td id="depositoryManagerName" th:text="${record.getDepositoryManagerName()}">
仓储负责人 仓储负责人
</td> </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()}"> <input id="depositoryManagerPass" style="display: none" th:value="${record.getDepositoryManagerPass()}">
<tr id="depositoryManagerNameT" style="display: none"> <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>
<tr id="depositoryManagerNameMessageT" style="display: none"> <tr id="depositoryManagerNameMessageT" style="display: none">
<td>仓储负责人备注</td> <td th:text="${depositoryManagerText}+'备注'"></td>
<td id="depositoryManagerNameMessage" th:text="${record.getDepositoryManagerMessage()}">2016-11-28</td> <td id="depositoryManagerNameMessage" th:text="${record.getDepositoryManagerMessage()}">2016-11-28</td>
</tr> </tr>
<tr id="depositoryManagerNameTimeT" style="display: none"> <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> <td id="depositoryManagerNameTime" th:text="${record.getDepositoryManagerTime().equals('1970-01-01 08:00:00')?'':record.getDepositoryManagerTime()}">2016-11-28</td>
</tr> </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) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class OtherTest { public class OtherTest {
@Autowired
DepositoryMapper depositoryMapper;
@Test @Test
public void 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" <resultMap id="simpleApplicationInRecordMap"
type="com.dreamchaser.depository_manage.entity.SimpleApplicationInRecord"> type="com.dreamchaser.depository_manage.entity.SimpleApplicationInRecord">
<id property="id" column="airid" jdbcType="INTEGER"/> <id property="id" column="airid" jdbcType="INTEGER"/>
<result column="applicantId" property="applicantId" jdbcType="INTEGER"/> <result column="applicant_id" property="applicantId" jdbcType="INTEGER"/>
<result column="applicantTime" property="applicantTime" jdbcType="INTEGER"/> <result column="applicant_time" property="applicantTime" jdbcType="INTEGER"/>
<result column="applyRemark" property="applyRemark" jdbcType="VARCHAR"/> <result column="applyRemark" property="applyRemark" jdbcType="VARCHAR"/>
</resultMap> </resultMap>
<!-- 字段映射 --> <!-- 字段映射 -->

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

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

Loading…
Cancel
Save