Browse Source

完成企业微信无感登录、完成消息推送功能

lwx_dev
erdanergou 3 years ago
parent
commit
357db56f99
  1. 4
      .idea/encodings.xml
  2. 27
      pom.xml
  3. 78
      src/main/java/com/dreamchaser/depository_manage/config/JM_3DES.java
  4. 47
      src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java
  5. 77
      src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java
  6. 61
      src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/AesException.java
  7. 26
      src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/ByteGroup.java
  8. 67
      src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/PKCS7Encoder.java
  9. 61
      src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/SHA1.java
  10. 289
      src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/WXBizMsgCrypt.java
  11. 104
      src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/XMLParse.java
  12. 27
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/BaseMessage.java
  13. 15
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/ButtonInteraction.java
  14. 8
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/MessageByMarkDown.java
  15. 18
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_action.java
  16. 25
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_action_menu.java
  17. 33
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button.java
  18. 74
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button_interaction.java
  19. 28
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button_selection.java
  20. 18
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button_selection_option.java
  21. 33
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_card_action.java
  22. 18
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_emphasis_content.java
  23. 46
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_horizontal_content.java
  24. 30
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_jump.java
  25. 24
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_main_title.java
  26. 28
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_source.java
  27. 74
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_text_notice.java
  28. 37
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/Template_quote_area.java
  29. 16
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TextNotice.java
  30. 7
      src/main/java/com/dreamchaser/depository_manage/config/WebMvcConfig.java
  31. 28
      src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java
  32. 141
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java
  33. 160
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java
  34. 20
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  35. 349
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  36. 276
      src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java
  37. 56
      src/main/java/com/dreamchaser/depository_manage/controller/UserController.java
  38. 2
      src/main/java/com/dreamchaser/depository_manage/entity/ApplicationOutRecord.java
  39. 17
      src/main/java/com/dreamchaser/depository_manage/entity/CallBackLog.java
  40. 18
      src/main/java/com/dreamchaser/depository_manage/entity/UserByPort.java
  41. 53
      src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java
  42. 28
      src/main/java/com/dreamchaser/depository_manage/mapper/CallBackLogMapper.java
  43. 35
      src/main/java/com/dreamchaser/depository_manage/mapper/CallBackLogMapper.xml
  44. 10
      src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml
  45. 102
      src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordMinP.java
  46. 2
      src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordP.java
  47. 6
      src/main/java/com/dreamchaser/depository_manage/pojo/UserByPortP.java
  48. 29
      src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/CallBackBaseXml.java
  49. 22
      src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/CallBackXMl_DLWZ.java
  50. 15
      src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/CallBackXml_button.java
  51. 16
      src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/ButtonInteraction.java
  52. 73
      src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard.java
  53. 16
      src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_SelectedItems.java
  54. 18
      src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_action.java
  55. 27
      src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_action_menu.java
  56. 34
      src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_button.java
  57. 40
      src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_button_selection.java
  58. 23
      src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_button_selection_option.java
  59. 34
      src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_card_action.java
  60. 47
      src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_horizontal_content.java
  61. 27
      src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_main_title.java
  62. 31
      src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_source.java
  63. 38
      src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/Template_quote_area.java
  64. 2
      src/main/java/com/dreamchaser/depository_manage/security/pool/AuthenticationTokenPool.java
  65. 33
      src/main/java/com/dreamchaser/depository_manage/security/pool/UserKeyAndTokenPool.java
  66. 21
      src/main/java/com/dreamchaser/depository_manage/service/CallBackLogService.java
  67. 23
      src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java
  68. 11
      src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java
  69. 35
      src/main/java/com/dreamchaser/depository_manage/service/impl/CallBackLogServiceImpl.java
  70. 400
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  71. 48
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java
  72. 31
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  73. 497
      src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java
  74. 30
      src/main/java/com/dreamchaser/depository_manage/utils/HttpUtils.java
  75. 117
      src/main/java/com/dreamchaser/depository_manage/utils/QyWxXMLUtils.java
  76. 7
      src/main/resources/application-test.yml
  77. 1
      src/main/resources/static/api/init.json
  78. 1
      src/main/resources/static/api/init_checker.json
  79. 1
      src/main/resources/static/api/init_reviewer.json
  80. 1
      src/main/resources/static/api/init_user.json
  81. 20
      src/main/resources/static/api/table-in.json
  82. 18
      src/main/resources/static/api/table-out.json
  83. 96
      src/main/resources/static/api/tableSelect.json
  84. 1
      src/main/resources/static/api/test.json
  85. 55
      src/main/resources/static/css/layuimini.css
  86. 14
      src/main/resources/static/css/public.css
  87. BIN
      src/main/resources/static/images/logo_back.ico
  88. 10027
      src/main/resources/static/js/ZXing.js
  89. 54
      src/main/resources/static/js/cookie.js
  90. 1173
      src/main/resources/static/js/jsQR.js
  91. 5
      src/main/resources/static/js/lay-module/cardTable/cardTable.css
  92. 38
      src/main/resources/static/js/lay-module/cardTable/cardTable.js
  93. 15838
      src/main/resources/static/js/lay-module/echarts/echarts.js
  94. 2
      src/main/resources/static/js/lay-module/echarts/echartsTheme.js
  95. 61
      src/main/resources/static/js/lay-module/layarea/layarea.js
  96. 18
      src/main/resources/static/js/lay-module/layuimini/miniAdmin.js
  97. 110
      src/main/resources/static/js/lay-module/layuimini/miniMenu.js
  98. 10
      src/main/resources/static/js/lay-module/layuimini/miniTab.js
  99. 2
      src/main/resources/static/js/lay-module/layuimini/miniTheme.js
  100. 2
      src/main/resources/static/js/lay-module/layuimini/miniTongji.js

4
.idea/encodings.xml

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="Encoding"> <component name="Encoding" native2AsciiForPropertiesFiles="true" defaultCharsetForPropertiesFiles="UTF-8">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources/templates/pages/scanQrCode/scanQrCode2.html" charset="UTF-8" /> <file url="PROJECT" charset="UTF-8" />
</component> </component>
</project> </project>

27
pom.xml

@ -195,9 +195,36 @@
<version>3.4.0</version> <version>3.4.0</version>
</dependency> </dependency>
<!-- 用于检测访问设备类型-->
<dependency>
<groupId>org.springframework.mobile</groupId>
<artifactId>spring-mobile-starter</artifactId>
<version>2.0.0.M2</version>
</dependency>
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.8.8</version>
</dependency>
</dependencies> </dependencies>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
<dependency> <dependency>

78
src/main/java/com/dreamchaser/depository_manage/config/JM_3DES.java

@ -0,0 +1,78 @@
package com.dreamchaser.depository_manage.config;
import org.apache.commons.codec.digest.DigestUtils;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
/**
* 用于3DES加密解密
*/
public class JM_3DES {
public static String JM_Key = "scanQrCode";
/**
* 获取key
* @param key
* @return
*/
public static byte[] hex(String key){
String f = DigestUtils.md5Hex(key);
byte[] bkeys = new String(f).getBytes();
byte[] enk = new byte[24];
for (int i=0;i<24;i++){
enk[i] = bkeys[i];
}
return enk;
}
/**
* 3DES加密
* @param key 密钥
* @param srcStr 需要加密的字符串
* @return
*/
public static String encode3Des(String key, String srcStr){
byte[] keybyte = hex(key);
byte[] src = srcStr.getBytes();
try {
//生成密钥
SecretKey deskey = new SecretKeySpec(keybyte, "DESede");
//加密
Cipher c1 = Cipher.getInstance("DESede");
c1.init(Cipher.ENCRYPT_MODE, deskey);
String pwd = (new BASE64Encoder()).encodeBuffer(c1.doFinal(src));
return pwd;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
/**
* 3DES解密
* @param key 加密密钥
* @param desStr 需要解密的字符串
* @return
*/
public static String decode3Des(String key, String desStr){
byte[] keybyte = hex(key);
try {
byte[] src = (new BASE64Decoder()).decodeBuffer(desStr);
//生成密钥
SecretKey deskey = new SecretKeySpec(keybyte, "DESede");
//解密
Cipher c1 = Cipher.getInstance("DESede");
c1.init(Cipher.DECRYPT_MODE, deskey);
String pwd = new String(c1.doFinal(src));
return pwd;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
}

47
src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java

@ -1,5 +1,6 @@
package com.dreamchaser.depository_manage.config; package com.dreamchaser.depository_manage.config;
import com.alibaba.fastjson.JSON;
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.controller.PageController; import com.dreamchaser.depository_manage.controller.PageController;
@ -10,6 +11,7 @@ import com.dreamchaser.depository_manage.utils.HttpUtils;
import lombok.Data; import lombok.Data;
import org.apache.http.protocol.HTTP; import org.apache.http.protocol.HTTP;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@ -27,12 +29,13 @@ public class PortConfig {
public static String external_url_6666 = "http://172.20.2.87:6666"; public static String external_url_6666 = "http://172.20.2.87:6666";
// public static String external_url_6666 = "http://127.0.0.1:6666"; // public static String external_url_6666 = "http://127.0.0.1:6666";
/** /**
* 获取相应部门的部门负责人 * 获取相应部门的部门负责人
* @param administration * @param administration
* @return * @return
*/ */
public static List<UserByPort> findDepartmentHeadByUser(Administration administration){ public static List<UserByPort> findDepartmentHeadByUser(Administration administration, UserByPort userToken){
String url = PortConfig.external_url + "/org/positionlist"; String url = PortConfig.external_url + "/org/positionlist";
Integer maindeparment = administration.getId(); Integer maindeparment = administration.getId();
Map<String,Object> map = new HashMap<>(); Map<String,Object> map = new HashMap<>();
@ -42,7 +45,7 @@ public class PortConfig {
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8); post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userToken);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -62,10 +65,48 @@ public class PortConfig {
Map<String,Object> param = new HashMap<>(); Map<String,Object> param = new HashMap<>();
Post userPost = userPostList.get(i); Post userPost = userPostList.get(i);
param.put("position",userPost.getId()); param.put("position",userPost.getId());
List<UserByPort> userByPorts = PageController.FindUserByMap(param); List<UserByPort> userByPorts = PageController.FindUserByMap(param,userToken);
userByPortList.addAll(userByPorts); userByPortList.addAll(userByPorts);
} }
return userByPortList; return userByPortList;
} }
// 通过获取的企业微信UserId获取数据库中的用户以及对应key与token
public static Map<String,Object> findUserByQyWxUserId(String userId){
String url = external_url +"/staff/wechat_give_uscont";
Map<String,Object> result = new HashMap<>();
Map<String,Object> map = new HashMap<>();
map.put("openid",userId);
String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
post = HttpUtils.send(url,paramObject, HTTP.UTF_8,null);
} catch (IOException e) {
e.printStackTrace();
}
JSONObject jsonObject = JSONObject.parseObject(post);
JSONObject data = (JSONObject) jsonObject.get("data");
UserByPort userByPort = JSONObject.toJavaObject((JSONObject) data.get("userinfo"), UserByPort.class);
String userKey = data.getString("key");
String userToken = data.getString("token");
result.put("key",userKey);
result.put("token",userToken);
result.put("user",userByPort);
return result;
}
// 修改员工微信或企业微信UserId
public static void editUserWechatOpenid(Map<String,String> map,UserByPort userByPort){
String url = external_url+"/staff/edit_us_wechat_openid";
String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userByPort);
} catch (IOException e) {
e.printStackTrace();
}
}
} }

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

@ -0,0 +1,77 @@
package com.dreamchaser.depository_manage.config;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.QyWx_template_card.*;
import com.dreamchaser.depository_manage.utils.HttpUtils;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import lombok.Data;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
// 用于实现企业微信相关功能
@Data
public class QyWxConfig {
public static String corpid = "ww02f310301953277a"; // 企业的CorpID
public static String secret = "GYwyoAGwMwumAVFrFn-RZIc2q11P3pm8NWY9pWDjLqw"; // 应用的凭证密钥
public static int AgentId = 1000037; //应用agentid
public static String callBackUrl = "https://jy.hxgk.group/QyWxLogin";
public static String token = ""; //access_token
public static String code = ""; //userCode
public static String sendMessage_url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN";
// 用于回调配置的token
public static String sToken = "sM4MFE44fAKdtqvq81HYygqmrdUn";
// 用于回调配置的EncodingAESKey
public static String sEncodingAESKey = "10cruMoq3ixrQQngJcMN6CzOYrHWmHMpxp2Xn5iYrsk";
// 用于获取企业微信对应token
public static String GetQYWXToken(){
String url = String.format(" https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s",QyWxConfig.corpid,QyWxConfig.secret);
String get = HttpUtils.doGet(url);
JSONObject jsonObject = JSONObject.parseObject(get);
Integer errcord = ObjectFormatUtil.toInteger(jsonObject.get("errcode"));
String accessToken = (String) jsonObject.get("access_token");
String errmsg = (String) jsonObject.get("errmsg");
if(errcord == 0){
// 如果成功获取access_token
return accessToken;
}else{
// 否则返回空值
return "visitToFail:"+errmsg;
}
}
// 根据获取到的用户code以及token获取用户id
public static JSONObject GetQYWXUserId(){
String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=%s&code=%s",QyWxConfig.token,QyWxConfig.code);
String get = HttpUtils.doGet(url);
JSONObject jsonObject = JSONObject.parseObject(get);
return jsonObject;
}
// 用于拼接发送链接
public static String getQYWXCodeUrl(){
String encode = null;
try {
encode = URLEncoder.encode(QyWxConfig.callBackUrl, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String url = String.format("https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_base&agentid=%s#wechat_redirect",QyWxConfig.corpid,encode,QyWxConfig.secret);
return url;
}
}

61
src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/AesException.java

@ -0,0 +1,61 @@
package com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes;
@SuppressWarnings("serial")
public class AesException extends Exception {
public final static int OK = 0;
public final static int ValidateSignatureError = -40001;
public final static int ParseXmlError = -40002;
public final static int ComputeSignatureError = -40003;
public final static int IllegalAesKey = -40004;
public final static int ValidateCorpidError = -40005;
public final static int EncryptAESError = -40006;
public final static int DecryptAESError = -40007;
public final static int IllegalBuffer = -40008;
//public final static int EncodeBase64Error = -40009;
//public final static int DecodeBase64Error = -40010;
//public final static int GenReturnXmlError = -40011;
private int code;
private static String getMessage(int code) {
switch (code) {
case ValidateSignatureError:
return "签名验证错误";
case ParseXmlError:
return "xml解析失败";
case ComputeSignatureError:
return "sha加密生成签名失败";
case IllegalAesKey:
return "SymmetricKey非法";
case ValidateCorpidError:
return "corpid校验失败";
case EncryptAESError:
return "aes加密失败";
case DecryptAESError:
return "aes解密失败";
case IllegalBuffer:
return "解密后得到的buffer非法";
// case EncodeBase64Error:
// return "base64加密错误";
// case DecodeBase64Error:
// return "base64解密错误";
// case GenReturnXmlError:
// return "xml生成失败";
default:
return null; // cannot be
}
}
public int getCode() {
return code;
}
AesException(int code) {
super(getMessage(code));
this.code = code;
}
}

26
src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/ByteGroup.java

@ -0,0 +1,26 @@
package com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes;
import java.util.ArrayList;
class ByteGroup {
ArrayList<Byte> byteContainer = new ArrayList<Byte>();
public byte[] toBytes() {
byte[] bytes = new byte[byteContainer.size()];
for (int i = 0; i < byteContainer.size(); i++) {
bytes[i] = byteContainer.get(i);
}
return bytes;
}
public ByteGroup addBytes(byte[] bytes) {
for (byte b : bytes) {
byteContainer.add(b);
}
return this;
}
public int size() {
return byteContainer.size();
}
}

67
src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/PKCS7Encoder.java

@ -0,0 +1,67 @@
/**
* 对企业微信发送给企业后台的消息加解密示例代码.
*
* @copyright Copyright (c) 1998-2014 Tencent Inc.
*/
// ------------------------------------------------------------------------
package com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes;
import java.nio.charset.Charset;
import java.util.Arrays;
/**
* 提供基于PKCS7算法的加解密接口.
*/
class PKCS7Encoder {
static Charset CHARSET = Charset.forName("utf-8");
static int BLOCK_SIZE = 32;
/**
* 获得对明文进行补位填充的字节.
*
* @param count 需要进行填充补位操作的明文字节个数
* @return 补齐用的字节数组
*/
static byte[] encode(int count) {
// 计算需要填充的位数
int amountToPad = BLOCK_SIZE - (count % BLOCK_SIZE);
if (amountToPad == 0) {
amountToPad = BLOCK_SIZE;
}
// 获得补位所用的字符
char padChr = chr(amountToPad);
String tmp = new String();
for (int index = 0; index < amountToPad; index++) {
tmp += padChr;
}
return tmp.getBytes(CHARSET);
}
/**
* 删除解密后明文的补位字符
*
* @param decrypted 解密后的明文
* @return 删除补位字符后的明文
*/
static byte[] decode(byte[] decrypted) {
int pad = (int) decrypted[decrypted.length - 1];
if (pad < 1 || pad > 32) {
pad = 0;
}
return Arrays.copyOfRange(decrypted, 0, decrypted.length - pad);
}
/**
* 将数字转化成ASCII码对应的字符用于对明文进行补码
*
* @param a 需要转化的数字
* @return 转化得到的字符
*/
static char chr(int a) {
byte target = (byte) (a & 0xFF);
return (char) target;
}
}

61
src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/SHA1.java

@ -0,0 +1,61 @@
/**
* 对企业微信发送给企业后台的消息加解密示例代码.
*
* @copyright Copyright (c) 1998-2014 Tencent Inc.
*/
// ------------------------------------------------------------------------
package com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes;
import java.security.MessageDigest;
import java.util.Arrays;
/**
* SHA1 class
*
* 计算消息签名接口.
*/
class SHA1 {
/**
* 用SHA1算法生成安全签名
* @param token 票据
* @param timestamp 时间戳
* @param nonce 随机字符串
* @param encrypt 密文
* @return 安全签名
* @throws AesException
*/
public static String getSHA1(String token, String timestamp, String nonce, String encrypt) throws AesException
{
try {
String[] array = new String[] { token, timestamp, nonce, encrypt };
StringBuffer sb = new StringBuffer();
// 字符串排序
Arrays.sort(array);
for (int i = 0; i < 4; i++) {
sb.append(array[i]);
}
String str = sb.toString();
// SHA1签名生成
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(str.getBytes());
byte[] digest = md.digest();
StringBuffer hexstr = new StringBuffer();
String shaHex = "";
for (int i = 0; i < digest.length; i++) {
shaHex = Integer.toHexString(digest[i] & 0xFF);
if (shaHex.length() < 2) {
hexstr.append(0);
}
hexstr.append(shaHex);
}
return hexstr.toString();
} catch (Exception e) {
e.printStackTrace();
throw new AesException(AesException.ComputeSignatureError);
}
}
}

289
src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/WXBizMsgCrypt.java

@ -0,0 +1,289 @@
/**
* 对企业微信发送给企业后台的消息加解密示例代码.
*
* @copyright Copyright (c) 1998-2014 Tencent Inc.
*/
// ------------------------------------------------------------------------
/**
* 针对org.apache.commons.codec.binary.Base64
* 需要导入架包commons-codec-1.9或commons-codec-1.8等其他版本
* 官方下载地址http://commons.apache.org/proper/commons-codec/download_codec.cgi
*/
package com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Random;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
/**
* 提供接收和推送给企业微信消息的加解密接口(UTF8编码的字符串).
* <ol>
* <li>第三方回复加密消息给企业微信</li>
* <li>第三方收到企业微信发送的消息验证消息的安全性并对消息进行解密</li>
* </ol>
* 说明异常java.security.InvalidKeyException:illegal Key Size的解决方案
* <ol>
* <li>在官方网站下载JCE无限制权限策略文件JDK7的下载地址
* http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html</li>
* <li>下载后解压可以看到local_policy.jar和US_export_policy.jar以及readme.txt</li>
* <li>如果安装了JRE将两个jar文件放到%JRE_HOME%\lib\security目录下覆盖原来的文件</li>
* <li>如果安装了JDK将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件</li>
* </ol>
*/
public class WXBizMsgCrypt {
static Charset CHARSET = Charset.forName("utf-8");
Base64 base64 = new Base64();
byte[] aesKey;
String token;
String receiveid;
/**
* 构造函数
* @param token 企业微信后台开发者设置的token
* @param encodingAesKey 企业微信后台开发者设置的EncodingAESKey
* @param receiveid, 不同场景含义不同详见文档
*
* @throws AesException 执行失败请查看该异常的错误码和具体的错误信息
*/
public WXBizMsgCrypt(String token, String encodingAesKey, String receiveid) throws AesException {
if (encodingAesKey.length() != 43) {
throw new AesException(AesException.IllegalAesKey);
}
this.token = token;
this.receiveid = receiveid;
aesKey = Base64.decodeBase64(encodingAesKey + "=");
}
// 生成4个字节的网络字节序
byte[] getNetworkBytesOrder(int sourceNumber) {
byte[] orderBytes = new byte[4];
orderBytes[3] = (byte) (sourceNumber & 0xFF);
orderBytes[2] = (byte) (sourceNumber >> 8 & 0xFF);
orderBytes[1] = (byte) (sourceNumber >> 16 & 0xFF);
orderBytes[0] = (byte) (sourceNumber >> 24 & 0xFF);
return orderBytes;
}
// 还原4个字节的网络字节序
int recoverNetworkBytesOrder(byte[] orderBytes) {
int sourceNumber = 0;
for (int i = 0; i < 4; i++) {
sourceNumber <<= 8;
sourceNumber |= orderBytes[i] & 0xff;
}
return sourceNumber;
}
// 随机生成16位字符串
String getRandomStr() {
String base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < 16; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}
/**
* 对明文进行加密.
*
* @param text 需要加密的明文
* @return 加密后base64编码的字符串
* @throws AesException aes加密失败
*/
String encrypt(String randomStr, String text) throws AesException {
ByteGroup byteCollector = new ByteGroup();
byte[] randomStrBytes = randomStr.getBytes(CHARSET);
byte[] textBytes = text.getBytes(CHARSET);
byte[] networkBytesOrder = getNetworkBytesOrder(textBytes.length);
byte[] receiveidBytes = receiveid.getBytes(CHARSET);
// randomStr + networkBytesOrder + text + receiveid
byteCollector.addBytes(randomStrBytes);
byteCollector.addBytes(networkBytesOrder);
byteCollector.addBytes(textBytes);
byteCollector.addBytes(receiveidBytes);
// ... + pad: 使用自定义的填充方式对明文进行补位填充
byte[] padBytes = PKCS7Encoder.encode(byteCollector.size());
byteCollector.addBytes(padBytes);
// 获得最终的字节流, 未加密
byte[] unencrypted = byteCollector.toBytes();
try {
// 设置加密模式为AES的CBC模式
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
SecretKeySpec keySpec = new SecretKeySpec(aesKey, "AES");
IvParameterSpec iv = new IvParameterSpec(aesKey, 0, 16);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv);
// 加密
byte[] encrypted = cipher.doFinal(unencrypted);
// 使用BASE64对加密后的字符串进行编码
String base64Encrypted = base64.encodeToString(encrypted);
return base64Encrypted;
} catch (Exception e) {
e.printStackTrace();
throw new AesException(AesException.EncryptAESError);
}
}
/**
* 对密文进行解密.
*
* @param text 需要解密的密文
* @return 解密得到的明文
* @throws AesException aes解密失败
*/
String decrypt(String text) throws AesException {
byte[] original;
try {
// 设置解密模式为AES的CBC模式
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
SecretKeySpec key_spec = new SecretKeySpec(aesKey, "AES");
IvParameterSpec iv = new IvParameterSpec(Arrays.copyOfRange(aesKey, 0, 16));
cipher.init(Cipher.DECRYPT_MODE, key_spec, iv);
// 使用BASE64对密文进行解码
byte[] encrypted = Base64.decodeBase64(text);
// 解密
original = cipher.doFinal(encrypted);
} catch (Exception e) {
e.printStackTrace();
throw new AesException(AesException.DecryptAESError);
}
String xmlContent, from_receiveid;
try {
// 去除补位字符
byte[] bytes = PKCS7Encoder.decode(original);
// 分离16位随机字符串,网络字节序和receiveid
byte[] networkOrder = Arrays.copyOfRange(bytes, 16, 20);
int xmlLength = recoverNetworkBytesOrder(networkOrder);
xmlContent = new String(Arrays.copyOfRange(bytes, 20, 20 + xmlLength), CHARSET);
from_receiveid = new String(Arrays.copyOfRange(bytes, 20 + xmlLength, bytes.length),
CHARSET);
} catch (Exception e) {
e.printStackTrace();
throw new AesException(AesException.IllegalBuffer);
}
// receiveid不相同的情况
if (!from_receiveid.equals(receiveid)) {
throw new AesException(AesException.ValidateCorpidError);
}
return xmlContent;
}
/**
* 将企业微信回复用户的消息加密打包.
* <ol>
* <li>对要发送的消息进行AES-CBC加密</li>
* <li>生成安全签名</li>
* <li>将消息密文和安全签名打包成xml格式</li>
* </ol>
*
* @param replyMsg 企业微信待回复用户的消息xml格式的字符串
* @param timeStamp 时间戳可以自己生成也可以用URL参数的timestamp
* @param nonce 随机串可以自己生成也可以用URL参数的nonce
*
* @return 加密后的可以直接回复用户的密文包括msg_signature, timestamp, nonce, encrypt的xml格式的字符串
* @throws AesException 执行失败请查看该异常的错误码和具体的错误信息
*/
public String EncryptMsg(String replyMsg, String timeStamp, String nonce) throws AesException {
// 加密
String encrypt = encrypt(getRandomStr(), replyMsg);
// 生成安全签名
if (timeStamp == "") {
timeStamp = Long.toString(System.currentTimeMillis());
}
String signature = SHA1.getSHA1(token, timeStamp, nonce, encrypt);
// System.out.println("发送给平台的签名是: " + signature[1].toString());
// 生成发送的xml
String result = XMLParse.generate(encrypt, signature, timeStamp, nonce);
return result;
}
/**
* 检验消息的真实性并且获取解密后的明文.
* <ol>
* <li>利用收到的密文生成安全签名进行签名验证</li>
* <li>若验证通过则提取xml中的加密消息</li>
* <li>对消息进行解密</li>
* </ol>
*
* @param msgSignature 签名串对应URL参数的msg_signature
* @param timeStamp 时间戳对应URL参数的timestamp
* @param nonce 随机串对应URL参数的nonce
* @param postData 密文对应POST请求的数据
*
* @return 解密后的原文
* @throws AesException 执行失败请查看该异常的错误码和具体的错误信息
*/
public String DecryptMsg(String msgSignature, String timeStamp, String nonce, String postData)
throws AesException {
// 密钥,公众账号的app secret
// 提取密文
Object[] encrypt = XMLParse.extract(postData);
// 验证安全签名
String signature = SHA1.getSHA1(token, timeStamp, nonce, encrypt[1].toString());
// 和URL中的签名比较是否相等
// System.out.println("第三方收到URL中的签名:" + msg_sign);
// System.out.println("第三方校验签名:" + signature);
if (!signature.equals(msgSignature)) {
throw new AesException(AesException.ValidateSignatureError);
}
// 解密
String result = decrypt(encrypt[1].toString());
return result;
}
/**
* 验证URL
* @param msgSignature 签名串对应URL参数的msg_signature
* @param timeStamp 时间戳对应URL参数的timestamp
* @param nonce 随机串对应URL参数的nonce
* @param echoStr 随机串对应URL参数的echostr
*
* @return 解密之后的echostr
* @throws AesException 执行失败请查看该异常的错误码和具体的错误信息
*/
public String VerifyURL(String msgSignature, String timeStamp, String nonce, String echoStr)
throws AesException {
String signature = SHA1.getSHA1(token, timeStamp, nonce, echoStr);
if (!signature.equals(msgSignature)) {
throw new AesException(AesException.ValidateSignatureError);
}
String result = decrypt(echoStr);
return result;
}
}

104
src/main/java/com/dreamchaser/depository_manage/config/QyWxJMJM/com/qq/weixin/mp/aes/XMLParse.java

@ -0,0 +1,104 @@
/**
* 对企业微信发送给企业后台的消息加解密示例代码.
*
* @copyright Copyright (c) 1998-2014 Tencent Inc.
*/
// ------------------------------------------------------------------------
package com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
/**
* XMLParse class
*
* 提供提取消息格式中的密文及生成回复消息格式的接口.
*/
class XMLParse {
/**
* 提取出xml数据包中的加密消息
* @param xmltext 待提取的xml字符串
* @return 提取出的加密消息字符串
* @throws AesException
*/
public static Object[] extract(String xmltext) throws AesException {
Object[] result = new Object[3];
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
String FEATURE = null;
// This is the PRIMARY defense. If DTDs (doctypes) are disallowed, almost all XML entity attacks are prevented
// Xerces 2 only - http://xerces.apache.org/xerces2-j/features.html#disallow-doctype-decl
FEATURE = "http://apache.org/xml/features/disallow-doctype-decl";
dbf.setFeature(FEATURE, true);
// If you can't completely disable DTDs, then at least do the following:
// Xerces 1 - http://xerces.apache.org/xerces-j/features.html#external-general-entities
// Xerces 2 - http://xerces.apache.org/xerces2-j/features.html#external-general-entities
// JDK7+ - http://xml.org/sax/features/external-general-entities
FEATURE = "http://xml.org/sax/features/external-general-entities";
dbf.setFeature(FEATURE, false);
// Xerces 1 - http://xerces.apache.org/xerces-j/features.html#external-parameter-entities
// Xerces 2 - http://xerces.apache.org/xerces2-j/features.html#external-parameter-entities
// JDK7+ - http://xml.org/sax/features/external-parameter-entities
FEATURE = "http://xml.org/sax/features/external-parameter-entities";
dbf.setFeature(FEATURE, false);
// Disable external DTDs as well
FEATURE = "http://apache.org/xml/features/nonvalidating/load-external-dtd";
dbf.setFeature(FEATURE, false);
// and these as well, per Timothy Morgan's 2014 paper: "XML Schema, DTD, and Entity Attacks"
dbf.setXIncludeAware(false);
dbf.setExpandEntityReferences(false);
// And, per Timothy Morgan: "If for some reason support for inline DOCTYPEs are a requirement, then
// ensure the entity settings are disabled (as shown above) and beware that SSRF attacks
// (http://cwe.mitre.org/data/definitions/918.html) and denial
// of service attacks (such as billion laughs or decompression bombs via "jar:") are a risk."
// remaining parser logic
DocumentBuilder db = dbf.newDocumentBuilder();
StringReader sr = new StringReader(xmltext);
InputSource is = new InputSource(sr);
Document document = db.parse(is);
Element root = document.getDocumentElement();
NodeList nodelist1 = root.getElementsByTagName("Encrypt");
result[0] = 0;
result[1] = nodelist1.item(0).getTextContent();
return result;
} catch (Exception e) {
e.printStackTrace();
throw new AesException(AesException.ParseXmlError);
}
}
/**
* 生成xml消息
* @param encrypt 加密后的消息密文
* @param signature 安全签名
* @param timestamp 时间戳
* @param nonce 随机字符串
* @return 生成的xml字符串
*/
public static String generate(String encrypt, String signature, String timestamp, String nonce) {
String format = "<xml>\n" + "<Encrypt><![CDATA[%1$s]]></Encrypt>\n"
+ "<MsgSignature><![CDATA[%2$s]]></MsgSignature>\n"
+ "<TimeStamp>%3$s</TimeStamp>\n" + "<Nonce><![CDATA[%4$s]]></Nonce>\n" + "</xml>";
return String.format(format, encrypt, signature, timestamp, nonce);
}
}

27
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/BaseMessage.java

@ -0,0 +1,27 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
/**
* 消息基类企业号 -> 普通用户
*
*/
@Data
public class BaseMessage {
// 否 成员ID列表(消息接收者,多个接收者用'|'分隔,最多支持1000个)。特殊情况:指定为@all,则向该企业应用的全部成员发送
private String touser;
// 否 部门ID列表,多个接收者用'|'分隔,最多支持100个。当touser为@all时忽略本参数
private String toparty;
// 否 标签ID列表,多个接收者用'|'分隔,最多支持100个。当touser为@all时忽略本参数
private String totag;
// 是 消息类型
private String msgtype;
// 是 企业应用的id,整型。可在应用的设置页面查看
private int agentid;
// 否 表示是否开启id转译,0表示否,1表示是,默认0
private int enable_id_trans;
// 否 表示是否开启重复消息检查,0表示否,1表示是,默认0
private int enable_duplicate_check;
// 否 表示是否重复消息检查的时间间隔,默认1800s,最大不超过4小时
private int duplicate_check_interval;
}

15
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/ButtonInteraction.java

@ -0,0 +1,15 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
/**
* 按钮交互性
*
*/
@Data
public class ButtonInteraction extends BaseMessage {
// 模板卡片
private TemplateCard_button_interaction template_card;
// 否 表示是否是保密消息,0表示否,1表示是,默认0
private int safe;
}

8
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/MessageByMarkDown.java

@ -0,0 +1,8 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
@Data
public class MessageByMarkDown extends BaseMessage {
private Object markdown;
}

18
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_action.java

@ -0,0 +1,18 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
/**
* 操作
*/
@Data
public class TemplateCard_action {
/**
* 操作的描述文案
*/
private String text;
/**
* 操作key值用户点击后会产生回调事件将本参数作为EventKey返回回调事件会带上该key值最长支持1024字节不可重复
*/
private String key;
}

25
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_action_menu.java

@ -0,0 +1,25 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.ArrayList;
import java.util.List;
/**
* 卡片右上角更多操作按钮
*/
@XmlRootElement
@Data
public class TemplateCard_action_menu {
/**
* 更多操作界面的描述
*/
private String desc;
/**
* 操作列表列表长度取值范围为 [1, 3]
*/
private List<TemplateCard_action> action_list;
}

33
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button.java

@ -0,0 +1,33 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
import javax.xml.bind.annotation.XmlRootElement;
/**
* 按钮
*/
@XmlRootElement
@Data
public class TemplateCard_button {
/**
* 按钮点击事件类型0 或不填代表回调点击事件1 代表跳转url
*/
private Integer type;
/**
* 按钮文案建议不超过10个字
*/
private String text;
/**
* 按钮样式目前可填1~4不填或错填默认1
*/
private Integer style;
/**
* 按钮key值用户点击后会产生回调事件将本参数作为EventKey返回回调事件会带上该key值最长支持1024字节不可重复button_list.type是0时必填
*/
private String key;
/**
* 跳转事件的urlbutton_list.type是1时必填
*/
private String url;
}

74
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button_interaction.java

@ -0,0 +1,74 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
/**
* 卡片模板--按钮交互型
*
*/
@XmlRootElement
@Data
public class TemplateCard_button_interaction {
/**
* 模板卡片类型投票选择型卡片填写"vote_interaction"
*/
private String card_type;
/**
* 卡片来源样式信息不需要来源样式可不填写
*/
private TemplateCard_source source;
/**
* 卡片右上角更多操作按钮
*/
private TemplateCard_action_menu action_menu;
/**
* 一级标题
*/
private TemplateCard_main_title main_title;
/**
* 引用文献样式
*/
private Template_quote_area quote_area;
/**
* 二级普通文本建议不超过160个字支持id转译
*/
private String sub_title_text;
/**
* 二级标题+文本列表该字段可为空数组但有数据的话需确认对应字段是否必填列表长度不超过6
*/
private List<TemplateCard_horizontal_content> horizontal_content_list;
/**
* 整体卡片的点击跳转事件
*/
private TemplateCard_card_action card_action;
/**
* 任务id同一个应用任务id不能重复只能由数字字母和_-@组成最长128字节
*/
private String task_id;
/**
* 下拉式的选择器
*/
private TemplateCard_button_selection button_selection;
/**
* 按钮列表列表长度不超过6
*/
private List<TemplateCard_button> button_list;
}

28
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button_selection.java

@ -0,0 +1,28 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
/**
* 下拉式的选择器
*/
@XmlRootElement
@Data
public class TemplateCard_button_selection {
/**
* 下拉式的选择器的key用户提交选项后会产生回调事件回调事件会带上该key值表示该题最长支持1024字节
*/
private String question_key;
/**
* 下拉式的选择器左边的标题
*/
private String title;
/**
* 选项列表下拉选项不超过 10 最少1个
*/
private List<TemplateCard_button_selection_option> option_list;
}

18
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_button_selection_option.java

@ -0,0 +1,18 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
/**
* 下拉选项
*/
@Data
public class TemplateCard_button_selection_option {
/**
* 下拉式的选择器选项的id用户提交后会产生回调事件回调事件会带上该id值表示该选项最长支持128字节不可重复
*/
private String id;
/**
* 下拉式的选择器选项的文案建议不超过16个字
*/
private String text;
}

33
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_card_action.java

@ -0,0 +1,33 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
import javax.xml.bind.annotation.XmlRootElement;
/**
* 整体卡片的点击跳转事件
*/
@XmlRootElement
@Data
public class TemplateCard_card_action {
/**
* 跳转事件类型0或不填代表不是链接1 代表跳转url2 代表打开小程序
*/
private Integer type;
/**
* 跳转事件的urlcard_action.type是1时必填
*/
private String url;
/**
* 跳转事件的小程序的appid必须是与当前应用关联的小程序card_action.type是2时必填
*/
private Integer appid;
/**
* 跳转事件的小程序的pagepathcard_action.type是2时选填
*/
private String pagepath;
}

18
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_emphasis_content.java

@ -0,0 +1,18 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
/**
* 关键数据样式
*/
@Data
public class TemplateCard_emphasis_content {
/**
* 关键数据样式的数据内容建议不超过14个字
*/
private String title;
/**
* 关键数据样式的数据描述内容建议不超过22个字
*/
private String desc;
}

46
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_horizontal_content.java

@ -0,0 +1,46 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
import javax.xml.bind.annotation.XmlRootElement;
/**
* 二级标题+文本列表
*/
@XmlRootElement
@Data
public class TemplateCard_horizontal_content {
/**
* 链接类型0或不填代表不是链接1 代表跳转url2 代表下载附件3 代表点击跳转成员详情
*/
private Integer type;
/**
* 二级标题建议不超过5个字
*/
private String keyname;
/**
* 二级文本如果horizontal_content_list.type是2该字段代表文件名称要包含文件类型建议不超过30个字支持id转译
*/
private String value;
/**
* 链接跳转的urlhorizontal_content_list.type是1时必填
*/
private String url;
/**
* 附件的media_idhorizontal_content_list.type是2时必填
*/
private Integer media_id;
/**
* 成员详情的useridhorizontal_content_list.type是3时必填
*/
private String userid;
}

30
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_jump.java

@ -0,0 +1,30 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
/**
* 跳转指引样式
*/
@Data
public class TemplateCard_jump {
/**
* 跳转链接样式的文案内容建议不超过18个字
*/
private String title;
/**
* 跳转链接类型0或不填代表不是链接1 代表跳转url2 代表跳转小程序
*/
private String type;
/**
* 跳转链接的urljump_list.type是1时必填
*/
private String url;
/**
* 跳转链接的小程序的appid必须是与当前应用关联的小程序jump_list.type是2时必填
*/
private String appid;
/**
* 跳转链接的小程序的pagepathjump_list.type是2时选填
*/
private String pagepath;
}

24
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_main_title.java

@ -0,0 +1,24 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
import javax.xml.bind.annotation.XmlRootElement;
/**
* 一级标题
*/
@XmlRootElement
@Data
public class TemplateCard_main_title {
/**
* 一级标题建议不超过36个字支持id转译
*/
private String title;
/**
* 标题辅助信息建议不超过44个字支持id转译
*/
private String desc;
}

28
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_source.java

@ -0,0 +1,28 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
import javax.xml.bind.annotation.XmlRootElement;
/*
卡片来源样式信息
*/
@XmlRootElement
@Data
public class TemplateCard_source {
/**
* 来源图片的url来源图片的尺寸建议为72*72
*/
private String icon_url;
/**
* 来源图片的描述建议不超过20个字支持id转译
*/
private String desc;
/**
* 来源文字的颜色目前支持0(默认) 灰色1 黑色2 红色3 绿色
*/
private Integer desc_color;
}

74
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TemplateCard_text_notice.java

@ -0,0 +1,74 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
/**
* 卡片模板--文本通知型
*/
@XmlRootElement
@Data
public class TemplateCard_text_notice {
/**
* 模板卡片类型投票选择型卡片填写"vote_interaction"
*/
private String card_type;
/**
* 卡片来源样式信息不需要来源样式可不填写
*/
private TemplateCard_source source;
/**
* 卡片右上角更多操作按钮
*/
private TemplateCard_action_menu action_menu;
/**
* 一级标题
*/
private TemplateCard_main_title main_title;
/**
* 引用文献样式
*/
private Template_quote_area quote_area;
/**
* 关键数据样式
*/
private TemplateCard_emphasis_content emphasis_content;
/**
* 二级普通文本建议不超过160个字支持id转译
*/
private String sub_title_text;
/**
* 二级标题+文本列表该字段可为空数组但有数据的话需确认对应字段是否必填列表长度不超过6
*/
private List<TemplateCard_horizontal_content> horizontal_content_list;
/**
* 跳转指引样式的列表该字段可为空数组但有数据的话需确认对应字段是否必填列表长度不超过3
*/
private List<TemplateCard_jump> jump_list;
/**
* 整体卡片的点击跳转事件
*/
private TemplateCard_card_action card_action;
/**
* 任务id同一个应用任务id不能重复只能由数字字母和_-@组成最长128字节
*/
private String task_id;
}

37
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/Template_quote_area.java

@ -0,0 +1,37 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
import javax.xml.bind.annotation.XmlRootElement;
/**
* 引用文献样式
*/
@XmlRootElement
@Data
public class Template_quote_area {
/**
* 引用文献样式区域点击事件0或不填代表没有点击事件1 代表跳转url2 代表跳转小程序
*/
private Integer type;
/**
* 点击跳转的urlquote_area.type是1时必填
*/
private String url;
/**
* 点击跳转的小程序的appid必须是与当前应用关联的小程序quote_area.type是2时必填
*/
private Integer appid;
/**
* 点击跳转的小程序的pagepathquote_area.type是2时选填
*/
private String pagepath;
/**
* 引用文献样式的标题
*/
private String title;
/**
* 引用文献样式的引用文案
*/
private String quote_text;
}

16
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TextNotice.java

@ -0,0 +1,16 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
/**
* 文本通知型
*/
@Data
public class TextNotice extends BaseMessage{
// 模板卡片
private TemplateCard_text_notice template_card;
// 否 表示是否是保密消息,0表示否,1表示是,默认0
private int safe;
}

7
src/main/java/com/dreamchaser/depository_manage/config/WebMvcConfig.java

@ -5,6 +5,9 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.Arrays;
import java.util.List;
@Configuration @Configuration
public class WebMvcConfig implements WebMvcConfigurer { public class WebMvcConfig implements WebMvcConfigurer {
@ -12,11 +15,13 @@ public class WebMvcConfig implements WebMvcConfigurer {
public void addInterceptors(InterceptorRegistry registry) { public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new UserInterceptor()) registry.addInterceptor(new UserInterceptor())
.addPathPatterns("/**") .addPathPatterns("/**")
.excludePathPatterns("/login", "/register", "/sendCode", "/error") .excludePathPatterns("/login", "/register", "/sendCode", "/error","/QyWxLogin","/callback")
.excludePathPatterns("/static/**"); .excludePathPatterns("/static/**");
} }
} }

28
src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java

@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@ -43,7 +44,8 @@ public class CompanyController {
* @return * @return
*/ */
@PostMapping("/allCompanyByParent") @PostMapping("/allCompanyByParent")
public RestResponse findCompanyByNoParent(@RequestParam Map<String,Object>map){ public RestResponse findCompanyByNoParent(@RequestParam Map<String,Object>map, HttpServletRequest request){
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
String url = PortConfig.external_url +"/org/govlist"; String url = PortConfig.external_url +"/org/govlist";
Object page = map.get("page"); Object page = map.get("page");
Object pagesize = map.get("pagesize"); Object pagesize = map.get("pagesize");
@ -59,7 +61,7 @@ public class CompanyController {
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url,paramObject, HTTP.UTF_8); post = HttpUtils.send(url,paramObject, HTTP.UTF_8,userToken);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -85,7 +87,8 @@ public class CompanyController {
* @return * @return
*/ */
@PostMapping("/companyByCondition") @PostMapping("/companyByCondition")
public RestResponse findcompanyByCondition(@RequestParam Map<String,Object> map){ public RestResponse findcompanyByCondition(@RequestParam Map<String,Object> map,HttpServletRequest request){
UserByPort userByPort = (UserByPort)request.getAttribute("userToken");
String url = PortConfig.external_url + "/org/govlist"; String url = PortConfig.external_url + "/org/govlist";
if(map.containsKey("state")){ if(map.containsKey("state")){
Object state = map.get("state"); Object state = map.get("state");
@ -99,7 +102,7 @@ public class CompanyController {
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url,paramObject, HTTP.UTF_8); post = HttpUtils.send(url,paramObject, HTTP.UTF_8,userByPort);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -125,7 +128,8 @@ public class CompanyController {
* @return * @return
*/ */
@PostMapping("/allPostByOrganization") @PostMapping("/allPostByOrganization")
public RestResponse allPostByParent(@RequestParam Map<String,Object> map) { public RestResponse allPostByParent(@RequestParam Map<String,Object> map,HttpServletRequest request) {
UserByPort userByPort = (UserByPort)request.getAttribute("userToken");
String url = PortConfig.external_url + "/org/positionlist"; String url = PortConfig.external_url + "/org/positionlist";
Object page = map.get("page"); Object page = map.get("page");
Object pagesize = map.get("pagesize"); Object pagesize = map.get("pagesize");
@ -135,7 +139,7 @@ public class CompanyController {
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url,paramObject, HTTP.UTF_8); post = HttpUtils.send(url,paramObject, HTTP.UTF_8,userByPort);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -178,10 +182,11 @@ public class CompanyController {
} }
@PostMapping("/post_role") @PostMapping("/post_role")
public RestResponse addUser(@RequestBody Map<String, Object> map) { public RestResponse addUser(@RequestBody Map<String, Object> map,HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
Map<String,Object> userParam = new HashMap<>(); Map<String,Object> userParam = new HashMap<>();
userParam.put("position",ObjectFormatUtil.toInteger(map.get("userid"))); userParam.put("position",ObjectFormatUtil.toInteger(map.get("userid")));
List<UserByPort> userByPortList = PageController.FindUserByMap(userParam); List<UserByPort> userByPortList = PageController.FindUserByMap(userParam,userToken);
Integer success = 0; Integer success = 0;
if(map.containsKey("depositoryId")) { if(map.containsKey("depositoryId")) {
for (int i = 0; i < userByPortList.size(); i++) { for (int i = 0; i < userByPortList.size(); i++) {
@ -289,11 +294,12 @@ public class CompanyController {
} }
@GetMapping("/findPostRole") @GetMapping("/findPostRole")
public RestResponse findPostRole(@RequestParam("postId") Integer postId){ public RestResponse findPostRole(@RequestParam("postId") Integer postId,HttpServletRequest request){
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
Map<String,Object> userParam = new HashMap<>(); Map<String,Object> userParam = new HashMap<>();
userParam.put("position",postId); userParam.put("position",postId);
List<UserByPort> userByPortList = PageController.FindUserByMap(userParam); List<UserByPort> userByPortList = PageController.FindUserByMap(userParam,userToken);
Post postById = PageController.findPostById(postId); Post postById = PageController.findPostById(postId,userToken);
List<RoleAndDepository> roleAndDepositoryByCondition = new ArrayList<>(); List<RoleAndDepository> roleAndDepositoryByCondition = new ArrayList<>();
if(userByPortList.size() != 0){ if(userByPortList.size() != 0){
Map<String,Object> param = new HashMap<>(); Map<String,Object> param = new HashMap<>();

141
src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java

@ -73,6 +73,7 @@ public class DepositoryController {
return map; return map;
} }
/** /**
* 获取上周一到本周一的日期 * 获取上周一到本周一的日期
* *
@ -214,22 +215,6 @@ public class DepositoryController {
Double warehouserCount1 = aDouble - depositoryRecordByDateByIn1 + depositoryRecordByDateByOut1; Double warehouserCount1 = aDouble - depositoryRecordByDateByIn1 + depositoryRecordByDateByOut1;
result.add(warehouserCount1); result.add(warehouserCount1);
} }
/* for (i = days.size() - 1; i > 0; i--) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE,1);
String format = formatter.format(calendar.getTime()) + " 00:00:00";
if(Long.compare(days.get(i - 1),DateUtil.DateTimeToTimeStamp(format)) == 0){
continue;
}
Integer val = (Integer) depositoryAllNameAndId.get(key);
// 获取一段时间内的入库额度
//测试
Double depositoryRecordByDateByIn1 = depositoryRecordService.findApplicationInRecordByDate(days.get(i - 1), days.get(i), val);
// 获取一段时间内的入库额度
Double depositoryRecordByDateByOut1 = depositoryRecordService.findApplicationOutRecordByDate(days.get(i - 1), days.get(i), val);
Double warehouserCount1 = result.get(j++) - depositoryRecordByDateByIn1 + depositoryRecordByDateByOut1;
result.add(warehouserCount1);
}*/
Collections.reverse(result); Collections.reverse(result);
map.put(key.toString(), ((ArrayList<Double>) result).clone()); map.put(key.toString(), ((ArrayList<Double>) result).clone());
result.clear(); result.clear();
@ -245,8 +230,12 @@ public class DepositoryController {
* @param depositoryRecordService * @param depositoryRecordService
* @return * @return
*/ */
public static List<Object> getBeforeInventoryByMonth(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService) { public static List<Object> getBeforeInventoryByMonth(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService,UserByPort userByPort) {
List<Depository> depositoryAll = depositoryService.findDepositoryAll(); // List<Depository> depositoryAll = depositoryService.findDepositoryAll();
List<Depository> depositoryAll = depositoryService.findDepositoryByAdminorgAndUser(userByPort);
// List<Depository> depositoryAll = depositoryService.findDepositoryByAdminorg(userByPort.getMaindeparment().toString());
// 获取该用户管理的仓库
Map<String, Object> previousMonth = getPreviousMonth(); Map<String, Object> previousMonth = getPreviousMonth();
List<Object> months = (List<Object>) previousMonth.get("months"); List<Object> months = (List<Object>) previousMonth.get("months");
List<Object> sourceList = (List<Object>) previousMonth.get("sourceList"); List<Object> sourceList = (List<Object>) previousMonth.get("sourceList");
@ -315,7 +304,7 @@ public class DepositoryController {
* @param depositoryRecordService * @param depositoryRecordService
* @return * @return
*/ */
public static Map<String, Object> getBeforeInventoryOnMap(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService) { public static Map<String, Object> getBeforeInventoryOnMap(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService,UserByPort userByPort) {
// 中国地图数据 // 中国地图数据
// ['product', '3月', '4月', '5月', '6月', '7月', '8月'], // ['product', '3月', '4月', '5月', '6月', '7月', '8月'],
// ['电子产品类', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7], // ['电子产品类', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7],
@ -325,7 +314,7 @@ public class DepositoryController {
List<Object> months = (List<Object>) previousMonth.get("months"); List<Object> months = (List<Object>) previousMonth.get("months");
List<Object> sourceList = (List<Object>) previousMonth.get("sourceList"); List<Object> sourceList = (List<Object>) previousMonth.get("sourceList");
ArrayList<Object> title = new ArrayList<>(); ArrayList<Object> title = new ArrayList<>();
List<Depository> depositoryAll = depositoryService.findDepositoryAll(); List<Depository> depositoryAll = depositoryService.findDepositoryByAdminorgAndUser(userByPort);
title.add("depository"); title.add("depository");
for (int i = sourceList.size() - 1; i >= 0; i--) { for (int i = sourceList.size() - 1; i >= 0; i--) {
title.add(((Map<String, Object>) sourceList.get(i)).get("month")); title.add(((Map<String, Object>) sourceList.get(i)).get("month"));
@ -385,11 +374,12 @@ public class DepositoryController {
* @return * @return
*/ */
@GetMapping("/warehouseRecord") @GetMapping("/warehouseRecord")
public RestResponse findDepositoryRecordByCondition(@RequestParam Map<String, Object> map) { public RestResponse findDepositoryRecordByCondition(@RequestParam Map<String, Object> map,HttpServletRequest request) {
List<Depository> list = depositoryService.findDepositoryRecordPByCondition(map); UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
List<Depository> list = depositoryService.findDepositoryRecordPByCondition(map,userByPort);
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
Depository depository = list.get(i); Depository depository = list.get(i);
Administration company = PageController.getCompany(depository.getCid()); Administration company = PageController.getCompany(depository.getCid(),userByPort);
list.get(i).setCname(company.getName()); list.get(i).setCname(company.getName());
} }
return new RestResponse(list, depositoryService.findCountByCondition(map), 200); return new RestResponse(list, depositoryService.findCountByCondition(map), 200);
@ -402,13 +392,14 @@ public class DepositoryController {
* @return * @return
*/ */
@GetMapping("/allWarehouseByParent") @GetMapping("/allWarehouseByParent")
public RestResponse findDepositoryByNoParent(@RequestParam Map<String, Object> map) { public RestResponse findDepositoryByNoParent(@RequestParam Map<String, Object> map,HttpServletRequest request) {
UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
if ("".equals(map.get("parentId")) || map.get("parentId") == null) { if ("".equals(map.get("parentId")) || map.get("parentId") == null) {
map.put("parentId", 0); map.put("parentId", 0);
} }
List<Depository> list = depositoryService.findDepositoryRecordPByCondition(map); List<Depository> list = depositoryService.findDepositoryRecordPByCondition(map,userByPort);
// 获取所有行政单位 // 获取所有行政单位
Map<String, Object> administration = findAdministration(); Map<String, Object> administration = findAdministration(userByPort);
List<AdministrationP> administrationPList = (List<AdministrationP>) administration.get("administrationPList"); List<AdministrationP> administrationPList = (List<AdministrationP>) administration.get("administrationPList");
Integer total = (Integer) administration.get("total"); Integer total = (Integer) administration.get("total");
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
@ -428,7 +419,7 @@ public class DepositoryController {
* *
* @return * @return
*/ */
public static Map<String, Object> findAdministration() { public static Map<String, Object> findAdministration(UserByPort userByPort) {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
String url = PortConfig.external_url + "/org/govlist"; String url = PortConfig.external_url + "/org/govlist";
String superior = "313"; String superior = "313";
@ -438,7 +429,7 @@ public class DepositoryController {
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8); post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userByPort);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -468,13 +459,14 @@ public class DepositoryController {
* @return * @return
*/ */
@PostMapping("/realDeleteDepository") @PostMapping("/realDeleteDepository")
public RestResponse realDeleteDepository(@RequestBody Map<String, Object> map) { public RestResponse realDeleteDepository(@RequestBody Map<String, Object> map,HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
if (map.containsKey("id")) { if (map.containsKey("id")) {
Integer id = ObjectFormatUtil.toInteger(map.get("id")); Integer id = ObjectFormatUtil.toInteger(map.get("id"));
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
RealDeleteSonDepository(id.toString()); RealDeleteSonDepository(id.toString(),userToken);
} }
}).start(); }).start();
return CrudUtil.deleteHandle(depositoryService.deleteDepositoryRecordById(id), 1); return CrudUtil.deleteHandle(depositoryService.deleteDepositoryRecordById(id), 1);
@ -485,7 +477,7 @@ public class DepositoryController {
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
RealDeleteSonDepository(id); RealDeleteSonDepository(id,userToken);
} }
}).start(); }).start();
} }
@ -500,14 +492,14 @@ public class DepositoryController {
* *
* @param parentId * @param parentId
*/ */
public void RealDeleteSonDepository(String parentId) { public void RealDeleteSonDepository(String parentId,UserByPort userByPort) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("parentId", parentId); param.put("parentId", parentId);
// 获取当前仓库所有子仓库 // 获取当前仓库所有子仓库
List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param,userByPort);
for (int i = 0; i < depositoryRecordPByCondition.size(); i++) { for (int i = 0; i < depositoryRecordPByCondition.size(); i++) {
Integer id = depositoryRecordPByCondition.get(i).getId(); // 获取当前仓库id Integer id = depositoryRecordPByCondition.get(i).getId(); // 获取当前仓库id
RealDeleteSonDepository(id.toString()); // 递归查询仓库 RealDeleteSonDepository(id.toString(),userByPort); // 递归查询仓库
depositoryService.deleteDepositoryRecordById(id); // 删除仓库 depositoryService.deleteDepositoryRecordById(id); // 删除仓库
} }
} }
@ -519,8 +511,9 @@ public class DepositoryController {
* @return * @return
*/ */
@PostMapping("/depository") @PostMapping("/depository")
public RestResponse insertDepository(@RequestBody Map<String, Object> map) { public RestResponse insertDepository(@RequestBody Map<String, Object> map,HttpServletRequest request) {
return CrudUtil.postHandle(depositoryService.insertDepository(map), 1); UserByPort userToken = (UserByPort) request.getAttribute("userToken");
return CrudUtil.postHandle(depositoryService.insertDepository(map,userToken), 1);
} }
/** /**
@ -530,14 +523,15 @@ public class DepositoryController {
* @return * @return
*/ */
@PostMapping("/depository_del") @PostMapping("/depository_del")
public RestResponse deleteDepository(@RequestBody Map<String, Object> map) { public RestResponse deleteDepository(@RequestBody Map<String, Object> map,HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
if (map.containsKey("id")) { if (map.containsKey("id")) {
Integer id = ObjectFormatUtil.toInteger(map.get("id")); Integer id = ObjectFormatUtil.toInteger(map.get("id"));
// UpdateSonState(id.toString(),3,true); 修改为删除状态 // UpdateSonState(id.toString(),3,true); 修改为删除状态
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
UpdateSonState(id.toString(), 3, true); UpdateSonState(id.toString(), 3, true,userToken);
} }
}).start(); }).start();
return CrudUtil.deleteHandle(depositoryService.changeStateToDeletedById(id), 1); return CrudUtil.deleteHandle(depositoryService.changeStateToDeletedById(id), 1);
@ -549,7 +543,7 @@ public class DepositoryController {
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
UpdateSonState(id, 3, true); UpdateSonState(id, 3, true,userToken);
} }
}).start(); }).start();
} }
@ -582,7 +576,8 @@ public class DepositoryController {
* @return * @return
*/ */
@PostMapping("/EditDepositoryState") @PostMapping("/EditDepositoryState")
public RestResponse EditDepositoryState(@RequestBody Map<String, Object> map) { public RestResponse EditDepositoryState(@RequestBody Map<String, Object> map,HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
if (map.containsKey("state")) { if (map.containsKey("state")) {
map.put("state", 1); map.put("state", 1);
} else { } else {
@ -596,7 +591,7 @@ public class DepositoryController {
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
UpdateSonState(id, state, true); UpdateSonState(id, state, true,userToken);
} }
}).start(); }).start();
} else { } else {
@ -604,7 +599,7 @@ public class DepositoryController {
new Thread(new Runnable() { new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
UpdateSonState(id, state, false); UpdateSonState(id, state, false,userToken);
} }
}).start(); }).start();
} }
@ -624,11 +619,11 @@ public class DepositoryController {
* *
* @param parentId * @param parentId
*/ */
public void UpdateSonState(String parentId, Integer state, boolean envelop) { public void UpdateSonState(String parentId, Integer state, boolean envelop,UserByPort userToken) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("parentId", parentId); param.put("parentId", parentId);
// 获取当前仓库所有子仓库 // 获取当前仓库所有子仓库
List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param,userToken);
if (envelop) { if (envelop) {
// 将当前仓库下的产品状态改为禁用 // 将当前仓库下的产品状态改为禁用
UpdateSonMaterialState(parentId, state); UpdateSonMaterialState(parentId, state);
@ -638,7 +633,7 @@ public class DepositoryController {
int depositoryId = depository.getId(); int depositoryId = depository.getId();
Map<String, Object> newMap = new HashMap<>(); Map<String, Object> newMap = new HashMap<>();
newMap.put("parentId", depositoryId); newMap.put("parentId", depositoryId);
UpdateSonState(String.valueOf(depositoryId), state, envelop); UpdateSonState(String.valueOf(depositoryId), state, envelop,userToken);
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("id", depositoryId); map.put("id", depositoryId);
map.put("state", state); map.put("state", state);
@ -1083,10 +1078,10 @@ public class DepositoryController {
depository_data.put("todayInventory", todayInventory); depository_data.put("todayInventory", todayInventory);
depository_data.put("sourceList", sourceList); depository_data.put("sourceList", sourceList);
depository_data.put("mapData", mapData); depository_data.put("mapData", mapData);
depository_data.put("sourceListByMonth", getBeforeInventoryByMonth(depositoryService, depositoryRecordService)); depository_data.put("sourceListByMonth", getBeforeInventoryByMonth(depositoryService, depositoryRecordService,userByPort));
depository_data.put("BeforeInventory", getBeforeInventoryByDName(depositoryService, depositoryRecordService, userByPort)); depository_data.put("BeforeInventory", getBeforeInventoryByDName(depositoryService, depositoryRecordService, userByPort));
depository_data.put("ThisWeekInventory", getThisWeekInventoryByDName(depositoryService, depositoryRecordService, userByPort)); depository_data.put("ThisWeekInventory", getThisWeekInventoryByDName(depositoryService, depositoryRecordService, userByPort));
depository_data.put("MapInventory", getBeforeInventoryOnMap(depositoryService, depositoryRecordService)); depository_data.put("MapInventory", getBeforeInventoryOnMap(depositoryService, depositoryRecordService,userByPort));
// 封装 最终数据 // 封装 最终数据
Map<String, Object> data = new LinkedHashMap<String, Object>(); Map<String, Object> data = new LinkedHashMap<String, Object>();
data.put("depository_data", depository_data); data.put("depository_data", depository_data);
@ -1107,11 +1102,12 @@ public class DepositoryController {
* @return * @return
*/ */
@GetMapping("/find_depository") @GetMapping("/find_depository")
public RestResponse FindDepositoryByMid(@RequestParam("mid") String mid) { public RestResponse FindDepositoryByMid(@RequestParam("mid") String mid,HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
Material materialById = materialService.findMaterialById(Integer.parseInt(mid)); Material materialById = materialService.findMaterialById(Integer.parseInt(mid));
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("depositoryId", materialById.getDepositoryId()); param.put("depositoryId", materialById.getDepositoryId());
List<Depository> depositoryId = depositoryService.findDepositoryRecordPByCondition(param); List<Depository> depositoryId = depositoryService.findDepositoryRecordPByCondition(param,userToken);
return new RestResponse(depositoryId.get(0), 1, 200); return new RestResponse(depositoryId.get(0), 1, 200);
} }
@ -1134,8 +1130,9 @@ public class DepositoryController {
* @return * @return
*/ */
@GetMapping("/findMaterialByDepository") @GetMapping("/findMaterialByDepository")
public RestResponse FindMaterialByDepository(@RequestParam("depositoryId") String depositoryId) { public RestResponse FindMaterialByDepository(@RequestParam("depositoryId") String depositoryId,HttpServletRequest request) {
Boolean allSonDepository = findAllSonDepository(depositoryId); UserByPort userToken = (UserByPort) request.getAttribute("userToken");
Boolean allSonDepository = findAllSonDepository(depositoryId,userToken);
return new RestResponse(allSonDepository); return new RestResponse(allSonDepository);
} }
@ -1146,15 +1143,15 @@ public class DepositoryController {
* @return * @return
*/ */
@PostMapping("/findRelevancyByDepository") @PostMapping("/findRelevancyByDepository")
public RestResponse FindRelevancyByDepository(@RequestBody Map<String, Object> map) { public RestResponse FindRelevancyByDepository(@RequestBody Map<String, Object> map,HttpServletRequest request) {
Boolean allSonDepositoryOfRelevancy = false; Boolean allSonDepositoryOfRelevancy = false;
if (map.containsKey("id")) { if (map.containsKey("id")) {
Integer depositoryId = (Integer) map.get("id"); Integer depositoryId = (Integer) map.get("id");
allSonDepositoryOfRelevancy = findAllSonDepositoryOfRelevancy(depositoryId.toString()); allSonDepositoryOfRelevancy = findAllSonDepositoryOfRelevancy(depositoryId.toString(),request);
} else if (map.containsKey("ids")) { } else if (map.containsKey("ids")) {
List<Integer> ids = (List<Integer>) map.get("ids"); List<Integer> ids = (List<Integer>) map.get("ids");
for (int i = 0; i < ids.size(); i++) { for (int i = 0; i < ids.size(); i++) {
allSonDepositoryOfRelevancy |= findAllSonDepositoryOfRelevancy(ids.get(i).toString()); allSonDepositoryOfRelevancy |= findAllSonDepositoryOfRelevancy(ids.get(i).toString(),request);
if (allSonDepositoryOfRelevancy) { if (allSonDepositoryOfRelevancy) {
break; break;
} }
@ -1171,7 +1168,7 @@ public class DepositoryController {
* @param parentid * @param parentid
* @return * @return
*/ */
public Boolean findAllSonDepository(String parentid) { public Boolean findAllSonDepository(String parentid,UserByPort userToken) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("parentId", parentid); param.put("parentId", parentid);
param.put("state", 1); param.put("state", 1);
@ -1179,10 +1176,10 @@ public class DepositoryController {
if (materialByDepository) { if (materialByDepository) {
return true; return true;
} }
List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param,userToken);
for (int i = 0; i < depositoryRecordPByCondition.size(); i++) { for (int i = 0; i < depositoryRecordPByCondition.size(); i++) {
if (!findMaterialByDepository(depositoryRecordPByCondition.get(i).getId().toString())) { if (!findMaterialByDepository(depositoryRecordPByCondition.get(i).getId().toString())) {
findAllSonDepository(depositoryRecordPByCondition.get(i).getId().toString()); findAllSonDepository(depositoryRecordPByCondition.get(i).getId().toString(),userToken);
} else { } else {
return true; return true;
} }
@ -1196,20 +1193,21 @@ public class DepositoryController {
* @param parentid * @param parentid
* @return * @return
*/ */
public Boolean findAllSonDepositoryOfRelevancy(String parentid) { public Boolean findAllSonDepositoryOfRelevancy(String parentid,HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("parentId", parentid); param.put("parentId", parentid);
param.put("state", 1); param.put("state", 1);
boolean materialByDepository = findMaterialByDepository(parentid); boolean materialByDepository = findMaterialByDepository(parentid);
Boolean depositoryRecord = findDepositoryRecord(parentid); Boolean depositoryRecord = findDepositoryRecord(parentid,request);
if (materialByDepository || depositoryRecord) { if (materialByDepository || depositoryRecord) {
return true; return true;
} }
List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param,userToken);
for (int i = 0; i < depositoryRecordPByCondition.size(); i++) { for (int i = 0; i < depositoryRecordPByCondition.size(); i++) {
String depositoryId = depositoryRecordPByCondition.get(i).getId().toString(); String depositoryId = depositoryRecordPByCondition.get(i).getId().toString();
if (!findMaterialByDepository(depositoryId) && !findDepositoryRecord(depositoryId)) { if (!findMaterialByDepository(depositoryId) && !findDepositoryRecord(depositoryId,request)) {
findAllSonDepositoryOfRelevancy(depositoryRecordPByCondition.get(i).getId().toString()); findAllSonDepositoryOfRelevancy(depositoryRecordPByCondition.get(i).getId().toString(),request);
} else { } else {
return true; return true;
} }
@ -1240,10 +1238,10 @@ public class DepositoryController {
* @param depositoryId * @param depositoryId
* @return * @return
*/ */
public Boolean findDepositoryRecord(String depositoryId) { public Boolean findDepositoryRecord(String depositoryId,HttpServletRequest request) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("depositoryId", depositoryId); param.put("depositoryId", depositoryId);
List<DepositoryRecordP> recordPByCondition = depositoryRecordService.findDepositoryRecordPByCondition(param); List<DepositoryRecordP> recordPByCondition = depositoryRecordService.findDepositoryRecordPByCondition(param,request);
if (recordPByCondition.size() > 0) { if (recordPByCondition.size() > 0) {
return true; return true;
} }
@ -1257,19 +1255,21 @@ public class DepositoryController {
* @return * @return
*/ */
@GetMapping("/findDepositoryByParent") @GetMapping("/findDepositoryByParent")
public RestResponse FindDepositoryByParentId(@RequestParam("parentId") String parentId) { public RestResponse FindDepositoryByParentId(@RequestParam("parentId") String parentId,HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("parentId", parentId); param.put("parentId", parentId);
List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param,userToken);
return new RestResponse(depositoryRecordPByCondition, depositoryService.findCountByCondition(param), 200); return new RestResponse(depositoryRecordPByCondition, depositoryService.findCountByCondition(param), 200);
} }
@GetMapping("/findManagerByDid") @GetMapping("/findManagerByDid")
public RestResponse FindManagerByDid(@RequestParam("did") Integer did) { public RestResponse FindManagerByDid(@RequestParam("did") Integer did,HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
List<Integer> userIdByDid = roleService.findUserIdByDid(did); List<Integer> userIdByDid = roleService.findUserIdByDid(did);
List<UserByPort> userByPortList = new ArrayList<>(); List<UserByPort> userByPortList = new ArrayList<>();
for (int i = 0; i < userIdByDid.size(); i++) { for (int i = 0; i < userIdByDid.size(); i++) {
UserByPort userByPort = PageController.FindUserById(userIdByDid.get(i)); UserByPort userByPort = PageController.FindUserById(userIdByDid.get(i),userToken);
userByPortList.add(userByPort); userByPortList.add(userByPort);
} }
return new RestResponse(userByPortList, userByPortList.size(), 200); return new RestResponse(userByPortList, userByPortList.size(), 200);
@ -1277,8 +1277,9 @@ public class DepositoryController {
@GetMapping("/findPostByCompany") @GetMapping("/findPostByCompany")
public RestResponse findPostByCompany(@RequestParam("company") String company) { public RestResponse findPostByCompany(@RequestParam("company") String company,HttpServletRequest request) {
List<AdministrationP> administrationPList = PageController.findCompanyBySuperior(company); UserByPort userToken = (UserByPort) request.getAttribute("userToken");
List<AdministrationP> administrationPList = PageController.findCompanyBySuperior(company,userToken);
int size = administrationPList.size(); int size = administrationPList.size();
return new RestResponse(administrationPList, size, 200); return new RestResponse(administrationPList, size, 200);
} }

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

@ -8,6 +8,7 @@ import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.*; import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.security.bean.UserToken; import com.dreamchaser.depository_manage.security.bean.UserToken;
import com.dreamchaser.depository_manage.service.*; import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.service.impl.QyWxOperationService;
import com.dreamchaser.depository_manage.utils.CrudUtil; import com.dreamchaser.depository_manage.utils.CrudUtil;
import com.dreamchaser.depository_manage.utils.DateUtil; import com.dreamchaser.depository_manage.utils.DateUtil;
import com.dreamchaser.depository_manage.utils.HttpUtils; import com.dreamchaser.depository_manage.utils.HttpUtils;
@ -48,12 +49,15 @@ public class DepositoryRecordController {
@Autowired @Autowired
private PlaceService placeService; private PlaceService placeService;
@Autowired
private QyWxOperationService qyWxOperationService;
@GetMapping("/depositoryRecord") @GetMapping("/depositoryRecord")
public RestResponse findDepositoryRecordByCondition(@RequestParam Map<String,Object> map){ public RestResponse findDepositoryRecordByCondition(@RequestParam Map<String,Object> map,HttpServletRequest request){
List<DepositoryRecordP> list=depositoryRecordService.findDepositoryRecordPByCondition(map); List<DepositoryRecordP> list=depositoryRecordService.findDepositoryRecordPByCondition(map,request);
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
list.get(i).setPrice(list.get(i).getPrice() / 100); list.get(i).setPrice(list.get(i).getPrice() / 100);
} }
@ -64,14 +68,14 @@ public class DepositoryRecordController {
public RestResponse findDepositoryInAndOutRecordPByCondition(@RequestParam Map<String,Object> map,HttpServletRequest request){ public RestResponse findDepositoryInAndOutRecordPByCondition(@RequestParam Map<String,Object> map,HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken"); UserByPort userToken= (UserByPort) request.getAttribute("userToken");
map.put("applicantId",userToken.getId()); map.put("applicantId",userToken.getId());
List<ApplicationInRecordP> applicationInRecordPlist = depositoryRecordService.findApplicationInRecordPByCondition(map); List<ApplicationInRecordP> applicationInRecordPlist = depositoryRecordService.findApplicationInRecordPByCondition(map,request);
Integer InCount = depositoryRecordService.findApplicationInRecordPCountByCondition(map); Integer InCount = depositoryRecordService.findApplicationInRecordPCountByCondition(map);
for (int i = 0; i < applicationInRecordPlist.size(); i++) { for (int i = 0; i < applicationInRecordPlist.size(); i++) {
if(applicationInRecordPlist.get(i).getPrice() != null) { if(applicationInRecordPlist.get(i).getPrice() != null) {
applicationInRecordPlist.get(i).setPrice(applicationInRecordPlist.get(i).getPrice() / 100); applicationInRecordPlist.get(i).setPrice(applicationInRecordPlist.get(i).getPrice() / 100);
} }
} }
List<ApplicationOutRecordP> applicationOutRecordPlist = depositoryRecordService.findApplicationOutRecordPByCondition(map); List<ApplicationOutRecordP> applicationOutRecordPlist = depositoryRecordService.findApplicationOutRecordPByCondition(map,request);
Integer OutCount = depositoryRecordService.findApplicationOutRecordPCountByCondition(map); Integer OutCount = depositoryRecordService.findApplicationOutRecordPCountByCondition(map);
for (int i = 0; i < applicationOutRecordPlist.size(); i++) { for (int i = 0; i < applicationOutRecordPlist.size(); i++) {
if(applicationOutRecordPlist.get(i).getPrice() != null) { if(applicationOutRecordPlist.get(i).getPrice() != null) {
@ -90,7 +94,7 @@ public class DepositoryRecordController {
public RestResponse myTask(@RequestParam Map<String,Object> map,HttpServletRequest request){ public RestResponse myTask(@RequestParam Map<String,Object> map,HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken"); UserByPort userToken= (UserByPort) request.getAttribute("userToken");
map.put("userId",userToken.getId()); map.put("userId",userToken.getId());
List<SimpleApplicationOutRecordP> myTask = depositoryRecordService.findMyTask(map); List<SimpleApplicationOutRecordP> myTask = depositoryRecordService.findMyTask(map,request);
return new RestResponse(myTask return new RestResponse(myTask
,depositoryRecordService.findMyTaskOutCount(map),200); ,depositoryRecordService.findMyTaskOutCount(map),200);
} }
@ -285,26 +289,47 @@ public class DepositoryRecordController {
public RestResponse insertApplicationOutRecord(@RequestBody Map<String,Object> map, HttpServletRequest request){ public RestResponse insertApplicationOutRecord(@RequestBody Map<String,Object> map, HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken"); UserByPort userToken= (UserByPort) request.getAttribute("userToken");
map.put("applicantId",userToken.getId()); map.put("applicantId",userToken.getId());
// UserByPort departmentHeadByUser = findDepartmentHeadByUser(userToken); // 获取当前部门负责人
// map.put("departmenthead",departmentHeadByUser.getId()); List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken);
StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = new StringBuilder();
/* for (int i = 0; i < departmentHeadByUsers.size(); i++) {
departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(",");
departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+",");
}*/
departmentHeadId.append("78").append(",");
departMentHeadQyWxName.append("PangFuZhen").append(",");
map.put("departmenthead",departmentHeadId.toString());
List<Integer> params = (List<Integer>) map.get("params"); List<Integer> params = (List<Integer>) map.get("params");
Integer integer = 0; Integer integer = 0;
if(params.size() < 1 && map.size() > 3){ if(params.size() < 1 && map.size() > 3){
Integer res = depositoryRecordService.insertApplicationOutRecord(map,userToken); // 插入主订单 Integer res = depositoryRecordService.insertApplicationOutRecord(map,userToken); // 插入主订单
if(res == 1){ // 如果插入成功
Object id = map.get("id"); // 获取主订单编号 Object id = map.get("id"); // 获取主订单编号
if(res == 1){ // 如果插入成功
if(id != null){ if(id != null){
map.remove("id"); map.remove("id");
map.put("parentId",id); map.put("parentId",id);
} }
integer += depositoryRecordService.insertApplicationOutMin(map); integer += depositoryRecordService.insertApplicationOutMin(map);
} }
// 向企业微信中对应用户发送消息
JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
// 申请人number
redisTemplateForHash.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
redisTemplateForHash.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
}else{ }else{
// 插入主订单 // 插入主订单
// map.put("departmenthead",departmentHeadByUser.getId()); map.put("departmenthead",departmentHeadId.toString());
Integer res = depositoryRecordService.insertApplicationOutRecord(map,userToken); Integer res = depositoryRecordService.insertApplicationOutRecord(map,userToken);
if(res == 1) { if(res == 1) {
// 获取主订单编号
Object id = map.get("id");
for (int i = 0; i < params.size(); i++) { for (int i = 0; i < params.size(); i++) {
Integer temp = params.get(i); Integer temp = params.get(i);
Map<String, Object> insert = new HashMap<>(); Map<String, Object> insert = new HashMap<>();
@ -315,15 +340,25 @@ public class DepositoryRecordController {
insert.put("code", map.get("code")); insert.put("code", map.get("code"));
insert.put("placeId", map.get("placeId")); insert.put("placeId", map.get("placeId"));
// 获取主订单编号 // 获取主订单编号
insert.put("parentId", map.get("id")); insert.put("parentId",id);
// 插入子订单 // 插入子订单
integer += depositoryRecordService.insertApplicationOutMin(insert); integer += depositoryRecordService.insertApplicationOutMin(insert);
} }
// 插入子订单 // 插入子订单
map.put("parentId", map.get("id")); map.put("parentId", id);
map.remove("id"); map.remove("id");
// 插入子订单 // 插入子订单
integer += depositoryRecordService.insertApplicationOutMin(map); integer += depositoryRecordService.insertApplicationOutMin(map);
JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplateForHash.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
// 申请人number
redisTemplateForHash.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
} }
} }
if(integer != 0 && params.size() < 1){ if(integer != 0 && params.size() < 1){
@ -338,8 +373,8 @@ public class DepositoryRecordController {
// 查看入库申请 // 查看入库申请
@GetMapping("/applicationInView") @GetMapping("/applicationInView")
public RestResponse findApplicationInRecordByCondition(@RequestParam Map<String,Object> map){ public RestResponse findApplicationInRecordByCondition(@RequestParam Map<String,Object> map,HttpServletRequest request){
List<ApplicationInRecordP> list = depositoryRecordService.findApplicationInRecordPByCondition(map); List<ApplicationInRecordP> list = depositoryRecordService.findApplicationInRecordPByCondition(map,request);
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
list.get(i).setPrice(list.get(i).getPrice() / 100); list.get(i).setPrice(list.get(i).getPrice() / 100);
} }
@ -400,7 +435,7 @@ public class DepositoryRecordController {
ApplicationOutRecordP applicationOutRecordPById = depositoryRecordService.findApplicationOutRecordPById(applicationOutMinById.getParentId()); ApplicationOutRecordP applicationOutRecordPById = depositoryRecordService.findApplicationOutRecordPById(applicationOutMinById.getParentId());
// 获取申请人 // 获取申请人
UserByPort userByPort = PageController.FindUserById(applicationOutRecordPById.getApplicantId()); UserByPort userByPort = PageController.FindUserById(applicationOutRecordPById.getApplicantId(),userToken);
// 创建展示对象 // 创建展示对象
SimpleApplicationOutMinRecordP simpleApplicationOutMinRecordP = new SimpleApplicationOutMinRecordP(applicationOutMinById); SimpleApplicationOutMinRecordP simpleApplicationOutMinRecordP = new SimpleApplicationOutMinRecordP(applicationOutMinById);
// 获取申请的物料信息 // 获取申请的物料信息
@ -412,7 +447,7 @@ public class DepositoryRecordController {
if(checkId != null){ if(checkId != null){
// 如果该订单已经处理 // 如果该订单已经处理
// 获取处理人 // 获取处理人
UserByPort checker = PageController.FindUserById(checkId); UserByPort checker = PageController.FindUserById(checkId,userToken);
simpleApplicationOutMinRecordP.setCheckerName(checker.getName()); simpleApplicationOutMinRecordP.setCheckerName(checker.getName());
} }
@ -437,9 +472,9 @@ public class DepositoryRecordController {
// 查看出库申请 // 查看出库申请
@GetMapping("/applicationOutView") @GetMapping("/applicationOutView")
public RestResponse findApplicationOutRecordByCondition(@RequestParam Map<String,Object> map){ public RestResponse findApplicationOutRecordByCondition(@RequestParam Map<String,Object> map,HttpServletRequest request){
// 获取对应主订单 // 获取对应主订单
List<ApplicationOutRecordP> list = depositoryRecordService.findApplicationOutRecordPByCondition(map); List<ApplicationOutRecordP> list = depositoryRecordService.findApplicationOutRecordPByCondition(map,request);
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
ApplicationOutRecordP outRecordP = list.get(i); ApplicationOutRecordP outRecordP = list.get(i);
// 根据主订单获取所有子订单 // 根据主订单获取所有子订单
@ -460,7 +495,7 @@ public class DepositoryRecordController {
mcode.append(materialById.getCode()).append(","); mcode.append(materialById.getCode()).append(",");
depositoryName.append(depository.getDname()).append(","); depositoryName.append(depository.getDname()).append(",");
sumQuantity += applicationOutRecordMin.getQuantity(); sumQuantity += applicationOutRecordMin.getQuantity();
sumPrice += (materialById.getPrice() / 100); sumPrice += (materialById.getPrice());
} }
list.get(i).setMcode(mcode.toString()); list.get(i).setMcode(mcode.toString());
list.get(i).setMname(mname.toString()); list.get(i).setMname(mname.toString());
@ -525,12 +560,16 @@ public class DepositoryRecordController {
UserByPort userToken= (UserByPort) request.getAttribute("userToken"); UserByPort userToken= (UserByPort) request.getAttribute("userToken");
List<Integer> mids = (List<Integer>) map.get("mids"); List<Integer> mids = (List<Integer>) map.get("mids");
List<Integer> depositoryIds = (List<Integer>) map.get("depositoryIds"); List<Integer> depositoryIds = (List<Integer>) map.get("depositoryIds");
List<String> placeCodes = (List<String>) map.get("placeCodes");
for (int i = 0; i < mids.size(); i++) { for (int i = 0; i < mids.size(); i++) {
redisTemplate.opsForList().remove("mids"+userToken.getId(),1,mids.get(i)); redisTemplate.opsForList().remove("mids"+userToken.getId(),1,mids.get(i));
} }
for (int i = 0; i < depositoryIds.size(); i++) { for (int i = 0; i < depositoryIds.size(); i++) {
redisTemplate.opsForList().remove("depositoryIds"+userToken.getId(),1,depositoryIds.get(i)); redisTemplate.opsForList().remove("depositoryIds"+userToken.getId(),1,depositoryIds.get(i));
} }
for (int i = 0; i < placeCodes.size(); i++) {
redisTemplate.opsForList().remove("placeCodes"+userToken.getId(),1,placeCodes.get(i));
}
return CrudUtil.postHandle(1,1); return CrudUtil.postHandle(1,1);
} }
@ -538,7 +577,7 @@ public class DepositoryRecordController {
@PutMapping("/review") @PutMapping("/review")
public RestResponse review(@RequestBody Map<String,Object> map, HttpServletRequest request){ public RestResponse review(@RequestBody Map<String,Object> map, HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken"); UserByPort userToken= (UserByPort) request.getAttribute("userToken");
Integer review = depositoryRecordService.review(map, userToken.getId()); Integer review = depositoryRecordService.review(map, userToken.getId(),userToken);
if(review != -1) { if(review != -1) {
return CrudUtil.postHandle(review, 1); return CrudUtil.postHandle(review, 1);
}else{ }else{
@ -550,9 +589,18 @@ public class DepositoryRecordController {
@PutMapping("/transfer") @PutMapping("/transfer")
public RestResponse transfer(@RequestBody Map<String,Object> map, HttpServletRequest request){ public RestResponse transfer(@RequestBody Map<String,Object> map, HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken"); UserByPort userToken= (UserByPort) request.getAttribute("userToken");
// UserByPort departmentHeadByUser = findDepartmentHeadByUser(userToken); List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken);
StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = new StringBuilder();
/* for (int i = 0; i < departmentHeadByUsers.size(); i++) {
departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(",");
departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+",");
}*/
departmentHeadId.append("78").append(",");
departMentHeadQyWxName.append("PangFuZhen").append(",");
map.put("departmenthead",departmentHeadId.toString());
map.put("departMentHeadQyWxName",departMentHeadQyWxName.toString());
List<Integer> params = (List<Integer>) map.get("params"); List<Integer> params = (List<Integer>) map.get("params");
// map.put("departmenthead",departmentHeadByUser.getId());
map.put("applicantId",userToken.getId()); map.put("applicantId",userToken.getId());
map.put("toId",map.get("depositoryId")); map.put("toId",map.get("depositoryId"));
map.remove("depositoryId"); map.remove("depositoryId");
@ -563,7 +611,7 @@ public class DepositoryRecordController {
for (int i = 0; i < params.size(); i++) { for (int i = 0; i < params.size(); i++) {
Integer temp = params.get(i); Integer temp = params.get(i);
Map<String,Object> insert = new HashMap<>(); Map<String,Object> insert = new HashMap<>();
// insert.put("departmenthead",departmentHeadByUser.getId()); insert.put("departmenthead",departmentHeadId.toString());
insert.put("applicantId",userToken.getId()); insert.put("applicantId",userToken.getId());
insert.put("toId",map.get("depositoryId"+temp)); insert.put("toId",map.get("depositoryId"+temp));
insert.put("mid",map.get("mid"+temp)); insert.put("mid",map.get("mid"+temp));
@ -676,8 +724,16 @@ public class DepositoryRecordController {
success += depositoryRecordService.applicationInPlace(map); success += depositoryRecordService.applicationInPlace(map);
}else if("out".equals(type)){ }else if("out".equals(type)){
// 获取部门负责人 // 获取部门负责人
// UserByPort departmentHeadByUser = findDepartmentHeadByUser(userToken); List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken);
// map.put("departmenthead",departmentHeadByUser.getId()); StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = new StringBuilder();
/* for (int i = 0; i < departmentHeadByUsers.size(); i++) {
departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(",");
departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+",");
}*/
departmentHeadId.append("78").append(",");
departMentHeadQyWxName.append("PangFuZhen").append(",");
map.put("departmenthead",departmentHeadId.toString());
Integer res = depositoryRecordService.insertApplicationOutRecord(map,userToken); // 插入主订单 Integer res = depositoryRecordService.insertApplicationOutRecord(map,userToken); // 插入主订单
if(res == 1){ // 如果插入成功 if(res == 1){ // 如果插入成功
Object id = map.get("id"); // 获取主订单编号 Object id = map.get("id"); // 获取主订单编号
@ -686,6 +742,16 @@ public class DepositoryRecordController {
map.put("parentId",id); map.put("parentId",id);
} }
success += depositoryRecordService.insertApplicationOutMin(map); success += depositoryRecordService.insertApplicationOutMin(map);
// 向企业微信中对应用户发送消息
JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplateForHash.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
redisTemplateForHash.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
} }
} }
@ -765,11 +831,19 @@ public class DepositoryRecordController {
sumQuantity += integer; sumQuantity += integer;
} }
// 获取部门负责人 // 获取部门负责人
// UserByPort departmentHeadByUser = findDepartmentHeadByUser(userToken); List<UserByPort> departmentHeadByUsers = findDepartmentHeadByUser(userToken);
StringBuilder departmentHeadId = new StringBuilder();
StringBuilder departMentHeadQyWxName = new StringBuilder();
/* for (int i = 0; i < departmentHeadByUsers.size(); i++) {
departmentHeadId.append(departmentHeadByUsers.get(i).getId()).append(",");
departMentHeadQyWxName.append(departmentHeadByUsers.get(i).getWorkwechat()+",");
}*/
departmentHeadId.append("78").append(",");
departMentHeadQyWxName.append("PangFuZhen").append(",");
mainRecord.put("applicantId",userToken.getId()); mainRecord.put("applicantId",userToken.getId());
mainRecord.put("applyRemark",""); mainRecord.put("applyRemark","");
mainRecord.put("quantity",sumQuantity.toString()); mainRecord.put("quantity",sumQuantity.toString());
// mainRecord.put("departmenthead",departmentHeadByUser.getId()); mainRecord.put("departmenthead",departmentHeadId.toString());
// 插入主表 // 插入主表
depositoryRecordService.insertApplicationOutRecord(mainRecord,userToken); depositoryRecordService.insertApplicationOutRecord(mainRecord,userToken);
id = ObjectFormatUtil.toInteger(mainRecord.get("id")); id = ObjectFormatUtil.toInteger(mainRecord.get("id"));
@ -834,6 +908,16 @@ public class DepositoryRecordController {
errMsg += materialById.getMname() + "在"+depositoryRecordById.getDname()+"出库数量为"+quantity +"失败,数量不足;"; errMsg += materialById.getMname() + "在"+depositoryRecordById.getDname()+"出库数量为"+quantity +"失败,数量不足;";
} }
} }
// 向企业微信中对应用户发送消息
JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplateForHash.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
redisTemplateForHash.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
} }
if(success == 0){ if(success == 0){
depositoryRecordService.deleteApplicationOutRecordById(1); depositoryRecordService.deleteApplicationOutRecordById(1);
@ -866,17 +950,16 @@ public class DepositoryRecordController {
* @param user * @param user
* @return * @return
*/ */
public static UserByPort findDepartmentHeadByUser(UserByPort user){ public static List<UserByPort> findDepartmentHeadByUser(UserByPort user){
String url = PortConfig.external_url + "/org/positionlist"; String url = PortConfig.external_url + "/staff/archiveslist";
Integer maindeparment = user.getMaindeparment(); Integer maindeparment = user.getMaindeparment();
Map<String,Object> map = new HashMap<>(); Map<String,Object> map = new HashMap<>();
map.put("organization",maindeparment.toString()); map.put("adminorg",maindeparment);
map.put("incharge",1);
String jsonString = JSONObject.toJSONString(map); String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8); post = HttpUtils.send(url, paramObject, HTTP.UTF_8,user);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -886,11 +969,14 @@ public class DepositoryRecordController {
if(list == null){ if(list == null){
list = new JSONArray(); list = new JSONArray();
} }
Post userPost = JSONObject.toJavaObject((JSONObject) list.get(0), Post.class); List<UserByPort> DepartmentHeads = new ArrayList<>();
Map<String,Object> param = new HashMap<>(); for (int i = 0; i < list.size(); i++) {
param.put("position",userPost.getId()); UserByPort userByPort = JSONObject.toJavaObject((JSONObject) list.get(i), UserByPort.class);
UserByPort userByPort = PageController.FindUserByMap(param).get(0); if(userByPort.getPersonincharge() == 1){
return userByPort; DepartmentHeads.add(userByPort);
}
}
return DepartmentHeads;
} }

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

@ -2,6 +2,7 @@ package com.dreamchaser.depository_manage.controller;
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.JM_3DES;
import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.*; import com.dreamchaser.depository_manage.pojo.*;
@ -271,6 +272,12 @@ public class MaterialController {
return new RestResponse(materialPByCondition, materialService.findCountByCondition(map), 200); return new RestResponse(materialPByCondition, materialService.findCountByCondition(map), 200);
} }
@PostMapping("/findInventoryByCondition")
public RestResponse findInventoryByCondition(@RequestBody Map<String, Object> map) {
List<MaterialP> materialPByCondition = materialService.findInventory(map);
return new RestResponse(materialPByCondition, materialService.findInventoryCount(map), 200);
}
// 构造物料二维码 // 构造物料二维码
@GetMapping("/createQrCode") @GetMapping("/createQrCode")
@ -388,4 +395,17 @@ public class MaterialController {
return new RestResponse(flag); return new RestResponse(flag);
} }
/**
* 用于将扫描的结果进行解密操作
* @param map
* @return
*/
@PostMapping("/decode3Des")
public RestResponse decode3Des(@RequestBody Map<String, Object> map){
String result = (String) map.get("result");
String s = JM_3DES.decode3Des(JM_3DES.JM_Key, result);
return new RestResponse(s);
}
} }

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

@ -3,28 +3,37 @@ package com.dreamchaser.depository_manage.controller;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
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.JM_3DES;
import com.dreamchaser.depository_manage.config.PortConfig; 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.exception.MyException; import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.*; import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.security.bean.UserToken; import com.dreamchaser.depository_manage.security.bean.UserToken;
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.service.*; import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.utils.*; import com.dreamchaser.depository_manage.utils.*;
import com.sun.org.apache.xpath.internal.operations.Mod; import com.sun.org.apache.xpath.internal.operations.Mod;
import javafx.geometry.Pos; import javafx.geometry.Pos;
import org.apache.http.protocol.HTTP; import org.apache.http.protocol.HTTP;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.mobile.device.Device;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie; import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.Instant;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -72,12 +81,13 @@ public class PageController {
public static JSONObject Captcha(){ public static JSONObject Captcha(HttpServletRequest request){
UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
String url = PortConfig.external_url_6666 + "/base/captcha"; String url = PortConfig.external_url_6666 + "/base/captcha";
JSONObject param = new JSONObject(); JSONObject param = new JSONObject();
String post = null; String post = null;
try { try {
post = HttpUtils.send(url, param, HTTP.UTF_8); post = HttpUtils.send(url, param, HTTP.UTF_8,userByPort);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -97,14 +107,22 @@ public class PageController {
} }
/**
* 用于正常登录
* @param request
* @return
*/
@GetMapping("/login") @GetMapping("/login")
public ModelAndView login() { public ModelAndView login(HttpServletRequest request) {
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
JSONObject captcha = Captcha(); QyWxConfig.token = QyWxConfig.GetQYWXToken();
JSONObject captcha = Captcha(request);
String picPath = (String) captcha.get("picPath"); String picPath = (String) captcha.get("picPath");
String captchaid = (String) captcha.get("captchaid"); String captchaid = (String) captcha.get("captchaid");
mv.addObject("picPath", picPath); mv.addObject("picPath", picPath);
mv.addObject("captchaid", captchaid); mv.addObject("captchaid", captchaid);
mv.addObject("userWxId","");
mv.setViewName("pages/user/login"); mv.setViewName("pages/user/login");
return mv; return mv;
} }
@ -112,6 +130,11 @@ public class PageController {
@GetMapping("/index") @GetMapping("/index")
public ModelAndView index(HttpServletRequest request) { public ModelAndView index(HttpServletRequest request) {
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
@ -129,7 +152,10 @@ public class PageController {
*/ */
@RequestMapping(value = "/index/menus", method = RequestMethod.GET) @RequestMapping(value = "/index/menus", method = RequestMethod.GET)
@ResponseBody @ResponseBody
public Map<String, Object> index_menus(@RequestParam("uid") String uid) { public Map<String, Object> index_menus(@RequestParam("uid") String uid,
HttpServletRequest request,
HttpServletResponse response) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
//定义链接地址 //定义链接地址
String url = PortConfig.external_url_6666 + "/system_authorizing/obtain_authorization"; String url = PortConfig.external_url_6666 + "/system_authorizing/obtain_authorization";
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
@ -138,7 +164,7 @@ public class PageController {
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8); post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userToken);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -168,7 +194,7 @@ public class PageController {
Map<String, Object> logo = new HashMap<>(); Map<String, Object> logo = new HashMap<>();
Map<String, Object> logoInfo = new HashMap<>(); Map<String, Object> logoInfo = new HashMap<>();
logoInfo.put("title", ""); logoInfo.put("title", "");
logoInfo.put("image", "static/images/logo_back.png"); logoInfo.put("image", "/static/images/logo_back.ico");
logoInfo.put("href", ""); logoInfo.put("href", "");
logo.put("logoInfo", logoInfo); logo.put("logoInfo", logoInfo);
//定义菜单 //定义菜单
@ -284,31 +310,29 @@ public class PageController {
} }
@GetMapping("/depository_add") @GetMapping("/depository_add")
public ModelAndView depository_add() { public ModelAndView depository_add(HttpServletRequest request) {
UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/warehouse/depository_add"); mv.setViewName("pages/warehouse/depository_add");
List<Depository> depositoryAll = depositoryService.findDepositoryAll(); Map<String, Object> administration = DepositoryController.findAdministration(userByPort);
Map<String, Object> administration = DepositoryController.findAdministration();
List<AdministrationP> administrationPList = (List<AdministrationP>) administration.get("administrationPList"); List<AdministrationP> administrationPList = (List<AdministrationP>) administration.get("administrationPList");
mv.addObject("depositories", depositoryAll);
mv.addObject("administrationPList", administrationPList); mv.addObject("administrationPList", administrationPList);
return mv; return mv;
} }
@GetMapping("depository-out") @GetMapping("depository-out")
public ModelAndView depository_out(HttpServletRequest request) { public ModelAndView depository_out(HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/warehouse/depository-out"); mv.setViewName("pages/warehouse/depository-out");
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("parentId", 0); map.put("parentId", 0);
List<Depository> depositoryAll = depositoryService.findDepositoryRecordPByCondition(map); List<Depository> depositoryAll = depositoryService.findDepositoryRecordPByCondition(map,userToken);
UserByPort userToken = (UserByPort) request.getAttribute("userToken"); Integer role = userToken.getIsadmin();
// Integer role = roleService.findRoleByUid(userToken.getId().toString());
Integer role = userToken.getRole();
if(role == null){ if(role == null){
role = 0; role = 1;
} }
if (role == 1) { if (role == 4) {
mv.addObject("display", "inline-block"); mv.addObject("display", "inline-block");
} else { } else {
mv.addObject("display", "none"); mv.addObject("display", "none");
@ -322,19 +346,16 @@ public class PageController {
public ModelAndView material_out(HttpServletRequest request) { public ModelAndView material_out(HttpServletRequest request) {
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/material/material-out"); mv.setViewName("pages/material/material-out");
List<Material> materialAll = materialService.findMaterialAll();
List<Depository> depositoryAll = depositoryService.findDepositoryAll();
List<MaterialType> materialTypeAll = materialTypeService.findMaterialTypeAll();
UserByPort userToken = (UserByPort) request.getAttribute("userToken"); UserByPort userToken = (UserByPort) request.getAttribute("userToken");
Integer role = 1; Integer isadmin = userToken.getIsadmin();
if (role == 1) { if(isadmin == null){
isadmin = 1;
}
if (isadmin == 4) {
mv.addObject("display", "inline-block"); mv.addObject("display", "inline-block");
} else { } else {
mv.addObject("display", "none"); mv.addObject("display", "none");
} }
mv.addObject("materialTypes", materialTypeAll);
mv.addObject("depositories", depositoryAll);
mv.addObject("materials", materialAll);
return mv; return mv;
} }
@ -342,10 +363,6 @@ public class PageController {
public ModelAndView material_add() { public ModelAndView material_add() {
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/material/material-add"); mv.setViewName("pages/material/material-add");
List<Depository> depositoryAll = depositoryService.findDepositoryAll();
List<MaterialType> materialTypeAll = materialTypeService.findMaterialTypeAll();
mv.addObject("materialTypes", materialTypeAll);
mv.addObject("depositories", depositoryAll);
return mv; return mv;
} }
@ -420,6 +437,8 @@ public class PageController {
params.put("code",material.getCode()); params.put("code",material.getCode());
params.put("version",material.getVersion()); params.put("version",material.getVersion());
String context = JSONObject.toJSONString(params); String context = JSONObject.toJSONString(params);
// 将待展示数据进行加密操作
context = JM_3DES.encode3Des(JM_3DES.JM_Key,context);
String qrCode = ""; String qrCode = "";
try { try {
qrCode = CreateQrCodeUtil.createQrCode(context, 200, 200); qrCode = CreateQrCodeUtil.createQrCode(context, 200, 200);
@ -451,14 +470,13 @@ public class PageController {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("parentId", 0); map.put("parentId", 0);
UserByPort userToken = (UserByPort) request.getAttribute("userToken"); UserByPort userToken = (UserByPort) request.getAttribute("userToken");
// Integer role = roleService.findRoleByUid(userToken.getId().toString()); Integer role = userToken.getIsadmin();
Integer role = userToken.getRole();
if(role == null){ if(role == null){
role = 0; role = 1;
} }
List<MaterialType> materialTypeAll = materialTypeService.findMaterialTypeByCondition(map); List<MaterialType> materialTypeAll = materialTypeService.findMaterialTypeByCondition(map);
mv.addObject("materialTypes", materialTypeAll); mv.addObject("materialTypes", materialTypeAll);
if (role == 1) { if (role == 4) {
mv.addObject("display", "inline-block"); mv.addObject("display", "inline-block");
} else { } else {
mv.addObject("display", "none"); mv.addObject("display", "none");
@ -513,13 +531,13 @@ public class PageController {
} }
@GetMapping("/application_out_back") @GetMapping("/application_out_back")
public ModelAndView application_out_back(Integer code,String depositoryCode) { public ModelAndView application_out_back(Integer code,String depositoryId) {
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/application/application-out_back"); mv.setViewName("pages/application/application-out_back");
MaterialP materialById = new MaterialP(); MaterialP materialById = new MaterialP();
if(code != null) { if(code != null) {
Map<String,Object> map = new HashMap<>(); Map<String,Object> map = new HashMap<>();
Depository depositoryByCode = depositoryService.findDepositoryByCode(depositoryCode); Depository depositoryByCode = depositoryService.findDepositoryRecordById(ObjectFormatUtil.toInteger(depositoryId));
map.put("depositoryId",depositoryByCode.getId()); map.put("depositoryId",depositoryByCode.getId());
map.put("code",code); map.put("code",code);
List<MaterialP> inventory = materialService.findInventory(map); List<MaterialP> inventory = materialService.findInventory(map);
@ -555,10 +573,11 @@ public class PageController {
} }
@GetMapping("/table_user") @GetMapping("/table_user")
public ModelAndView table_user() { public ModelAndView table_user(HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/user/table-user"); mv.setViewName("pages/user/table-user");
List<AdministrationP> administrationPList = findAllCompany(); List<AdministrationP> administrationPList = findAllCompany(userToken);
mv.addObject("administrationPList", administrationPList); mv.addObject("administrationPList", administrationPList);
mv.addObject("users", userService.findUserPsByCondition(new HashMap<>())); mv.addObject("users", userService.findUserPsByCondition(new HashMap<>()));
return mv; return mv;
@ -568,7 +587,6 @@ public class PageController {
public ModelAndView table_stock() { public ModelAndView table_stock() {
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/depository/table-stock"); mv.setViewName("pages/depository/table-stock");
mv.addObject("depositories", depositoryService.findDepositoryAll());
return mv; return mv;
} }
@ -630,9 +648,6 @@ public class PageController {
public ModelAndView chart_out_back() { public ModelAndView chart_out_back() {
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/chart/chart-out_back"); mv.setViewName("pages/chart/chart-out_back");
mv.addObject("depositories", depositoryService.findDepositoryAll());
mv.addObject("reviewers", userService.findReviewers());
mv.addObject("materials", materialService.findMaterialAll());
// 转出物料数量 // 转出物料数量
mv.addObject("InCount", depositoryRecordService.CalculateAllApplicationOutCount("已出库")); mv.addObject("InCount", depositoryRecordService.CalculateAllApplicationOutCount("已出库"));
// 转出物料金额 // 转出物料金额
@ -663,13 +678,13 @@ public class PageController {
* @param map * @param map
* @return * @return
*/ */
public static List<UserByPort> FindUserByMap(Map<String,Object> map) { public static List<UserByPort> FindUserByMap(Map<String,Object> map,UserByPort userToken) {
String url = PortConfig.external_url + "/staff/archiveslist"; String url = PortConfig.external_url + "/staff/archiveslist";
String jsonString = JSONObject.toJSONString(map); String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8); post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userToken);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -687,7 +702,7 @@ public class PageController {
return result; return result;
} }
public static UserByPort FindUserById(Integer id) { public static UserByPort FindUserById(Integer id,UserByPort userToken) {
String url = PortConfig.external_url + "/staff/archivescont"; String url = PortConfig.external_url + "/staff/archivescont";
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("id", id); map.put("id", id);
@ -695,7 +710,8 @@ public class PageController {
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8); post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userToken);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -707,10 +723,11 @@ public class PageController {
@GetMapping("/user_add") @GetMapping("/user_add")
public ModelAndView user_add(Integer userId) { public ModelAndView user_add(Integer userId,HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/user/user-add"); mv.setViewName("pages/user/user-add");
UserByPort userByPort = FindUserById(userId); UserByPort userByPort = FindUserById(userId,userToken);
UserByPortP userByPortP = new UserByPortP(userByPort); UserByPortP userByPortP = new UserByPortP(userByPort);
mv.addObject("userByPort", userByPortP); mv.addObject("userByPort", userByPortP);
mv.addObject("roles", roleService.findAllRole()); mv.addObject("roles", roleService.findAllRole());
@ -719,13 +736,14 @@ public class PageController {
} }
@GetMapping("/user_role_edit") @GetMapping("/user_role_edit")
public ModelAndView user_role_edit(Integer id) { public ModelAndView user_role_edit(Integer id,HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/user/user-role-edit"); mv.setViewName("pages/user/user-role-edit");
RoleAndDepository roleAndDepositoryById = roleService.findRoleAndDepositoryById(id); RoleAndDepository roleAndDepositoryById = roleService.findRoleAndDepositoryById(id);
UserByPortP userByPortP = null; UserByPortP userByPortP = null;
if (roleAndDepositoryById != null) { if (roleAndDepositoryById != null) {
UserByPort userByPort = FindUserById(roleAndDepositoryById.getUserId()); UserByPort userByPort = FindUserById(roleAndDepositoryById.getUserId(),userToken);
userByPortP = new UserByPortP(userByPort); userByPortP = new UserByPortP(userByPort);
userByPortP.setRolename(roleAndDepositoryById.getRoleName()); userByPortP.setRolename(roleAndDepositoryById.getRoleName());
userByPortP.setDepositoryName(roleAndDepositoryById.getDepositoryName()); userByPortP.setDepositoryName(roleAndDepositoryById.getDepositoryName());
@ -739,13 +757,14 @@ public class PageController {
} }
@GetMapping("/post_role_edit") @GetMapping("/post_role_edit")
public ModelAndView post_role_edit(Integer id,Integer depositoryId) { public ModelAndView post_role_edit(Integer id,Integer depositoryId,HttpServletRequest request) {
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/post/postRole_edit"); mv.setViewName("pages/post/postRole_edit");
Map<String,Object> userParam = new HashMap<>(); Map<String,Object> userParam = new HashMap<>();
userParam.put("position",id); userParam.put("position",id);
List<UserByPort> userByPortList = PageController.FindUserByMap(userParam); List<UserByPort> userByPortList = PageController.FindUserByMap(userParam,userToken);
Post postById = findPostById(id); Post postById = findPostById(id,userToken);
PostP pp = new PostP(postById); PostP pp = new PostP(postById);
Map<String,Object> param = new HashMap<>(); Map<String,Object> param = new HashMap<>();
param.put("depositoryId",depositoryId); param.put("depositoryId",depositoryId);
@ -761,20 +780,22 @@ public class PageController {
} }
@GetMapping("/user_detail") @GetMapping("/user_detail")
public ModelAndView user_edit(Integer id) { public ModelAndView user_edit(Integer id,HttpServletRequest request) {
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/user/user-edit"); mv.setViewName("pages/user/user-edit");
mv.addObject("depositories", depositoryService.findDepositoryAll()); mv.addObject("depositories", depositoryService.findDepositoryAll());
Map<String,Object> map = new HashMap<>(); Map<String,Object> map = new HashMap<>();
map.put("number",id.toString()); map.put("number",id.toString());
UserByPort userByPort = FindUserByMap(map).get(0); UserByPort userByPort = FindUserByMap(map,userToken).get(0);
mv.addObject("user", userByPort); mv.addObject("user", userByPort);
return mv; return mv;
} }
@GetMapping("/warehouse_view") @GetMapping("/warehouse_view")
public ModelAndView warehouse_view(Integer id) { public ModelAndView warehouse_view(Integer id,HttpServletRequest request) {
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/warehouse/warehouse_view"); mv.setViewName("pages/warehouse/warehouse_view");
if (id != null) { if (id != null) {
@ -786,6 +807,8 @@ public class PageController {
param.put("dname",depositoryRecordById.getDname()); param.put("dname",depositoryRecordById.getDname());
param.put("introduce",depositoryRecordById.getIntroduce()); param.put("introduce",depositoryRecordById.getIntroduce());
String context = JSONObject.toJSONString(param); String context = JSONObject.toJSONString(param);
// 将待展示数据进行加密操作
context = JM_3DES.encode3Des(JM_3DES.JM_Key,context);
String qrCode = ""; String qrCode = "";
try { try {
qrCode = CreateQrCodeUtil.createQrCode(context,200,200); qrCode = CreateQrCodeUtil.createQrCode(context,200,200);
@ -795,8 +818,8 @@ public class PageController {
mv.addObject("qrCode",qrCode); mv.addObject("qrCode",qrCode);
mv.addObject("record", depositoryRecordById); mv.addObject("record", depositoryRecordById);
Integer cid = depositoryRecordById.getCid(); Integer cid = depositoryRecordById.getCid();
List<AdministrationP> postList = findCompanyBySuperior(cid.toString()); List<AdministrationP> postList = findCompanyBySuperior(cid.toString(),userToken);
List<AdministrationP> administrationPList = findAllCompany(); List<AdministrationP> administrationPList = findAllCompany(userToken);
// 部门列表 // 部门列表
mv.addObject("postList", postList); mv.addObject("postList", postList);
// 公司列表 // 公司列表
@ -809,14 +832,15 @@ public class PageController {
} }
@GetMapping("/warehouseByParentId") @GetMapping("/warehouseByParentId")
public ModelAndView warehouseByParentId(Integer parentId) { public ModelAndView warehouseByParentId(Integer parentId,HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/warehouse/warehouseByParentId"); mv.setViewName("pages/warehouse/warehouseByParentId");
if (parentId != null) { if (parentId != null) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("parentId", parentId); param.put("parentId", parentId);
mv.addObject("parentId", parentId); mv.addObject("parentId", parentId);
mv.addObject("depositories", depositoryService.findDepositoryRecordPByCondition(param)); mv.addObject("depositories", depositoryService.findDepositoryRecordPByCondition(param,userToken));
} else { } else {
throw new MyException("缺少必要参数!"); throw new MyException("缺少必要参数!");
} }
@ -851,6 +875,8 @@ public class PageController {
param.put("midList",midList.toString()); param.put("midList",midList.toString());
param.put("mcodeList",mcodeList.toString()); param.put("mcodeList",mcodeList.toString());
String context = JSONObject.toJSONString(param); String context = JSONObject.toJSONString(param);
// 将待展示数据进行加密操作
context = JM_3DES.encode3Des(JM_3DES.JM_Key,context);
String qrCode = ""; String qrCode = "";
try { try {
qrCode = CreateQrCodeUtil.createQrCode(context,200,200); qrCode = CreateQrCodeUtil.createQrCode(context,200,200);
@ -890,13 +916,23 @@ public class PageController {
} }
@GetMapping("findWareHouseByParentId") @GetMapping("findWareHouseByParentId")
public ModelAndView findWareHouseByParentId(Integer parentId) { public ModelAndView findWareHouseByParentId(Integer parentId,HttpServletRequest request) {
UserByPort userByPort = (UserByPort)request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
if (parentId != null) { if (parentId != null) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("parentId", parentId); param.put("parentId", parentId);
mv.addObject("parentId", parentId); mv.addObject("parentId", parentId);
List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param); List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param,userByPort);
Integer role = userByPort.getIsadmin();
if(role == null){
role = 1;
}
if (role == 4) {
mv.addObject("display", "inline-block");
} else {
mv.addObject("display", "none");
}
if (depositoryRecordPByCondition.size() > 0) { if (depositoryRecordPByCondition.size() > 0) {
mv.addObject("depositories", depositoryRecordPByCondition); mv.addObject("depositories", depositoryRecordPByCondition);
mv.setViewName("pages/warehouse/depository-out"); mv.setViewName("pages/warehouse/depository-out");
@ -905,6 +941,7 @@ public class PageController {
mv.addObject("placeList",placeByDid); mv.addObject("placeList",placeByDid);
mv.setViewName("pages/warehouse/warehouseByParentId"); mv.setViewName("pages/warehouse/warehouseByParentId");
} }
} else { } else {
throw new MyException("缺少必要参数!"); throw new MyException("缺少必要参数!");
} }
@ -944,13 +981,23 @@ public class PageController {
} }
@GetMapping("findMaterialTypeByParentId") @GetMapping("findMaterialTypeByParentId")
public ModelAndView findMaterialTypeByParentId(Integer parentId) { public ModelAndView findMaterialTypeByParentId(Integer parentId,HttpServletRequest request) {
UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
if (parentId != null) { if (parentId != null) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("parentId", parentId); param.put("parentId", parentId);
mv.addObject("parentId", parentId); mv.addObject("parentId", parentId);
List<MaterialType> materialTypeByCondition = materialTypeService.findMaterialTypeByCondition(param); List<MaterialType> materialTypeByCondition = materialTypeService.findMaterialTypeByCondition(param);
Integer role = userByPort.getIsadmin();
if(role == null){
role = 1;
}
if (role == 4) {
mv.addObject("display", "inline-block");
} else {
mv.addObject("display", "none");
}
if (materialTypeByCondition.size() > 0) { if (materialTypeByCondition.size() > 0) {
mv.addObject("materialTypes", materialTypeByCondition); mv.addObject("materialTypes", materialTypeByCondition);
mv.setViewName("pages/materialtype/materialType_view"); mv.setViewName("pages/materialtype/materialType_view");
@ -978,7 +1025,8 @@ public class PageController {
} }
@GetMapping("/application_review") @GetMapping("/application_review")
public ModelAndView application_review(Integer id) { public ModelAndView application_review(Integer id,HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/application/application-review"); mv.setViewName("pages/application/application-review");
// 获取主订单信息 // 获取主订单信息
@ -1015,12 +1063,19 @@ public class PageController {
mcode.append(materialById.getCode()).append(","); mcode.append(materialById.getCode()).append(",");
depositoryName.append(depository.getDname()).append(","); depositoryName.append(depository.getDname()).append(",");
sumQuantity += applicationOutRecordMin.getQuantity(); sumQuantity += applicationOutRecordMin.getQuantity();
sumPrice += (materialById.getPrice() / 100); sumPrice += (materialById.getPrice());
} }
// 申请人 // 申请人
UserByPort userByPort = FindUserById(recordP.getApplicantId()); UserByPort userByPort = FindUserById(recordP.getApplicantId(),userToken);
// 部门负责人 // 部门负责人
UserByPort departmenthead = FindUserById(recordP.getDepartmenthead()); String departmentheads = recordP.getDepartmenthead();
String[] split = departmentheads.split(",");
StringBuilder departmentHeadName = new StringBuilder();
for (int i = 0; i < split.length; i++) {
UserByPort departmenthead = FindUserById(ObjectFormatUtil.toInteger(split[i]),userToken);
departmentHeadName.append(departmenthead.getName()).append(",");
}
// 仓储中心负责人 // 仓储中心负责人
String manager = recordP.getDepositoryManager(); String manager = recordP.getDepositoryManager();
String[] depositoryManagerId = new String[0]; String[] depositoryManagerId = new String[0];
@ -1031,7 +1086,7 @@ public class PageController {
String depositoryManagerNames = ""; String depositoryManagerNames = "";
for (int i = 0; i < depositoryManagerId.length; i++) { for (int i = 0; i < depositoryManagerId.length; i++) {
Integer managerid = ObjectFormatUtil.toInteger(depositoryManagerId[i]); Integer managerid = ObjectFormatUtil.toInteger(depositoryManagerId[i]);
UserByPort user = FindUserById(managerid); UserByPort user = FindUserById(managerid,userToken);
depositoryManager.add(user); depositoryManager.add(user);
depositoryManagerNames += user.getName() +","; depositoryManagerNames += user.getName() +",";
} }
@ -1043,26 +1098,24 @@ public class PageController {
recordP.setDepartmentheadTime(DateUtil.TimeStampToDateTime(Long.valueOf(recordP.getDepartmentheadTime()))); recordP.setDepartmentheadTime(DateUtil.TimeStampToDateTime(Long.valueOf(recordP.getDepartmentheadTime())));
recordP.setDepositoryManagerName(depositoryManagerNames); recordP.setDepositoryManagerName(depositoryManagerNames);
recordP.setApplicantName(userByPort.getName()); recordP.setApplicantName(userByPort.getName());
recordP.setDepartmentheadName(departmenthead.getName()); recordP.setDepartmentheadName(departmentHeadName.toString());
recordP.setMcode(mcode.toString()); recordP.setMcode(mcode.toString());
recordP.setMname(mname.toString()); recordP.setMname(mname.toString());
recordP.setDepositoryName(depositoryName.toString()); recordP.setDepositoryName(depositoryName.toString());
recordP.setQuantity(sumQuantity); recordP.setQuantity(sumQuantity);
recordP.setPrice(sumPrice); recordP.setPrice(sumPrice);
if(recordP.getPrice()!=null) {
recordP.setPrice(recordP.getPrice() / 100);
}
mv.addObject("record", recordP); mv.addObject("record", recordP);
return mv; return mv;
} }
@GetMapping("/form_step_look") @GetMapping("/form_step_look")
public ModelAndView form_step_look(Integer id) { public ModelAndView form_step_look(Integer id,HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/application/form-step-look"); mv.setViewName("pages/application/form-step-look");
if (id != null) { if (id != null) {
ApplicationInRecordP applicationInRecordPById = depositoryRecordService.findApplicationInRecordPById(id); ApplicationInRecordP applicationInRecordPById = depositoryRecordService.findApplicationInRecordPById(id);
UserByPort userByPort = FindUserById(applicationInRecordPById.getApplicantId()); UserByPort userByPort = FindUserById(applicationInRecordPById.getApplicantId(),userToken);
applicationInRecordPById.setApplicantName(userByPort.getName()); applicationInRecordPById.setApplicantName(userByPort.getName());
applicationInRecordPById.setApplicantTime(DateUtil.TimeStampToDateTime(Long.valueOf(applicationInRecordPById.getApplicantTime()))); applicationInRecordPById.setApplicantTime(DateUtil.TimeStampToDateTime(Long.valueOf(applicationInRecordPById.getApplicantTime())));
applicationInRecordPById.setPrice(applicationInRecordPById.getPrice() / 100); applicationInRecordPById.setPrice(applicationInRecordPById.getPrice() / 100);
@ -1074,10 +1127,45 @@ public class PageController {
return mv; return mv;
} }
@GetMapping("/form_step_lookByminRecordOut")
public ModelAndView form_step_lookByminRecordOut(Integer id,HttpServletRequest request){
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView();
mv.setViewName("pages/application/form-step-look_minRecordOut");
if(id != null){
// 获取当前子订单
ApplicationOutRecordMin recordMin = depositoryRecordService.findApplicationOutMinById(id);
ApplicationOutRecordMinP recordMinP = new ApplicationOutRecordMinP(recordMin);
// 获取出库物料信息
Material materialById = materialService.findMaterialById(recordMin.getMid());
// 获取出库物料仓库信息
Depository depository = depositoryService.findDepositoryRecordById(recordMin.getDepositoryId());
// 获取出库库位
Place placeById = placeService.findPlaceById(recordMin.getPlaceId());
// 获取处理人
UserByPort userByPort = FindUserById(recordMin.getCheckId(), userToken);
// 设置处理人姓名
recordMinP.setCheckerName(userByPort.getName());
recordMinP.setDepositoryName(depository.getDname());
recordMinP.setMname(materialById.getMname());
recordMinP.setMcode(materialById.getCode());
recordMinP.setPlaceCode(placeById.getCode());
Double price = (materialById.getPrice() / 100) * recordMinP.getQuantity();
BigDecimal bg = new BigDecimal(price);
price = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
recordMinP.setPrice(price);
mv.addObject("recordMinP",recordMinP);
} else {
throw new MyException("缺少必要参数!");
}
return mv;
}
// 跳转到出库详情 // 跳转到出库详情
@GetMapping("/ApplicationOutView") @GetMapping("/ApplicationOutView")
public ModelAndView ApplicationOutView(Integer id) { public ModelAndView ApplicationOutView(Integer id,HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/application/form-step-look_back"); mv.setViewName("pages/application/form-step-look_back");
if (id != null) { if (id != null) {
@ -1093,14 +1181,22 @@ public class PageController {
StringBuilder depositoryName = new StringBuilder(); StringBuilder depositoryName = new StringBuilder();
// 展示出库的库位编码 // 展示出库的库位编码
StringBuilder placeCode = new StringBuilder(); StringBuilder placeCode = new StringBuilder();
// 展示当前子订单的处理人
StringBuilder outDisposer = new StringBuilder();
// 当前订单总数 // 当前订单总数
Integer sumQuantity = 0; Integer sumQuantity = 0;
// 每个物料数量
StringBuilder quantityByMaterial = new StringBuilder();
List<ApplicationOutRecordMinP> recordMinPList = new ArrayList<>();
// 当前总额 // 当前总额
Double sumPrice = 0.0; Double sumPrice = 0.0;
for (int i = 0; i < applicationOutRecordMinByParent.size(); i++) { for (int i = 0; i < applicationOutRecordMinByParent.size(); i++) {
// 获取子订单信息 // 获取子订单信息
ApplicationOutRecordMin applicationOutRecordMin = applicationOutRecordMinByParent.get(i); ApplicationOutRecordMin applicationOutRecordMin = applicationOutRecordMinByParent.get(i);
// 获取输出子订单信息
ApplicationOutRecordMinP recordMinP = new ApplicationOutRecordMinP(applicationOutRecordMin);
// 获取出库物料信息 // 获取出库物料信息
Material materialById = materialService.findMaterialById(applicationOutRecordMin.getMid()); Material materialById = materialService.findMaterialById(applicationOutRecordMin.getMid());
// 获取出库物料仓库信息 // 获取出库物料仓库信息
@ -1110,16 +1206,42 @@ public class PageController {
if(placeById != null) { if(placeById != null) {
placeCode.append(placeById.getCode()).append(","); placeCode.append(placeById.getCode()).append(",");
} }
recordMinP.setMname(materialById.getMname());
recordMinP.setDepositoryName(depository.getDname());
recordMinP.setPlaceCode(placeById.getCode());
Integer checkId = applicationOutRecordMin.getCheckId();
if(checkId != null){
// 如果当前子订单已经处理
// 获取当前处理人
UserByPort disposer = FindUserById(checkId, userToken);
outDisposer.append(disposer.getName()+",");
recordMinP.setCheckerName(disposer.getName());
}else{
outDisposer.append("暂未处理,");
recordMinP.setCheckerName("暂未处理");
}
mname.append(materialById.getMname()).append(","); mname.append(materialById.getMname()).append(",");
mcode.append(materialById.getCode()).append(","); mcode.append(materialById.getCode()).append(",");
depositoryName.append(depository.getDname()).append(","); depositoryName.append(depository.getDname()).append(",");
quantityByMaterial.append(applicationOutRecordMin.getQuantity()+",");
sumQuantity += applicationOutRecordMin.getQuantity(); sumQuantity += applicationOutRecordMin.getQuantity();
sumPrice += (materialById.getPrice() / 100); sumPrice += (materialById.getPrice());
recordMinPList.add(recordMinP);
} }
// 申请人 // 申请人
UserByPort userByPort = FindUserById(applicationOutRecordPById.getApplicantId()); UserByPort userByPort = FindUserById(applicationOutRecordPById.getApplicantId(),userToken);
// 部门负责人 // 部门负责人
UserByPort departmenthead = FindUserById(applicationOutRecordPById.getDepartmenthead()); String departmentHead = applicationOutRecordPById.getDepartmenthead();
String[] split = departmentHead.split(",");
if("".equals(departmentHead)||departmentHead.isEmpty()){
// 如果当前没有部门负责人
split = new String[0];
}
StringBuilder departmentHeadName = new StringBuilder();
for (int i = 0; i < split.length; i++) {
UserByPort departmenthead = FindUserById(ObjectFormatUtil.toInteger(split[i]),userToken);
departmentHeadName.append(departmenthead.getName()).append(",");
}
// 仓储中心负责人 // 仓储中心负责人
String manager = applicationOutRecordPById.getDepositoryManager(); String manager = applicationOutRecordPById.getDepositoryManager();
String[] depositoryManagerId = new String[0]; String[] depositoryManagerId = new String[0];
@ -1130,12 +1252,12 @@ public class PageController {
String depositoryManagerNames = ""; String depositoryManagerNames = "";
for (int i = 0; i < depositoryManagerId.length; i++) { for (int i = 0; i < depositoryManagerId.length; i++) {
Integer managerid = ObjectFormatUtil.toInteger(depositoryManagerId[i]); Integer managerid = ObjectFormatUtil.toInteger(depositoryManagerId[i]);
UserByPort user = FindUserById(managerid); UserByPort user = FindUserById(managerid,userToken);
depositoryManager.add(user); depositoryManager.add(user);
depositoryManagerNames += user.getName(); depositoryManagerNames += user.getName();
} }
applicationOutRecordPById.setApplicantName(userByPort.getName()); applicationOutRecordPById.setApplicantName(userByPort.getName());
applicationOutRecordPById.setDepartmentheadName(departmenthead.getName()); applicationOutRecordPById.setDepartmentheadName(departmentHeadName.toString());
applicationOutRecordPById.setDepositoryManagerName(depositoryManagerNames); applicationOutRecordPById.setDepositoryManagerName(depositoryManagerNames);
applicationOutRecordPById.setApplicantTime(DateUtil.TimeStampToDateTime(Long.valueOf(applicationOutRecordPById.getApplicantTime()))); applicationOutRecordPById.setApplicantTime(DateUtil.TimeStampToDateTime(Long.valueOf(applicationOutRecordPById.getApplicantTime())));
applicationOutRecordPById.setDepartmentheadTime(DateUtil.TimeStampToDateTime(Long.valueOf(applicationOutRecordPById.getDepartmentheadTime()))); applicationOutRecordPById.setDepartmentheadTime(DateUtil.TimeStampToDateTime(Long.valueOf(applicationOutRecordPById.getDepartmentheadTime())));
@ -1147,6 +1269,8 @@ public class PageController {
applicationOutRecordPById.setDepositoryName(depositoryName.toString()); applicationOutRecordPById.setDepositoryName(depositoryName.toString());
applicationOutRecordPById.setPCode(placeCode.toString()); applicationOutRecordPById.setPCode(placeCode.toString());
mv.addObject("record", applicationOutRecordPById); mv.addObject("record", applicationOutRecordPById);
mv.addObject("outDisposer",outDisposer.toString());
mv.addObject("recordMinList",recordMinPList);
} else { } else {
throw new MyException("缺少必要参数!"); throw new MyException("缺少必要参数!");
} }
@ -1191,7 +1315,7 @@ public class PageController {
} }
public List<AdministrationP> findAllCompany() { public List<AdministrationP> findAllCompany(UserByPort userByPort) {
String url = PortConfig.external_url + "/org/govlist"; String url = PortConfig.external_url + "/org/govlist";
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("superior", "313"); map.put("superior", "313");
@ -1199,7 +1323,7 @@ public class PageController {
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8); post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userByPort);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -1221,9 +1345,10 @@ public class PageController {
@GetMapping("/company_out") @GetMapping("/company_out")
public ModelAndView Company_Out(HttpServletRequest request) { public ModelAndView Company_Out(HttpServletRequest request) {
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/company/company-out"); mv.setViewName("pages/company/company-out");
List<AdministrationP> administrationPList = findAllCompany(); List<AdministrationP> administrationPList = findAllCompany(userToken);
mv.addObject("administrationPList", administrationPList); mv.addObject("administrationPList", administrationPList);
mv.addObject("parentId", "313"); mv.addObject("parentId", "313");
return mv; return mv;
@ -1240,7 +1365,7 @@ public class PageController {
@GetMapping("/company_detail") @GetMapping("/company_detail")
public ModelAndView company_detail(Integer id) { public ModelAndView company_detail(Integer id,UserByPort userByPort) {
String url = PortConfig.external_url + "/org/getgovcont"; String url = PortConfig.external_url + "/org/getgovcont";
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
@ -1252,14 +1377,14 @@ public class PageController {
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8); post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userByPort);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
JSONObject jsonObject = JSONObject.parseObject(post); JSONObject jsonObject = JSONObject.parseObject(post);
JSONObject data = (JSONObject) jsonObject.get("data"); JSONObject data = (JSONObject) jsonObject.get("data");
Administration administration = JSONObject.toJavaObject(data, Administration.class); Administration administration = JSONObject.toJavaObject(data, Administration.class);
String SuperiorName = getCompany(administration.getSuperior()).getName(); String SuperiorName = getCompany(administration.getSuperior(),userByPort).getName();
mv.addObject("record", administration); mv.addObject("record", administration);
mv.addObject("SuperiorName", SuperiorName); mv.addObject("SuperiorName", SuperiorName);
} else { } else {
@ -1268,7 +1393,7 @@ public class PageController {
return mv; return mv;
} }
public static Administration getCompany(Integer id) { public static Administration getCompany(Integer id,UserByPort userByPort) {
String url = PortConfig.external_url + "/org/getgovcont"; String url = PortConfig.external_url + "/org/getgovcont";
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("id", id); map.put("id", id);
@ -1277,7 +1402,7 @@ public class PageController {
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8); post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userByPort);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -1289,7 +1414,7 @@ public class PageController {
public static List<AdministrationP> findCompanyBySuperior(String superior) { public static List<AdministrationP> findCompanyBySuperior(String superior,UserByPort userByPort) {
String url = PortConfig.external_url + "/org/govlist"; String url = PortConfig.external_url + "/org/govlist";
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("superior", superior); map.put("superior", superior);
@ -1297,7 +1422,7 @@ public class PageController {
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8); post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userByPort);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -1318,11 +1443,12 @@ public class PageController {
} }
@GetMapping("/findCompanyByParentId") @GetMapping("/findCompanyByParentId")
public ModelAndView findCompanyByParentId(Integer parentId) { public ModelAndView findCompanyByParentId(Integer parentId,HttpServletRequest request) {
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
if (parentId != null) { if (parentId != null) {
mv.addObject("parentId", parentId); mv.addObject("parentId", parentId);
List<AdministrationP> administrationPList = findCompanyBySuperior(parentId.toString()); List<AdministrationP> administrationPList = findCompanyBySuperior(parentId.toString(),userToken);
if (administrationPList.size() > 0) { if (administrationPList.size() > 0) {
mv.addObject("administrationPList", administrationPList); mv.addObject("administrationPList", administrationPList);
mv.setViewName("pages/company/company-out"); mv.setViewName("pages/company/company-out");
@ -1336,7 +1462,8 @@ public class PageController {
} }
@GetMapping("/findPostByOrganization") @GetMapping("/findPostByOrganization")
public ModelAndView findPostByOrganization(Integer organization) { public ModelAndView findPostByOrganization(Integer organization,HttpServletRequest request) {
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
String url = PortConfig.external_url + "/org/positionlist"; String url = PortConfig.external_url + "/org/positionlist";
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/post/post-out"); mv.setViewName("pages/post/post-out");
@ -1348,7 +1475,7 @@ public class PageController {
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8); post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userToken);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -1373,11 +1500,12 @@ public class PageController {
} }
@GetMapping("/post_detail") @GetMapping("/post_detail")
public ModelAndView post_detail(Integer id) { public ModelAndView post_detail(Integer id,HttpServletRequest request) {
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/post/post-view"); mv.setViewName("pages/post/post-view");
if (id != null) { if (id != null) {
Post object = findPostById(id); Post object = findPostById(id,userToken);
mv.addObject("record", object); mv.addObject("record", object);
} else { } else {
throw new MyException("缺少必要参数!"); throw new MyException("缺少必要参数!");
@ -1385,7 +1513,7 @@ public class PageController {
return mv; return mv;
} }
public static Post findPostById(Integer id) { public static Post findPostById(Integer id,UserByPort userByPort) {
String url = PortConfig.external_url + "/org/getpositioncont"; String url = PortConfig.external_url + "/org/getpositioncont";
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("id", id); map.put("id", id);
@ -1394,7 +1522,7 @@ public class PageController {
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8); post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userByPort);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -1406,7 +1534,8 @@ public class PageController {
@GetMapping("/findPostByParentId") @GetMapping("/findPostByParentId")
public ModelAndView findPostByParentId(Integer parentId) { public ModelAndView findPostByParentId(Integer parentId,HttpServletRequest request) {
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
String url = PortConfig.external_url + "/org/positionlist"; String url = PortConfig.external_url + "/org/positionlist";
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
if (parentId != null) { if (parentId != null) {
@ -1417,7 +1546,7 @@ public class PageController {
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8); post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userToken);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -1448,10 +1577,11 @@ public class PageController {
// 跳转到添加权限界面 // 跳转到添加权限界面
@GetMapping("/postRoleAdd") @GetMapping("/postRoleAdd")
public ModelAndView PostRoleAdd(Integer id) { public ModelAndView PostRoleAdd(Integer id,HttpServletRequest request) {
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/post/postRole_add"); mv.setViewName("pages/post/postRole_add");
Post postById = findPostById(id); Post postById = findPostById(id,userToken);
mv.addObject("post", postById); mv.addObject("post", postById);
mv.addObject("roles", roleService.findAllRole()); mv.addObject("roles", roleService.findAllRole());
mv.addObject("depositories", depositoryService.findDepositoryAll()); mv.addObject("depositories", depositoryService.findDepositoryAll());
@ -1552,7 +1682,7 @@ public class PageController {
return mv; return mv;
} }
// 当前仓库中该用户的子订单详情 // 当前仓库中该用户的子订单详情,用于pc端
@GetMapping("/ApplicationOutMinByDid") @GetMapping("/ApplicationOutMinByDid")
public ModelAndView ApplicationOutMinByDid(Integer depositoryId,Integer state,HttpServletRequest request){ public ModelAndView ApplicationOutMinByDid(Integer depositoryId,Integer state,HttpServletRequest request){
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
@ -1561,4 +1691,17 @@ public class PageController {
mv.setViewName("pages/application/application-out_min"); mv.setViewName("pages/application/application-out_min");
return mv; return mv;
} }
// 当前仓库中该用户的子订单详情,用于移动端
@GetMapping("/ApplicationOutMinByDidForMobile")
public ModelAndView ApplicationOutMinByDidForMobile(Integer depositoryId,Integer state,HttpServletRequest request){
ModelAndView mv = new ModelAndView();
Depository depository = depositoryService.findDepositoryRecordById(depositoryId);
mv.addObject("depositoryId",depositoryId);
mv.addObject("state",state);
mv.addObject("depository",depository);
mv.setViewName("pages/application/application-out_min-mobile");
return mv;
}
} }

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

@ -0,0 +1,276 @@
package com.dreamchaser.depository_manage.controller;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes.AesException;
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.callBackXml.CallBackBaseXml;
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;
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.impl.QyWxOperationService;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import com.dreamchaser.depository_manage.utils.QyWxXMLUtils;
import io.micrometer.core.instrument.util.IOUtils;
import org.joda.time.format.FormatUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.time.Instant;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
/**
* 用于企业微信相关操作的控制器
*/
@Controller
public class QyWxOperationController {
@Autowired
CallBackLogService callBackLogService;
@Autowired
QyWxOperationService qyWxOperationService;
@Autowired
DepositoryRecordService depositoryRecordService;
/**
* 用于接收企业微信的回调get方式
*/
@GetMapping("/callback")
public void callBackForGet(@RequestParam Map<String,Object> map, HttpServletResponse response){
try {
// 构造解密对象
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(QyWxConfig.sToken,QyWxConfig.sEncodingAESKey,QyWxConfig.corpid);
// 企业微信加密签名
String sVerifyMsgSig = (String) map.get("msg_signature");
// 时间戳
Integer sVerifyTimeStamp = ObjectFormatUtil.toInteger(map.get("timestamp"));
// 随机数
String sVerifyNonce = (String) map.get("nonce");
// 加密的字符串
String sVerifyEchoStr = (String) map.get("echostr");
String sEchoStr; //需要返回的明文
sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp.toString(),
sVerifyNonce, sVerifyEchoStr);
// 添加日志
CallBackLog callBackLog = new CallBackLog();
callBackLog.setTimestamp(sVerifyTimeStamp);
callBackLog.setNonce(sVerifyNonce);
callBackLog.setEchostr(sVerifyEchoStr);
callBackLogService.addCallBackLog(callBackLog);
//返回明文
PrintWriter writer = response.getWriter();
writer.println(sEchoStr);
System.out.println(sEchoStr);
} catch (AesException | IOException e) {
e.printStackTrace();
}
}
/**
* 用于接收企业微信的回调post方式
*/
@PostMapping("/callback")
public void callBackForPost(@RequestParam Map<String,Object> param,
@RequestBody(required = false) Map<String,Object> map,
HttpServletRequest request,HttpServletResponse response){
try {
// 构造解密对象
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(QyWxConfig.sToken,QyWxConfig.sEncodingAESKey,QyWxConfig.corpid);
// 企业微信加密签名
String sVerifyMsgSig = (String) param.get("msg_signature");
// 时间戳
Integer sVerifyTimeStamp = ObjectFormatUtil.toInteger(param.get("timestamp"));
// 随机数
String sVerifyNonce = (String) param.get("nonce");
// 加密的字符串
String sVerifyEchoStr = (String) param.get("echostr");
if(sVerifyEchoStr != null) {
// 如果是验证url
String sEchoStr; //需要返回的明文
sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp.toString(),
sVerifyNonce, sVerifyEchoStr);
// 添加日志
CallBackLog callBackLog = new CallBackLog();
callBackLog.setTimestamp(sVerifyTimeStamp);
callBackLog.setNonce(sVerifyNonce);
callBackLog.setEchostr(sVerifyEchoStr);
callBackLogService.addCallBackLog(callBackLog);
//返回明文
PrintWriter writer = response.getWriter();
writer.println(sEchoStr);
writer.close();
}else{
// 如果是响应事件
String ToUserName = (String) map.get("ToUserName");
String Encrypt = (String) map.get("Encrypt");
String AgentID = (String) map.get("AgentID");
// 需要解密的xml
String sReqData = String.format("<xml><ToUserName><![CDATA[%s]]></ToUserName>" +
"<Encrypt><![CDATA[%s]]></Encrypt>" +
"<AgentID><![CDATA[%s]]></AgentID></xml>",ToUserName,Encrypt,AgentID);
// 解析后的数据
String sMsg = wxcpt.DecryptMsg(sVerifyMsgSig, sVerifyTimeStamp.toString(), sVerifyNonce, sReqData);
// 将数据转为java对象
TemplateCard templateCard = (TemplateCard) QyWxXMLUtils.convertXmlStrToObject(TemplateCard.class, sMsg);
// 点击用户
String fromUserName = templateCard.getFromUserName();
// 根据userId获取处理人
Map<String, Object> portInfo = PortConfig.findUserByQyWxUserId(fromUserName);
UserByPort userByPort = (UserByPort) portInfo.get("user");
// 获取点击的按钮
String clickKey = templateCard.getEventKey().split("_")[1];
String result = "";
if("pass".equals(clickKey)){
result = "通过";
}else{
result = "驳回";
}
// 开启线程处理审批
new Thread(new Runnable() {
@Override
public void run() {
depositoryRecordService.reviewByQyWx(templateCard);
}
}).start();
// 开启线程更改其他用户卡片模板样式
String finalResult = result;
new Thread(new Runnable() {
@Override
public void run() {
qyWxOperationService.updateTemplateCard(templateCard.getResponseCode(),userByPort.getName(), finalResult);
}
}).start();
// 待加密模板
String sRespData = String.format("<xml><ToUserName><![CDATA[%s]]></ToUserName>" +
"<FromUserName><![CDATA[%s]]></FromUserName>" +
"<CreateTime>%s</CreateTime>"+
"<MsgType><![CDATA[update_button]]></MsgType>"+
"<Button>" +
"<ReplaceName><![CDATA[%s]]></ReplaceName></Button>" +
"</xml>",ToUserName,QyWxConfig.corpid,templateCard.getCreateTime(),"已"+result);
// 加密
String sEncryptMsg = wxcpt.EncryptMsg(sRespData, sVerifyTimeStamp.toString(), sVerifyNonce);
//3.响应消息
PrintWriter out = response.getWriter();
out.print(sEncryptMsg);
out.close();
}
} catch (AesException | IOException e) {
e.printStackTrace();
}
}
/**
* 用于企业微信登录
* @param code
* @param action
* @param state
* @param request
* @return
*/
@GetMapping("/QyWxLogin")
public ModelAndView QyWxLogin(@RequestParam(required = false)String code,
@RequestParam(required = false)String action,
@RequestParam(required = false)String state,
HttpServletRequest request)
{
ModelAndView mv = new ModelAndView();
mv.addObject("userWxId","");
mv.setViewName("pages/user/login");
if(code != null) {
QyWxConfig.code = code;
JSONObject jsonObject = QyWxConfig.GetQYWXUserId();
Integer errCode = jsonObject.getInteger("errcode");
String userId = jsonObject.getString("userid");
if (errCode == 0) {
// 如果成功获取userid
Map<String, Object> portInfo = PortConfig.findUserByQyWxUserId(userId);
UserByPort userByPort =(UserByPort) portInfo.get("user");
String key = (String) portInfo.get("key");
String token = (String) portInfo.get("token");
if (userByPort != null) {
// 如果数据库中存在该用户
String keyAndToken = key + "&" +token;
// 将key与token暂存至池中保存
UserKeyAndTokenPool.addKeyAndToken(userByPort.getNumber(),keyAndToken);
// 设置放入时间
userByPort.setInstant(Instant.now());
AuthenticationTokenPool.addToken(token, userByPort);
HttpSession session = request.getSession();
session.setAttribute("token"+userByPort.getId(), token);
session.setAttribute("userToken",userByPort);
session.setMaxInactiveInterval(1800);
mv.addObject("user",userByPort);
mv.setViewName("index");
}else{
JSONObject captcha = PageController.Captcha(request);
String picPath = (String) captcha.get("picPath");
String captchaid = (String) captcha.get("captchaid");
mv.addObject("picPath", picPath);
mv.addObject("captchaid", captchaid);
mv.addObject("userWxId",userId);
}
}else{
JSONObject captcha = PageController.Captcha(request);
String picPath = (String) captcha.get("picPath");
String captchaid = (String) captcha.get("captchaid");
mv.addObject("picPath", picPath);
mv.addObject("captchaid", captchaid);
}
}else{
JSONObject captcha = PageController.Captcha(request);
String picPath = (String) captcha.get("picPath");
String captchaid = (String) captcha.get("captchaid");
mv.addObject("picPath", picPath);
mv.addObject("captchaid", captchaid);
}
return mv;
}
}

56
src/main/java/com/dreamchaser/depository_manage/controller/UserController.java

@ -17,6 +17,7 @@ import com.dreamchaser.depository_manage.security.bean.LoginType;
import com.dreamchaser.depository_manage.security.bean.UserToken; import com.dreamchaser.depository_manage.security.bean.UserToken;
import com.dreamchaser.depository_manage.security.bean.VerificationCode; import com.dreamchaser.depository_manage.security.bean.VerificationCode;
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.VerificationCodePool; import com.dreamchaser.depository_manage.security.pool.VerificationCodePool;
import com.dreamchaser.depository_manage.service.DepositoryService; import com.dreamchaser.depository_manage.service.DepositoryService;
import com.dreamchaser.depository_manage.service.RoleService; import com.dreamchaser.depository_manage.service.RoleService;
@ -33,6 +34,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.repository.query.ReactiveQueryByExampleExecutor; import org.springframework.data.repository.query.ReactiveQueryByExampleExecutor;
import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mobile.device.Device;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -145,12 +147,19 @@ public class UserController {
*/ */
@PostMapping("/login") @PostMapping("/login")
public RestResponse login(@RequestBody Map<String, String> map, HttpServletRequest request) { public RestResponse login(@RequestBody Map<String, String> map, HttpServletRequest request) {
String userWxId = map.get("userWxId");
// 用于标识当前登录是否为企业微信跳转登录
boolean flag = true;
if(!"".equals(userWxId)){
// 如果是企业微信跳转
flag = false;
}
String url = PortConfig.external_url_6666 +"/base/login"; String url = PortConfig.external_url_6666 +"/base/login";
String jsonString = JSONObject.toJSONString(map); String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url,paramObject, HTTP.UTF_8); post = HttpUtils.send(url,paramObject, HTTP.UTF_8,null);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -159,15 +168,28 @@ public class UserController {
String userkey = (String) data.get("key"); String userkey = (String) data.get("key");
if(userkey != null) { if(userkey != null) {
String usertoken = (String) data.get("token"); String usertoken = (String) data.get("token");
HttpUtils.setUserKey(userkey);
HttpUtils.setUserToken(usertoken); String keyAndToken = userkey + "&" +usertoken;
UserByPort userinfo = JSONObject.toJavaObject((JSONObject) data.get("userinfo"), UserByPort.class); UserByPort userinfo = JSONObject.toJavaObject((JSONObject) data.get("userinfo"), UserByPort.class);
// 将key与token暂存至池中保存
UserKeyAndTokenPool.addKeyAndToken(userinfo.getNumber(),keyAndToken);
AuthenticationTokenPool.addToken(usertoken,userinfo); AuthenticationTokenPool.addToken(usertoken,userinfo);
HttpSession session = request.getSession(); HttpSession session = request.getSession();
session.setAttribute("token",usertoken); session.setAttribute("token"+userinfo.getId(),usertoken);
session.setAttribute("userToken",userinfo);
session.setMaxInactiveInterval(1800); session.setMaxInactiveInterval(1800);
if(!flag){
// 如果是企业微信跳转
Map<String,String> param = new HashMap<>();
param.put("id",userinfo.getId().toString());
param.put("workwechatid",userWxId);
// 将openid写回
PortConfig.editUserWechatOpenid(map,userinfo);
}
// 设置放入时间 // 设置放入时间
// userinfo.setInstant(Instant.now()); userinfo.setInstant(Instant.now());
return new RestResponse(usertoken); return new RestResponse(usertoken);
}else{ }else{
return CrudUtil.NOT_EXIST_USER_OR_ERROR_PWD_RESPONSE; return CrudUtil.NOT_EXIST_USER_OR_ERROR_PWD_RESPONSE;
@ -193,10 +215,10 @@ public class UserController {
@GetMapping("/loginOut") @GetMapping("/loginOut")
public RestResponse loginOut(HttpServletRequest request){ public RestResponse loginOut(HttpServletRequest request){
HttpSession session = request.getSession(); HttpSession session = request.getSession();
String token = (String) session.getAttribute("token");
session.invalidate(); session.invalidate();
request.removeAttribute("userToken"); request.removeAttribute("userToken");
AuthenticationTokenPool.removeToken(token); // session.removeAttribute("token");
// AuthenticationTokenPool.removeToken(token);
return new RestResponse("",200,new StatusInfo("退出成功","退出成功")); return new RestResponse("",200,new StatusInfo("退出成功","退出成功"));
} }
@ -206,10 +228,10 @@ public class UserController {
* *
* @return RESPONSE200 * @return RESPONSE200
*/ */
@GetMapping("/logout") /* @GetMapping("/loginOut")
public RestResponse logout() { public RestResponse logout() {
return CrudUtil.RESPONSE200; return new RestResponse("",200,new StatusInfo("退出成功","退出成功"));
} }*/
@GetMapping("/sys/users") @GetMapping("/sys/users")
public RestResponse findUsers(@RequestParam Map<String, Object> map) { public RestResponse findUsers(@RequestParam Map<String, Object> map) {
@ -222,7 +244,8 @@ public class UserController {
* @return * @return
*/ */
@PostMapping("/sys/findUsers") @PostMapping("/sys/findUsers")
public RestResponse findUsersByPort(@RequestParam Map<String, Object> map) { public RestResponse findUsersByPort(@RequestParam Map<String, Object> map,HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
String url = PortConfig.external_url + "/staff/archiveslist"; String url = PortConfig.external_url + "/staff/archiveslist";
if(map.containsKey("company")){ if(map.containsKey("company")){
map.put("company",ObjectFormatUtil.toInteger(map.get("company"))); map.put("company",ObjectFormatUtil.toInteger(map.get("company")));
@ -238,7 +261,7 @@ public class UserController {
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url,paramObject, HTTP.UTF_8); post = HttpUtils.send(url,paramObject, HTTP.UTF_8,userToken);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
@ -464,20 +487,21 @@ public class UserController {
* @return * @return
*/ */
@GetMapping("/getCaptchaid") @GetMapping("/getCaptchaid")
public JSONObject getCaptchaid(){ public JSONObject getCaptchaid(HttpServletRequest httpServletRequest){
JSONObject captcha = PageController.Captcha(); JSONObject captcha = PageController.Captcha(httpServletRequest);
return captcha; return captcha;
} }
@GetMapping("/findUserRole") @GetMapping("/findUserRole")
public RestResponse findUserRole(@RequestParam("userId") Integer userId){ public RestResponse findUserRole(@RequestParam("userId") Integer userId,HttpServletRequest request){
Map<String,Object> param = new HashMap<>(); Map<String,Object> param = new HashMap<>();
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
param.put("classes",1); param.put("classes",1);
param.put("userId",userId); param.put("userId",userId);
List<UserByPortP> userByPortPList = new ArrayList<>(); List<UserByPortP> userByPortPList = new ArrayList<>();
List<RoleAndDepository> roleAndDepositoryByCondition = roleService.findRoleAndDepositoryByCondition(param); List<RoleAndDepository> roleAndDepositoryByCondition = roleService.findRoleAndDepositoryByCondition(param);
for (int i = 0; i < roleAndDepositoryByCondition.size(); i++) { for (int i = 0; i < roleAndDepositoryByCondition.size(); i++) {
UserByPort userByPort = PageController.FindUserById(roleAndDepositoryByCondition.get(i).getUserId()); UserByPort userByPort = PageController.FindUserById(roleAndDepositoryByCondition.get(i).getUserId(),userToken);
UserByPortP up = new UserByPortP(userByPort); UserByPortP up = new UserByPortP(userByPort);
up.setId(roleAndDepositoryByCondition.get(i).getId()); up.setId(roleAndDepositoryByCondition.get(i).getId());
up.setDepositoryName(roleAndDepositoryByCondition.get(i).getDepositoryName()); up.setDepositoryName(roleAndDepositoryByCondition.get(i).getDepositoryName());

2
src/main/java/com/dreamchaser/depository_manage/entity/ApplicationOutRecord.java

@ -53,7 +53,7 @@ public class ApplicationOutRecord {
/** /**
* 部门负责人 * 部门负责人
*/ */
private Integer departmenthead; private String departmenthead;
/** /**
* 部门负责人意见1通过2退回 * 部门负责人意见1通过2退回

17
src/main/java/com/dreamchaser/depository_manage/entity/CallBackLog.java

@ -0,0 +1,17 @@
package com.dreamchaser.depository_manage.entity;
import lombok.Data;
@Data
public class CallBackLog {
public Integer id;
public String msg_signature;
public Integer timestamp;
public String nonce;
public String echostr;
public String xmlstr;
public String jsonstr;
public String reqdata;
public Integer addtime;
}

18
src/main/java/com/dreamchaser/depository_manage/entity/UserByPort.java

@ -6,8 +6,8 @@ import java.time.Instant;
@Data @Data
public class UserByPort { public class UserByPort {
// 登录令牌,默认有效期为两小时
private static Integer term = 1800; // 登录有效时间 final long DEFAULT_TERM=60*60*3;
/** /**
@ -282,6 +282,11 @@ public class UserByPort {
*/ */
private String positionname; private String positionname;
/**
* 是否为本部门负责人12
*/
private Integer personincharge;
/** /**
* 身份认证 * 身份认证
*/ */
@ -292,13 +297,18 @@ public class UserByPort {
*/ */
private Instant instant; private Instant instant;
/**
* 有效期(单位)
*/
private long term = DEFAULT_TERM;
/** /**
* 根据时间判断是否有效 * 根据时间判断是否有效
* @return 有效则返回true否则返回false * @return 有效则返回true否则返回false
*/ */
/* public boolean isValid(){ public boolean isValid(){
return Instant.now().getEpochSecond()-instant.getEpochSecond()<=term; return Instant.now().getEpochSecond()-instant.getEpochSecond()<=term;
}*/ }

53
src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java

@ -1,8 +1,12 @@
package com.dreamchaser.depository_manage.intercepter; package com.dreamchaser.depository_manage.intercepter;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool; import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.utils.HttpUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.mobile.device.Device;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
@ -11,6 +15,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import java.io.IOException; import java.io.IOException;
import java.util.Enumeration;
/** /**
* 认证拦截器如果请求头中有相应凭证则放行否则拦截返回认证失效错误 * 认证拦截器如果请求头中有相应凭证则放行否则拦截返回认证失效错误
@ -23,13 +28,15 @@ public class UserInterceptor extends HandlerInterceptorAdapter {
@Override @Override
public boolean preHandle(HttpServletRequest request, public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws MyException { HttpServletResponse response, Object handler) throws MyException {
String header = request.getHeader("user-agent");
//拿到requset中的head
String token =null; String token =null;
HttpSession session = request.getSession(); HttpSession session = request.getSession();
token = (String) session.getAttribute("token"); UserByPort userByPort = (UserByPort) session.getAttribute("userToken");
if(userByPort!=null){
token = (String) session.getAttribute("token"+userByPort.getId());
}
//如果是访问logout则删除对应的令牌 //如果是访问logout则删除对应的令牌
if ("/logout".equals(request.getServletPath())){ if ("/loginOut".equals(request.getServletPath())){
AuthenticationTokenPool.removeToken(token); AuthenticationTokenPool.removeToken(token);
session.invalidate(); session.invalidate();
return true; return true;
@ -37,16 +44,52 @@ public class UserInterceptor extends HandlerInterceptorAdapter {
if("/getCaptchaid".equals(request.getServletPath())){ if("/getCaptchaid".equals(request.getServletPath())){
return true; return true;
} }
if (token!=null&&AuthenticationTokenPool.getToken(token)!=null){ if("/QyWxLogin".equals(request.getServletPath())){
return true;
}
if (!"".equals(token) &&token!=null&&AuthenticationTokenPool.getToken(token)!=null){
request.setAttribute("userToken",AuthenticationTokenPool.getToken(token)); request.setAttribute("userToken",AuthenticationTokenPool.getToken(token));
return true; return true;
}else { }else {
try { try {
if(isMobileDevice(request)){
if(header.contains("wxwork")) {
// 如果是企业微信跳转
QyWxConfig.token = QyWxConfig.GetQYWXToken();
response.sendRedirect(QyWxConfig.getQYWXCodeUrl());
}else{
response.sendRedirect("/login");
}
}else {
response.sendRedirect("/login"); response.sendRedirect("/login");
}
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
return false; return false;
} }
} }
public boolean isMobileDevice(HttpServletRequest request) {
String requestHeader = request.getHeader("user-agent").toLowerCase();
String[] deviceArray = new String[]{"android", "iphone", "ios", "windows phone"};
if (requestHeader == null) {
return false;
}
requestHeader = requestHeader.toLowerCase();
for (int i = 0; i < deviceArray.length; i++) {
if (requestHeader.indexOf(deviceArray[i]) > 0) {
return true;
}
}
return false;
}
} }

28
src/main/java/com/dreamchaser/depository_manage/mapper/CallBackLogMapper.java

@ -0,0 +1,28 @@
package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.CallBackLog;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.Map;
@Mapper
@Repository
public interface CallBackLogMapper {
/**
* 添加回调日志
* @param map
* @return
*/
Integer addCallBackLog(Map<String,Object> map);
/**
* 添加回调日志
* @param callBackLog
* @return
*/
Integer addCallBackLog(CallBackLog callBackLog);
}

35
src/main/java/com/dreamchaser/depository_manage/mapper/CallBackLogMapper.xml

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- depository -->
<mapper namespace="com.dreamchaser.depository_manage.mapper.CallBackLogMapper">
<resultMap id="callBackMap" type="com.dreamchaser.depository_manage.entity.CallBackLog">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="msg_signature" property="msg_signature" jdbcType="VARCHAR" />
<result column="timestamp" property="timestamp" jdbcType="INTEGER" />
<result column="nonce" property="nonce" jdbcType="VARCHAR" />
<result column="echostr" property="echostr" jdbcType="VARCHAR" />
<result column="xmlstr" property="xmlstr" jdbcType="VARCHAR" />
<result column="jsonstr" property="jsonstr" jdbcType="VARCHAR" />
<result column="reqdata" property="reqdata" jdbcType="VARCHAR"/>
<result column="addtime" property="addtime" jdbcType="INTEGER"/>
</resultMap>
<insert id="addCallBackLog">
INSERT INTO callback_log (
id, msg_signature, timestamp,nonce,echostr,xmlstr,jsonstr,reqdata,addtime
) VALUES (
#{id},
#{msg_signature},
#{timestamp},
#{nonce},
#{echostr},
#{xmlstr},
#{jsonstr},
#{reqdata},
#{addtime}
)
</insert>
</mapper>

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

@ -77,7 +77,7 @@
<result column="aorcode" property="code" jdbcType="VARCHAR" /> <result column="aorcode" property="code" jdbcType="VARCHAR" />
<result column="aorpirce" property="price" jdbcType="INTEGER" /> <result column="aorpirce" property="price" jdbcType="INTEGER" />
<result column="aorquantity" property="quantity" jdbcType="INTEGER" /> <result column="aorquantity" property="quantity" jdbcType="INTEGER" />
<result column="departmenthead" property="departmenthead" jdbcType="INTEGER" /> <result column="departmenthead" property="departmenthead" jdbcType="VARCHAR" />
<result column="departmentheadPass" property="departmentheadPass" jdbcType="INTEGER" /> <result column="departmentheadPass" property="departmentheadPass" jdbcType="INTEGER" />
<result column="departmentHeadTime" property="departmentheadTime" jdbcType="INTEGER" /> <result column="departmentHeadTime" property="departmentheadTime" jdbcType="INTEGER" />
<result column="departmentheadMessage" property="departmentheadMessage" jdbcType="VARCHAR" /> <result column="departmentheadMessage" property="departmentheadMessage" jdbcType="VARCHAR" />
@ -170,11 +170,11 @@
count(*) count(*)
FROM applicationOutRecordInfo WHERE 1=1 FROM applicationOutRecordInfo WHERE 1=1
<if test='isDone == "0"'> <if test='isDone == "0"'>
and (departmentHeadTime = 0 and departmenthead=#{userId} and DepartmentheadPass != 2) and (departmentHeadTime = 0 and FIND_IN_SET(#{userId},departmenthead) != 0 and DepartmentheadPass != 2)
or (depositoryManagerTime = 0 and FIND_IN_SET(#{userId},depositoryManager) != 0 and DepartmentheadPass != 2) or (depositoryManagerTime = 0 and FIND_IN_SET(#{userId},depositoryManager) != 0 and DepartmentheadPass != 2)
</if> </if>
<if test='isDone == "1"'> <if test='isDone == "1"'>
and (departmentHeadTime != 0 and departmenthead=#{userId}) and (departmentHeadTime != 0 and FIND_IN_SET(#{userId},departmenthead) != 0)
or (depositoryManagerTime != 0 and FIND_IN_SET(#{userId},depositoryManager) != 0) or (depositoryManagerTime != 0 and FIND_IN_SET(#{userId},depositoryManager) != 0)
</if> </if>
</select> </select>
@ -276,11 +276,11 @@
<include refid="simpleApplicationOut" /> <include refid="simpleApplicationOut" />
FROM applicationOutRecordInfo WHERE 1=1 FROM applicationOutRecordInfo WHERE 1=1
<if test='isDone == "0"'> <if test='isDone == "0"'>
and (departmentHeadTime = 0 and departmenthead=#{userId} and DepartmentheadPass = 3) and (departmentHeadTime = 0 and FIND_IN_SET(#{userId},departmenthead) != 0 and DepartmentheadPass = 3)
or (depositoryManagerTime = 0 and FIND_IN_SET(#{userId},depositoryManager) != 0 and depositoryManagerPass = 3) or (depositoryManagerTime = 0 and FIND_IN_SET(#{userId},depositoryManager) != 0 and depositoryManagerPass = 3)
</if> </if>
<if test='isDone == "1"'> <if test='isDone == "1"'>
and (departmentHeadTime != 0 and departmenthead=#{userId} and DepartmentheadPass != 3) and (departmentHeadTime != 0 and FIND_IN_SET(#{userId},departmenthead) != 0 and DepartmentheadPass != 3)
or (depositoryManagerTime != 0 and FIND_IN_SET(#{userId},depositoryManager) != 0 and depositoryManagerPass != 3) or (depositoryManagerTime != 0 and FIND_IN_SET(#{userId},depositoryManager) != 0 and depositoryManagerPass != 3)
</if> </if>
group by aorid group by aorid

102
src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordMinP.java

@ -0,0 +1,102 @@
package com.dreamchaser.depository_manage.pojo;
import com.dreamchaser.depository_manage.entity.ApplicationOutRecordMin;
import lombok.Data;
import java.math.BigInteger;
@Data
public class ApplicationOutRecordMinP {
/**
* id
*/
private Integer id;
/**
* 物料id
*/
private Integer mid;
/**
* 物料名称
*/
private String mname;
/**
* 物料编码
*/
private BigInteger mcode;
/**
* 仓库id
*/
private Integer depositoryId;
/**
* 仓库名称
*/
private String depositoryName;
/**
* 对应库位id
*/
private Integer placeId;
/**
* 库位编码
*/
private String placeCode;
/**
* 数量
*/
private Integer quantity;
/**
* 出库单号
*/
private String code;
/**
* 审核人编号
*/
private Integer checkId;
/**
* 审核人姓名
*/
private String checkerName;
/**
* 申请人姓名
*/
private String applicantName;
/**
* 主订单编号
*/
private Integer parentId;
/**
* 当前申请金额
*/
private Double price;
/**
* 子订单状态1未完成2完成
*/
private Integer state;
public ApplicationOutRecordMinP(ApplicationOutRecordMin recordMin) {
this.id = recordMin.getId();
this.mid = recordMin.getMid();
this.depositoryId = recordMin.getDepositoryId();
this.checkId = recordMin.getCheckId();
this.code = recordMin.getCode();
this.quantity = recordMin.getQuantity();
this.state = recordMin.getState();
this.parentId = recordMin.getParentId();
this.placeId = recordMin.getPlaceId();
}
}

2
src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordP.java

@ -68,7 +68,7 @@ public class ApplicationOutRecordP {
/** /**
* 部门负责人编号 * 部门负责人编号
*/ */
private Integer departmenthead; private String departmenthead;
/** /**
* 部门负责人姓名 * 部门负责人姓名

6
src/main/java/com/dreamchaser/depository_manage/pojo/UserByPortP.java

@ -74,7 +74,10 @@ public class UserByPortP {
*/ */
private String depositoryName; private String depositoryName;
/**
* 是否为本部门负责人12
*/
private Integer personincharge;
public UserByPortP(UserByPort userByPort) { public UserByPortP(UserByPort userByPort) {
@ -90,6 +93,7 @@ public class UserByPortP {
this.sunmaindeparmentname = userByPort.getSunmaindeparmentname(); this.sunmaindeparmentname = userByPort.getSunmaindeparmentname();
this.workpostname = userByPort.getWorkpostname(); this.workpostname = userByPort.getWorkpostname();
this.positionname = userByPort.getPositionname(); this.positionname = userByPort.getPositionname();
this.personincharge = userByPort.getPersonincharge();
} }
public UserByPortP(String number, String name, Integer state, Integer gender, Integer health, String mobilephone, String companyname, String maindeparmentname, String sunmaindeparmentname, String workpostname, String positionname) { public UserByPortP(String number, String name, Integer state, Integer gender, Integer health, String mobilephone, String companyname, String maindeparmentname, String sunmaindeparmentname, String workpostname, String positionname) {

29
src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/CallBackBaseXml.java

@ -0,0 +1,29 @@
package com.dreamchaser.depository_manage.pojo.callBackXml;
import lombok.Data;
import org.apache.commons.math3.util.Precision;
import javax.xml.bind.annotation.*;
/**
* 基础xml
*/
@Data
//@XmlRootElement(name = "xml")
@XmlAccessorType(XmlAccessType.FIELD)
public class CallBackBaseXml {
private String ToUserName; //企业微信CorpID
private String FromUserName; //成员UserID
private String CreateTime; //消息创建时间(整型)
private String MsgType; //消息类型,此时固定为:event
private String AgentID; //企业应用的id,整型。可在应用的设置页面查看
}

22
src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/CallBackXMl_DLWZ.java

@ -0,0 +1,22 @@
package com.dreamchaser.depository_manage.pojo.callBackXml;
import lombok.Data;
import javax.xml.bind.annotation.XmlRootElement;
@Data
@XmlRootElement(name = "xml")
public class CallBackXMl_DLWZ extends CallBackBaseXml {
/**
* 用于上报地理位置时的回调xml
*/
private String Event; // 事件类型,subscribe(关注)、unsubscribe(取消关注)
private String EventKey; // 事件KEY值,此事件该值为空
private String Latitude; //地理位置纬度
private String Longitude; //地理位置经度
private String Precision; // 地理位置精度
private String AppType; // app类型,在企业微信固定返回wxwork,在微信不返回该字段
}

15
src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/CallBackXml_button.java

@ -0,0 +1,15 @@
package com.dreamchaser.depository_manage.pojo.callBackXml;
import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class CallBackXml_button extends CallBackBaseXml {
private TemplateCard TemplateCard;
}

16
src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/ButtonInteraction.java

@ -0,0 +1,16 @@
package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard;
import com.dreamchaser.depository_manage.config.QyWx_template_card.BaseMessage;
import lombok.Data;
/**
* 文本消息
*
*/
@Data
public class ButtonInteraction extends BaseMessage {
// 模板卡片
private TemplateCard template_card;
// 否 表示是否是保密消息,0表示否,1表示是,默认0
private int safe;
}

73
src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard.java

@ -0,0 +1,73 @@
package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard;
import com.dreamchaser.depository_manage.pojo.callBackXml.CallBackBaseXml;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
/**
* 卡片模板
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@Data
@XmlRootElement(name="xml")//根节点
public class TemplateCard {
private String ToUserName; //企业微信CorpID
private String FromUserName; //成员UserID
private String CreateTime; //消息创建时间(整型)
private String MsgType; //消息类型,此时固定为:event
private String AgentID; //企业应用的id,整型。可在应用的设置页面查看
/**
* 模板卡片类型投票选择型卡片填写"vote_interaction"
*/
private String CardType;
/**
* 二级普通文本建议不超过160个字支持id转译
*/
private String SubTitleText;
/**
* 响应事件key
*/
private String EventKey;
/**
* 任务id同一个应用任务id不能重复只能由数字字母和_-@组成最长128字节
*/
private String TaskId;
/**
* 响应的事件类型
*/
private String Event;
/**
* 下拉式的选择器
*/
private TemplateCard_SelectedItems SelectedItems;
/**
* 按钮替换文案填写本字段后会展现灰色不可点击按钮
*/
private String ReplaceText;
/**
* ResponseCode
*/
private String ResponseCode;
}

16
src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_SelectedItems.java

@ -0,0 +1,16 @@
package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
@XmlAccessorType(XmlAccessType.FIELD)
@Data
//@XmlRootElement(name="SelectedItems")//根节点
public class TemplateCard_SelectedItems {
TemplateCard_button_selection SelectedItem;
}

18
src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_action.java

@ -0,0 +1,18 @@
package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard;
import lombok.Data;
/**
* 操作
*/
@Data
public class TemplateCard_action {
/**
* 操作的描述文案
*/
private String Text;
/**
* 操作key值用户点击后会产生回调事件将本参数作为EventKey返回回调事件会带上该key值最长支持1024字节不可重复
*/
private String Key;
}

27
src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_action_menu.java

@ -0,0 +1,27 @@
package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
/**
* 卡片右上角更多操作按钮
*/
@XmlAccessorType(XmlAccessType.FIELD)
@Data
@XmlRootElement(name = "ActionMenu")
public class TemplateCard_action_menu {
/**
* 更多操作界面的描述
*/
private String Desc;
/**
* 操作列表列表长度取值范围为 [1, 3]
*/
private List<TemplateCard_action> ActionList;
}

34
src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_button.java

@ -0,0 +1,34 @@
package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
/**
* 按钮
*/
@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class TemplateCard_button {
/**
* 按钮点击事件类型0 或不填代表回调点击事件1 代表跳转url
*/
private Integer Yype;
/**
* 按钮文案建议不超过10个字
*/
private String Text;
/**
* 按钮样式目前可填1~4不填或错填默认1
*/
private Integer Style;
/**
* 按钮key值用户点击后会产生回调事件将本参数作为EventKey返回回调事件会带上该key值最长支持1024字节不可重复button_list.type是0时必填
*/
private String Key;
/**
* 跳转事件的urlbutton_list.type是1时必填
*/
private String Url;
}

40
src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_button_selection.java

@ -0,0 +1,40 @@
package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
/**
* 下拉式的选择器
*/
@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class TemplateCard_button_selection {
/**
* 下拉式的选择器的key用户提交选项后会产生回调事件回调事件会带上该key值表示该题最长支持1024字节
*/
private String QuestionKey;
/**
* 下拉式的选择器左边的标题
*/
private String Title;
/**
* 选项列表下拉选项不超过 10 最少1个
*/
private TemplateCard_button_selection_option OptionIds;
/**
* 下拉式的选择器默认选定的选项
*/
private String SelectedId;
/**
* 是否可以选择状态
*/
private Boolean Disable;
}

23
src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_button_selection_option.java

@ -0,0 +1,23 @@
package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
/**
* 下拉选项
*/
@Data
@XmlAccessorType(XmlAccessType.FIELD)
public class TemplateCard_button_selection_option {
/**
* 下拉式的选择器选项的id用户提交后会产生回调事件回调事件会带上该id值表示该选项最长支持128字节不可重复
*/
private String OptionId;
/**
* 下拉式的选择器选项的文案建议不超过16个字
*/
private String Text;
}

34
src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_card_action.java

@ -0,0 +1,34 @@
package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
/**
* 整体卡片的点击跳转事件
*/
@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class TemplateCard_card_action {
/**
* 跳转事件类型0或不填代表不是链接1 代表跳转url2 代表打开小程序
*/
private Integer Type;
/**
* 跳转事件的urlcard_action.type是1时必填
*/
private String Url;
/**
* 跳转事件的小程序的appid必须是与当前应用关联的小程序card_action.type是2时必填
*/
private Integer AppId;
/**
* 跳转事件的小程序的pagepathcard_action.type是2时选填
*/
private String PagePath;
}

47
src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_horizontal_content.java

@ -0,0 +1,47 @@
package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
/**
* 二级标题+文本列表
*/
@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class TemplateCard_horizontal_content {
/**
* 链接类型0或不填代表不是链接1 代表跳转url2 代表下载附件3 代表点击跳转成员详情
*/
private Integer Type;
/**
* 二级标题建议不超过5个字
*/
private String KeyName;
/**
* 二级文本如果horizontal_content_list.type是2该字段代表文件名称要包含文件类型建议不超过30个字支持id转译
*/
private String Value;
/**
* 链接跳转的urlhorizontal_content_list.type是1时必填
*/
private String Url;
/**
* 附件的media_idhorizontal_content_list.type是2时必填
*/
private Integer MediaId;
/**
* 成员详情的useridhorizontal_content_list.type是3时必填
*/
private String UserId;
}

27
src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_main_title.java

@ -0,0 +1,27 @@
package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
/**
* 一级标题
*/
@XmlAccessorType(XmlAccessType.FIELD)
@Data
@XmlRootElement(name = "MainTitle")
public class TemplateCard_main_title {
/**
* 一级标题建议不超过36个字支持id转译
*/
private String Title;
/**
* 标题辅助信息建议不超过44个字支持id转译
*/
private String Desc;
}

31
src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/TemplateCard_source.java

@ -0,0 +1,31 @@
package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
/*
卡片来源样式信息
*/
@XmlAccessorType(XmlAccessType.FIELD)
@Data
@XmlRootElement(name = "Source")
public class TemplateCard_source {
/**
* 来源图片的url来源图片的尺寸建议为72*72
*/
private String IconUrl;
/**
* 来源图片的描述建议不超过20个字支持id转译
*/
private String Desc;
/**
* 来源文字的颜色目前支持0(默认) 灰色1 黑色2 红色3 绿色
*/
private Integer DescColor;
}

38
src/main/java/com/dreamchaser/depository_manage/pojo/callBackXml/callBackXml_button_templatecard/Template_quote_area.java

@ -0,0 +1,38 @@
package com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
/**
* 引用文献样式
*/
@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class Template_quote_area {
/**
* 引用文献样式区域点击事件0或不填代表没有点击事件1 代表跳转url2 代表跳转小程序
*/
private Integer Type;
/**
* 点击跳转的urlquote_area.type是1时必填
*/
private String Url;
/**
* 点击跳转的小程序的appid必须是与当前应用关联的小程序quote_area.type是2时必填
*/
private Integer Appid;
/**
* 点击跳转的小程序的pagepathquote_area.type是2时选填
*/
private String PagePath;
/**
* 引用文献样式的标题
*/
private String Title;
/**
* 引用文献样式的引用文案
*/
private String QuoteText;
}

2
src/main/java/com/dreamchaser/depository_manage/security/pool/AuthenticationTokenPool.java

@ -38,7 +38,7 @@ public class AuthenticationTokenPool {
} }
//判断令牌是否过期 //判断令牌是否过期
if (userToken != null){ if (userToken.isValid()){
return userToken; return userToken;
}else{ }else{
//清除过期令牌 //清除过期令牌

33
src/main/java/com/dreamchaser/depository_manage/security/pool/UserKeyAndTokenPool.java

@ -0,0 +1,33 @@
package com.dreamchaser.depository_manage.security.pool;
import com.dreamchaser.depository_manage.entity.UserByPort;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 用户登录后的key与token池
*/
public class UserKeyAndTokenPool {
private static Map<String, String> pool = new ConcurrentHashMap<>(200);
/**
* 用于暂存当前用户的key和token
* @param key 用户工号
* @param keyAndToken key+token => key & token
*/
public static void addKeyAndToken(String key, String keyAndToken){
pool.put(key, keyAndToken);
}
public static String getKeyAndToken(String key){
String keyAndToken = pool.get(key);
return keyAndToken;
}
public static void removeKeyAndToken(String key){
pool.remove(key);
}
}

21
src/main/java/com/dreamchaser/depository_manage/service/CallBackLogService.java

@ -0,0 +1,21 @@
package com.dreamchaser.depository_manage.service;
import com.dreamchaser.depository_manage.entity.CallBackLog;
import java.util.Map;
public interface CallBackLogService {
/**
* 添加回调日志
* @param map
* @return
*/
Integer addCallBackLog(Map<String,Object> map);
/**
* 添加回调日志
* @param callBackLog
* @return
*/
Integer addCallBackLog(CallBackLog callBackLog);
}

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

@ -2,7 +2,9 @@ package com.dreamchaser.depository_manage.service;
import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.pojo.*; import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard;
import javax.servlet.http.HttpServletRequest;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -38,7 +40,16 @@ public interface DepositoryRecordService {
* @param map 仓库调度信息 * @param map 仓库调度信息
* @return 受影响的行数 * @return 受影响的行数
*/ */
Integer review(Map<String,Object> map,Integer userId); Integer review(Map<String,Object> map,Integer userId,UserByPort userToken);
/**
* 用于企业微信的审核申请处理
* @param templateCard
* @return
*/
Integer reviewByQyWx(TemplateCard templateCard);
/** /**
* 根据id修改仓库调度记录 * 根据id修改仓库调度记录
@ -52,7 +63,7 @@ public interface DepositoryRecordService {
* @param id id * @param id id
* @return 该id的数据记录 * @return 该id的数据记录
*/ */
DepositoryRecordP findDepositoryRecordById(Integer id); DepositoryRecordP findDepositoryRecordById(Integer id, HttpServletRequest request);
/** /**
* 查找所有仓库调度记录 * 查找所有仓库调度记录
@ -65,7 +76,7 @@ public interface DepositoryRecordService {
* @param map 查询参数 * @param map 查询参数
* @return 符合条件的仓库调度记录集合 * @return 符合条件的仓库调度记录集合
*/ */
List<DepositoryRecordP> findDepositoryRecordPByCondition(Map<String,Object> map); List<DepositoryRecordP> findDepositoryRecordPByCondition(Map<String,Object> map,HttpServletRequest request);
/** /**
@ -73,14 +84,14 @@ public interface DepositoryRecordService {
* @param map * @param map
* @return * @return
*/ */
List<ApplicationInRecordP> findApplicationInRecordPByCondition(Map<String,Object> map); List<ApplicationInRecordP> findApplicationInRecordPByCondition(Map<String,Object> map,HttpServletRequest request);
/** /**
* 根据条件查询出库记录同时支持分页查询 * 根据条件查询出库记录同时支持分页查询
* @param map * @param map
* @return * @return
*/ */
List<ApplicationOutRecordP> findApplicationOutRecordPByCondition(Map<String,Object> map); List<ApplicationOutRecordP> findApplicationOutRecordPByCondition(Map<String,Object> map,HttpServletRequest request);
/** /**
@ -108,7 +119,7 @@ public interface DepositoryRecordService {
* @param map 查询参数 * @param map 查询参数
* @return 我的任务 * @return 我的任务
*/ */
List<SimpleApplicationOutRecordP> findMyTask(Map<String, Object> map); List<SimpleApplicationOutRecordP> findMyTask(Map<String, Object> map,HttpServletRequest request);
/** /**
* 根据id删除仓库记录 * 根据id删除仓库记录

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

@ -17,13 +17,13 @@ public interface DepositoryService {
* @param map 参数map * @param map 参数map
* @return 受影响的行数 * @return 受影响的行数
*/ */
Integer insertDepository(Map<String,Object> map); Integer insertDepository(Map<String,Object> map,UserByPort userByPort);
/** /**
* 查询所有仓库 * 查询所有仓库
* @return 仓库集合 * @return 仓库集合
*/ */
List<Depository> findDepositoryRecordPByCondition(Map<String,Object> map); List<Depository> findDepositoryRecordPByCondition(Map<String,Object> map,UserByPort userByPort);
/** /**
* 根据条件查询对应的总条数 * 根据条件查询对应的总条数
@ -154,4 +154,11 @@ public interface DepositoryService {
*/ */
Depository findDepositoryByCode(String code); Depository findDepositoryByCode(String code);
/**
* 获取当前用户与其部门所管理的仓库
* @param userByPort
* @return
*/
List<Depository> findDepositoryByAdminorgAndUser(UserByPort userByPort);
} }

35
src/main/java/com/dreamchaser/depository_manage/service/impl/CallBackLogServiceImpl.java

@ -0,0 +1,35 @@
package com.dreamchaser.depository_manage.service.impl;
import com.dreamchaser.depository_manage.entity.CallBackLog;
import com.dreamchaser.depository_manage.mapper.CallBackLogMapper;
import com.dreamchaser.depository_manage.service.CallBackLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
@Service
public class CallBackLogServiceImpl implements CallBackLogService {
/**
* 添加回调日志
* @param map
* @return
*/
@Autowired
CallBackLogMapper callBackLogMapper;
@Override
public Integer addCallBackLog(Map<String, Object> map) {
return callBackLogMapper.addCallBackLog(map);
}
/**
* 添加回调日志
* @param callBackLog
* @return
*/
public Integer addCallBackLog(CallBackLog callBackLog){
return callBackLogMapper.addCallBackLog(callBackLog);
}
}

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

@ -1,6 +1,7 @@
package com.dreamchaser.depository_manage.service.impl; package com.dreamchaser.depository_manage.service.impl;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.db.Page;
import cn.hutool.log.Log; import cn.hutool.log.Log;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
@ -11,10 +12,13 @@ import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.mapper.*; import com.dreamchaser.depository_manage.mapper.*;
import com.dreamchaser.depository_manage.pojo.*; import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard;
import com.dreamchaser.depository_manage.security.bean.UserToken;
import com.dreamchaser.depository_manage.service.DepositoryRecordService; import com.dreamchaser.depository_manage.service.DepositoryRecordService;
import com.dreamchaser.depository_manage.service.RoleService; import com.dreamchaser.depository_manage.service.RoleService;
import com.dreamchaser.depository_manage.utils.*; import com.dreamchaser.depository_manage.utils.*;
import org.apache.http.protocol.HTTP; import org.apache.http.protocol.HTTP;
import org.apache.poi.ss.formula.functions.T;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.beans.Mergeable; import org.springframework.beans.Mergeable;
@ -27,6 +31,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import cn.hutool.core.lang.Snowflake; import cn.hutool.core.lang.Snowflake;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
@ -60,6 +65,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
@Autowired @Autowired
private RedissonClient redissonClient; private RedissonClient redissonClient;
@Autowired
private QyWxOperationService qyWxOperationService;
/** /**
* 提交申请插入一条仓库调度记录 * 提交申请插入一条仓库调度记录
@ -185,7 +193,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
dname = depositoryRecordById.getDname(); dname = depositoryRecordById.getDname();
} }
Administration company = PageController.getCompany(userToken.getMaindeparment()); Administration company = PageController.getCompany(userToken.getMaindeparment(), userToken);
String code = createCode(dname, "outOrderNumber", "out", company.getName()); String code = createCode(dname, "outOrderNumber", "out", company.getName());
map.put("code", code); map.put("code", code);
map.put("pass", 3); map.put("pass", 3);
@ -238,8 +246,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
for (int j = 0; j < applicationOutRecordPAll.size(); j++) { for (int j = 0; j < applicationOutRecordPAll.size(); j++) {
ApplicationOutRecordP applicationOutRecordP = applicationOutRecordPAll.get(j); ApplicationOutRecordP applicationOutRecordP = applicationOutRecordPAll.get(j);
// 获取所有子物料 // 获取所有子物料
Map<String,Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("parentId",applicationOutRecordP.getId()); map.put("parentId", applicationOutRecordP.getId());
List<ApplicationOutRecordMin> minByCondition = depositoryRecordMapper.findApplicationOutMinByCondition(map); List<ApplicationOutRecordMin> minByCondition = depositoryRecordMapper.findApplicationOutMinByCondition(map);
for (int k = 0; k < minByCondition.size(); k++) { for (int k = 0; k < minByCondition.size(); k++) {
ApplicationOutRecordMin applicationOutRecordMin = minByCondition.get(k); ApplicationOutRecordMin applicationOutRecordMin = minByCondition.get(k);
@ -409,13 +417,14 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
/** /**
* 根据主订单获取子订单 * 根据主订单获取子订单
*
* @param parentId * @param parentId
* @return * @return
*/ */
@Override @Override
public List<ApplicationOutRecordMin> findApplicationOutMinByParentId(Integer parentId) { public List<ApplicationOutRecordMin> findApplicationOutMinByParentId(Integer parentId) {
Map<String,Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("parentId",parentId); map.put("parentId", parentId);
return depositoryRecordMapper.findApplicationOutMinByCondition(map); return depositoryRecordMapper.findApplicationOutMinByCondition(map);
} }
@ -427,7 +436,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
* @return * @return
*/ */
@Override @Override
public RestResponse completeApplicationOutMinRecord(Map<String,Object> param, UserByPort userByPort) { public RestResponse completeApplicationOutMinRecord(Map<String, Object> param, UserByPort userByPort) {
// 最终返回值 // 最终返回值
RestResponse restResponse = new RestResponse(); RestResponse restResponse = new RestResponse();
@ -479,42 +488,67 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 当前出库金额 // 当前出库金额
Double sum = material.getPrice() * record.getQuantity(); Double sum = material.getPrice() * record.getQuantity();
material.setAmounts(material.getAmounts() - sum); material.setAmounts(material.getAmounts() - sum);
material.setQuantity(material.getQuantity() - record.getQuantity()); material.setQuantity(material.getQuantity() - applicationOutMinById.getQuantity());
material.setNumberOfTemporary(material.getNumberOfTemporary() - record.getQuantity()); material.setNumberOfTemporary(material.getNumberOfTemporary() - applicationOutMinById.getQuantity());
// 修改物料信息 // 修改物料信息
materialMapper.updateMaterial(material); materialMapper.updateMaterial(material);
if (placeAndMaterialByMidAndPid != null) { //如果库位不为空 if (placeAndMaterialByMidAndPid != null) { //如果库位不为空
// 修改当前库位存放物料的数量 // 修改当前库位存放物料的数量
placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() - record.getQuantity()); placeAndMaterialByMidAndPid.setQuantity(placeAndMaterialByMidAndPid.getQuantity() - applicationOutMinById.getQuantity());
placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid); placeMapper.updateMaterialAndPlace(placeAndMaterialByMidAndPid);
} }
// 修改库位数量 // 修改库位数量
Place placeById = placeMapper.findPlaceById(placeId); Place placeById = placeMapper.findPlaceById(placeId);
placeById.setQuantity(placeById.getQuantity() - record.getQuantity()); placeById.setQuantity(placeById.getQuantity() - applicationOutMinById.getQuantity());
placeMapper.UpdatePlace(placeById); placeMapper.UpdatePlace(placeById);
String redisMinRecordKey = "minRecord:"+id; // 设置redis中子订单键值 String redisMinRecordKey = "minRecord:" + id; // 设置redis中子订单键值
// 修改redis中本子订单状态 // 修改redis中本子订单状态
// redisTemplate.opsForHash().put(redisMinRecordKey,"state","2"); // redisTemplate.opsForHash().put(redisMinRecordKey,"state","2");
// 修改redis中本子订单完成人 // 修改redis中本子订单完成人
// redisTemplate.opsForHash().put(redisMinRecordKey,"manager",userByPort.getId().toString()); // redisTemplate.opsForHash().put(redisMinRecordKey,"manager",userByPort.getId().toString());
// 获取当前订单中所有管理员
String manager = (String) redisTemplate.opsForHash().get(redisMinRecordKey, "manager");
// 获取其他管理员
String[] managerSplit = manager.replace(userByPort.getId() + ",", "").split(",");
if (managerSplit.length == 0) {
managerSplit = new String[0];
}
for (int i = 0; i < managerSplit.length; i++) {
// 删除其他管理员的订单记录
String otherManager = "user:" + managerSplit[i];
String minRecord = (String) redisTemplate.opsForHash().get(otherManager, "minRecord");
// 删除其他管理员中当前已完成的订单
if (minRecord == null) {
continue;
}
minRecord = minRecord.replace(redisMinRecordKey + ",", "");
if (minRecord.length() == 2) {
// []
// 如果当前用户已经没有剩余订单,则删除
redisTemplate.delete(otherManager);
} else {
redisTemplate.opsForHash().put(otherManager, "minRecord", minRecord);
}
}
// 删除已完成的订单 // 删除已完成的订单
redisTemplate.delete(redisMinRecordKey); redisTemplate.delete(redisMinRecordKey);
// 获取该用户在redis中的订单记录 // 获取该用户在redis中的订单记录
String key = "user:"+userByPort.getId().toString(); String key = "user:" + userByPort.getId().toString();
// 获取当前用户所有订单 // 获取当前用户所有订单
String minRecord = (String) redisTemplate.opsForHash().get(key, "minRecord"); String minRecord = (String) redisTemplate.opsForHash().get(key, "minRecord");
// 删除用户中当前已完成的订单 // 删除用户中当前已完成的订单
minRecord = minRecord.replace(redisMinRecordKey+",",""); minRecord = minRecord.replace(redisMinRecordKey + ",", "");
redisTemplate.opsForHash().put(key,"minRecord",minRecord); if (minRecord.length() == 2) {
if(minRecord.length() == 2){
// [] // []
// 如果当前用户已经没有剩余订单,则删除 // 如果当前用户已经没有剩余订单,则删除
redisTemplate.delete("user:"+userByPort.getId()); redisTemplate.delete("user:" + userByPort.getId());
} else {
redisTemplate.opsForHash().put(key, "minRecord", minRecord);
} }
// 获取出库仓库信息 // 获取出库仓库信息
@ -523,9 +557,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取主订单单号 // 获取主订单单号
StringBuilder code = new StringBuilder(record.getCode()); StringBuilder code = new StringBuilder(record.getCode());
// 获取申请用户信息 // 获取申请用户信息
UserByPort applicantUser = PageController.FindUserById(record.getApplicantId()); UserByPort applicantUser = PageController.FindUserById(record.getApplicantId(), userByPort);
// 获取申请用户行政组织 // 获取申请用户行政组织
Administration company = PageController.getCompany(applicantUser.getMaindeparment()); Administration company = PageController.getCompany(applicantUser.getMaindeparment(), userByPort);
// 获取部门名称简写 // 获取部门名称简写
String conpanyName = WordUtil.getPinYinHeadChar(company.getName()); String conpanyName = WordUtil.getPinYinHeadChar(company.getName());
// 获取仓库名称简写 // 获取仓库名称简写
@ -533,7 +567,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取部门名称在单号的起始位置 // 获取部门名称在单号的起始位置
int index = code.indexOf(conpanyName); int index = code.indexOf(conpanyName);
// 生产新子订单编号 // 生产新子订单编号
String newCode = code.replace(index,index+conpanyName.length(),depositoryName).toString(); String newCode = code.replace(index, index + conpanyName.length(), depositoryName).toString();
// 设置完成人 // 设置完成人
applicationOutMinById.setCheckId(userByPort.getId()); applicationOutMinById.setCheckId(userByPort.getId());
// 设置新编码 // 设置新编码
@ -544,7 +578,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
result += depositoryRecordMapper.updateApplicationOutRecordMin(applicationOutMinById); result += depositoryRecordMapper.updateApplicationOutRecordMin(applicationOutMinById);
String redisMainRecordKey = "record:"+record.getId(); // 设置redis中主订单键值 String redisMainRecordKey = "record:" + record.getId(); // 设置redis中主订单键值
// 获取redis中主订单的所有子订单 // 获取redis中主订单的所有子订单
String minRecordList = (String) redisTemplate.opsForHash().get(redisMainRecordKey, "minRecord"); String minRecordList = (String) redisTemplate.opsForHash().get(redisMainRecordKey, "minRecord");
// 获取所有子订单键值 // 获取所有子订单键值
@ -553,39 +587,51 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
for (int i = 0; i < split.length; i++) { for (int i = 0; i < split.length; i++) {
// 获取所有子订单状态 // 获取所有子订单状态
String state = (String) redisTemplate.opsForHash().get(split[i], "state"); String state = (String) redisTemplate.opsForHash().get(split[i], "state");
if("1".equals(state)){ if ("1".equals(state)) {
// 如果有子订单未完成 // 如果有子订单未完成
pass = 3; // 设置主订单状态为处理中 pass = 3; // 设置主订单状态为处理中
break; break;
} }
} }
if(pass == 1){ // 如果最终状态为完成 if (pass == 1) { // 如果最终状态为完成
Map<String,Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("pass",pass); map.put("pass", pass);
map.put("id",record.getId()); map.put("id", record.getId());
// 修改状态为完成 // 修改状态为完成
depositoryRecordMapper.updateApplicationOutRecord(map); depositoryRecordMapper.updateApplicationOutRecord(map);
// 将最终完成的订单抄送给仓储负责人
String depositoryManagerIds = record.getDepositoryManager();
String[] depositoryManagers = depositoryManagerIds.split(",");
StringBuilder depositoryManagerByQyWx = new StringBuilder();
// for (int i = 0; i < depositoryManagers.length; i++) {
// Integer uid = ObjectFormatUtil.toInteger(depositoryManagers[i]);
// UserByPort depositoryManager = PageController.FindUserById(uid, userByPort);
// depositoryManagerByQyWx.append(depositoryManager.getWorkwechat()+",");
// }
depositoryManagerByQyWx.append("PangFuZhen,");
JSONObject jsonObject = qyWxOperationService.sendCcMessageToUsers(depositoryManagerByQyWx.toString(), record.getId());
// 删除redis中本订单 // 删除redis中本订单
redisTemplate.delete("record:"+record.getId()); redisTemplate.delete("record:" + record.getId());
} }
// 如果是库存转移订单 // 如果是库存转移订单
Map<String,Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
if (record.getIstransfer() == 1) { if (record.getIstransfer() == 1) {
map.put("quantity", record.getQuantity().toString()); map.put("quantity", record.getQuantity().toString());
map.put("applicantId", record.getApplicantId()); map.put("applicantId", record.getApplicantId());
map.put("transferId", record.getTransferId()); map.put("transferId", record.getTransferId());
map.put("recordId",record.getId()); // 出库订单编号 map.put("recordId", record.getId()); // 出库订单编号
transferMaterial(map); transferMaterial(map);
} }
restResponse.setStatus(200); restResponse.setStatus(200);
restResponse.setData(""); restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库成功","出库成功")); restResponse.setStatusInfo(new StatusInfo("出库成功", "出库成功"));
} } else {
else{
restResponse.setStatus(508); restResponse.setStatus(508);
restResponse.setData(""); restResponse.setData("");
restResponse.setStatusInfo(new StatusInfo("出库失败","出库失败,库存不足")); restResponse.setStatusInfo(new StatusInfo("出库失败", "出库失败,库存不足"));
} }
return restResponse; return restResponse;
} }
@ -628,7 +674,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("transferId", transferId); map.put("transferId", transferId);
// 获取当前转移物料仓库 // 获取当前转移物料仓库
Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(material.getDepositoryId()); Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(material.getDepositoryId());
Administration company = PageController.getCompany(userByPort.getMaindeparment()); Administration company = PageController.getCompany(userByPort.getMaindeparment(), userByPort);
// 生成出库订单 // 生成出库订单
map.put("code", createCode(depositoryRecordById.getDname(), "outOrderNumber", "out", company.getName())); map.put("code", createCode(depositoryRecordById.getDname(), "outOrderNumber", "out", company.getName()));
String placeId = map.get("fromPlaceId").toString(); String placeId = map.get("fromPlaceId").toString();
@ -640,7 +686,18 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
Object id = map.get("id"); Object id = map.get("id");
// 清除主键 // 清除主键
map.remove("id"); map.remove("id");
map.put("parentId",id); map.put("parentId", id);
String departMentHeadQyWxName = (String) map.get("departMentHeadQyWxName");
JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(departMentHeadQyWxName, ObjectFormatUtil.toInteger(id), true);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplate.opsForHash().putAll("user:"+userByPort.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
redisTemplate.expire("user:"+userByPort.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
return depositoryRecordMapper.insertApplicationOutRecordMin(map); return depositoryRecordMapper.insertApplicationOutRecordMin(map);
} }
@ -652,30 +709,68 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
*/ */
@Override @Override
@Transactional @Transactional
public Integer review(Map<String, Object> map, Integer userid) { public Integer review(Map<String, Object> map, Integer userid, UserByPort userToken) {
ApplicationOutRecordP record = depositoryRecordMapper.findApplicationOutRecordPById(ObjectFormatUtil.toInteger(map.get("id"))); ApplicationOutRecordP record = depositoryRecordMapper.findApplicationOutRecordPById(ObjectFormatUtil.toInteger(map.get("id")));
Object id = map.get("id"); // 主订单编号 Object id = map.get("id"); // 主订单编号
map.remove("id"); map.remove("id");
if (map.containsKey("departmentheadPass")) { if (map.containsKey("departmentheadPass")) {
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));
map.put("departmenthead", userid); map.put("departmenthead", userid);
Integer departmentheadPass = (Integer) map.get("departmentheadPass"); Integer departmentheadPass = (Integer) map.get("departmentheadPass");
if (departmentheadPass == 1) { if (departmentheadPass == 1) {
result = "通过";
map.put("state", "待仓储中心负责人审核"); map.put("state", "待仓储中心负责人审核");
// 获取仓储中心详情 // 获取仓储中心详情
Administration company = PageController.getCompany(361); Administration company = PageController.getCompany(361, userToken);
// 获取仓储中心负责人 // 获取仓储中心负责人
List<UserByPort> departmentHeadByUser = PortConfig.findDepartmentHeadByUser(company); List<UserByPort> departmentHeadByUser = PortConfig.findDepartmentHeadByUser(company, userToken);
StringBuilder depositoryManager = new StringBuilder(); StringBuilder depositoryManager = new StringBuilder();
StringBuilder QyWxUid = new StringBuilder();
for (int i = 0; i < departmentHeadByUser.size(); i++) { for (int i = 0; i < departmentHeadByUser.size(); i++) {
depositoryManager.append(departmentHeadByUser.get(i).getId() + ","); depositoryManager.append(departmentHeadByUser.get(i).getId() + ",");
// QyWxUid.append(departmentHeadByUser.get(i).getWorkwechat() + ",");
} }
QyWxUid.append("PangFuZhen,");
map.put("depositoryManager", depositoryManager.toString()); map.put("depositoryManager", depositoryManager.toString());
// 向仓储中心负责人发送新的消息
new Thread(new Runnable() {
@Override
public void run() {
JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(QyWxUid.toString(), ObjectFormatUtil.toInteger(id), false);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
// 部门负责人number
redisTemplate.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
redisTemplate.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
}
}).start();
} else { } else {
result = "驳回";
map.put("state", "部门负责人审核未通过"); map.put("state", "部门负责人审核未通过");
} }
// 开启线程更改其他用户卡片模板样式
String finalResult = result;
new Thread(new Runnable() {
@Override
public void run() {
// 获取responseCode(key为申请人number)
//获取申请人信息
UserByPort applicantUser = PageController.FindUserById(record.getApplicantId(), userToken);
String key = "user:"+applicantUser.getNumber()+":QyWxOutId:"+id;
String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode");
qyWxOperationService.updateTemplateCard(responseCode,userToken.getName(), finalResult);
}
}).start();
} else { } else {
String result = "";
// 开启线程更改其他用户卡片模板样式
String simpleTime = DateUtil.getSimpleTime(new Date()); String simpleTime = DateUtil.getSimpleTime(new Date());
map.put("depositoryManagerTime", DateUtil.DateTimeToTimeStamp(simpleTime)); map.put("depositoryManagerTime", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("depositoryManager", userid); map.put("depositoryManager", userid);
@ -685,7 +780,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
Integer depositoryManagerPass = (Integer) map.get("depositoryManagerPass"); Integer depositoryManagerPass = (Integer) map.get("depositoryManagerPass");
if (depositoryManagerPass == 1) { if (depositoryManagerPass == 1) {
// 如果审核通过 // 如果审核通过
result = "通过";
// 获取主单下的所有子单 // 获取主单下的所有子单
StringBuilder minRecordByMain = new StringBuilder("[]"); StringBuilder minRecordByMain = new StringBuilder("[]");
List<ApplicationOutRecordMin> applicationOutRecordMinByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(record.getId()); List<ApplicationOutRecordMin> applicationOutRecordMinByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(record.getId());
@ -708,13 +803,18 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 获取该物料所处仓库的仓库管理员 // 获取该物料所处仓库的仓库管理员
List<Integer> userIdByDid = new ArrayList<>(); List<Integer> userIdByDid = new ArrayList<>();
userIdByDid = roleService.findUserIdByDid(materialById.getDepositoryId()); userIdByDid = roleService.findUserIdByDid(materialById.getDepositoryId());
// 用于保存仓库管理员的企业微信openid
StringBuilder QyWxUid = new StringBuilder();
for (int j = 0; j < userIdByDid.size(); j++) { for (int j = 0; j < userIdByDid.size(); j++) {
// 获取当前用户信息
UserByPort userByPort = PageController.FindUserById(userIdByDid.get(j), userToken);
// 仓库管理员订单信息 // 仓库管理员订单信息
Map<String, Object> userRecord = new HashMap<>(); Map<String, Object> userRecord = new HashMap<>();
// 用户当前子订单 // 用户当前子订单
String userMinRecord = (String) redisTemplate.opsForHash().get("user:" + userIdByDid.get(j), "minRecord"); String userMinRecord = (String) redisTemplate.opsForHash().get("user:" + userIdByDid.get(j), "minRecord");
if (userMinRecord == null) { // 如果当前用户没有子订单 if (userMinRecord == null) { // 如果当前用户没有子订单
userRecord.put("minRecord", "[" + minRecordKey+"," + "]"); // 插入一条子订单 userRecord.put("minRecord", "[" + minRecordKey + "," + "]"); // 插入一条子订单
} else { // 如果当前用户已经有子订单 } else { // 如果当前用户已经有子订单
StringBuilder minRecordList = new StringBuilder(userMinRecord); // 转为stringbuilder类型 StringBuilder minRecordList = new StringBuilder(userMinRecord); // 转为stringbuilder类型
minRecordList.insert(1, minRecordKey + ",");// 将当前子订单插入头部 minRecordList.insert(1, minRecordKey + ",");// 将当前子订单插入头部
@ -723,24 +823,195 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 更新redis中用户记录 // 更新redis中用户记录
redisTemplate.opsForHash().putAll("user:" + userIdByDid.get(j), userRecord); redisTemplate.opsForHash().putAll("user:" + userIdByDid.get(j), userRecord);
minRecordManage.append(userIdByDid.get(j)).append(","); minRecordManage.append(userIdByDid.get(j)).append(",");
// QyWxUid.append(userByPort.getWorkwechat() + ",");
} }
QyWxUid.append("PangFuZhen,");
minRecord.put("manager", minRecordManage.toString()); minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中 // 添加子订单到redis中
redisTemplate.opsForHash().putAll(minRecordKey, minRecord); redisTemplate.opsForHash().putAll(minRecordKey, minRecord);
// 开启线程向仓库管理员发送消息
new Thread(new Runnable() {
@Override
public void run() {
JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId());
}
}).start();
} }
// 将主订单插入到redis中 // 将主订单插入到redis中
redisTemplate.opsForHash().put("record:" + record.getId(), "minRecord", minRecordByMain.toString()); redisTemplate.opsForHash().put("record:" + record.getId(), "minRecord", minRecordByMain.toString());
map.put("state", "仓储中心负责人审核通过"); map.put("state", "仓储中心负责人审核通过");
} else { } else {
result = "驳回";
map.put("pass", 2); map.put("pass", 2);
map.put("state", "仓储中心负责人审核未通过"); map.put("state", "仓储中心负责人审核未通过");
} }
// 开启线程更改其他用户卡片模板样式
String finalResult = result;
new Thread(new Runnable() {
@Override
public void run() {
// 获取responseCode(key为申请人number)
//获取部门负责人信息
UserByPort departHead = PageController.FindUserById(ObjectFormatUtil.toInteger(record.getDepartmenthead()), userToken);
String key = "user:"+departHead.getNumber()+":QyWxOutId:"+id;
String responseCode = (String) redisTemplate.opsForHash().get(key, "responseCode");
qyWxOperationService.updateTemplateCard(responseCode,userToken.getName(), finalResult);
}
}).start();
} }
map.put("id", id); map.put("id", id);
return depositoryRecordMapper.updateApplicationOutRecord(map); return depositoryRecordMapper.updateApplicationOutRecord(map);
} }
/**
* 用于企业微信的审核申请处理
*
* @param templateCard
* @return
*/
@Override
public Integer reviewByQyWx(TemplateCard templateCard ) {
// 用于更新订单
Map<String, Object> map = new HashMap<>();
// 点击用户
String fromUserName = templateCard.getFromUserName();
// 根据userId获取处理人
Map<String, Object> portInfo = PortConfig.findUserByQyWxUserId(fromUserName);
UserByPort userByPort = (UserByPort) portInfo.get("user");
// 获取点击的按钮
String eventKey = templateCard.getEventKey();
// 将其进行分割
String[] clickKeys = eventKey.split("_");
// 获取审核订单
Integer outId = ObjectFormatUtil.toInteger(clickKeys[2].split("outId")[1]);
// 获取对应的出库订单
ApplicationOutRecordP recordP = depositoryRecordMapper.findApplicationOutRecordPById(outId);
// 获取当前用户的身份
String optionId = templateCard.getSelectedItems().getSelectedItem().getOptionIds().getOptionId();
String[] optionsKey = optionId.split("_");
// 当前用户身份
String status = optionsKey[2];
if ("departManagerHead".equals(status)) {
// 如果是部门负责人
String simpleTime = DateUtil.getSimpleTime(new Date());
map.put("departmentheadTime", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("departmenthead", userByPort.getId());
// 获取点击的按钮类型
String clickKey = templateCard.getEventKey().split("_")[1];
if ("pass".equals(clickKey)) {
// 如果点击的是通过
map.put("departmentheadPass", 1);
map.put("state", "待仓储中心负责人审核");
// 获取仓储中心详情
Administration company = PageController.getCompany(361, null);
// 获取仓储中心负责人
List<UserByPort> departmentHeadByUser = PortConfig.findDepartmentHeadByUser(company, null);
StringBuilder depositoryManager = new StringBuilder();
StringBuilder QyWxUid = new StringBuilder();
// for (int i = 0; i < departmentHeadByUser.size(); i++) {
// depositoryManager.append(departmentHeadByUser.get(i).getId() + ",");
// QyWxUid.append(departmentHeadByUser.get(i).getWorkwechat()+",");
// }
QyWxUid.append("PangFuZhen"+",");
map.put("depositoryManager", depositoryManager.toString());
// 向仓储中心负责人发送新的消息
JSONObject jsonObject = qyWxOperationService.sendQyWxMessage(QyWxUid.toString(), ObjectFormatUtil.toInteger(outId), false);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
redisTemplate.opsForHash().putAll("user:"+userByPort.getNumber()+":QyWxOutId:"+outId,QyWxMessageMap);
// 设置过期时间为三天
redisTemplate.expire("user:"+userByPort.getNumber()+":QyWxOutId:"+outId,72,TimeUnit.HOURS);
} else {
// 如果点击的是驳回
map.put("departmentheadPass", 2);
map.put("state", "部门负责人审核未通过");
}
}
else{
// 如果是仓储中心负责人
// 获取点击的按钮类型
String clickKey = templateCard.getEventKey().split("_")[1];
// 如果点击的是通过
String simpleTime = DateUtil.getSimpleTime(new Date());
map.put("depositoryManagerTime", DateUtil.DateTimeToTimeStamp(simpleTime));
map.put("depositoryManager", userByPort.getId());
map.put("depositoryId", recordP.getDepositoryId());
if("pass".equals(clickKey)){
// 如果点击的是通过
map.put("depositoryManagerPass",1);
StringBuilder minRecordByMain = new StringBuilder("[]");
List<ApplicationOutRecordMin> applicationOutRecordMinByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(recordP.getId());
for (int i = 0; i < applicationOutRecordMinByParent.size(); i++) {
// 获取子单信息
ApplicationOutRecordMin applicationOutRecordMin = applicationOutRecordMinByParent.get(i);
//设置子订单在redis中的主键
String minRecordKey = "minRecord:" + applicationOutRecordMin.getId();
minRecordByMain.insert(1, minRecordKey + ","); // 将子订单主键插入到主订单的子订单列表
// 设置当前子订单对应仓库管理员记录
StringBuilder minRecordManage = new StringBuilder();
// 将要存储到redis中的子订单信息
Map<String, Object> minRecord = new HashMap<>();
minRecord.put("parentId", recordP.getId().toString()); // 当前子订单主订单
minRecord.put("state", "1"); // 当前子订单状态 1待处理2处理
// 获取对应的物料编号
Integer mid = applicationOutRecordMin.getMid();
// 获取物料信息
Material materialById = materialMapper.findMaterialById(mid);
// 获取该物料所处仓库的仓库管理员
List<Integer> userIdByDid = new ArrayList<>();
userIdByDid = roleService.findUserIdByDid(materialById.getDepositoryId());
StringBuilder QyWxUid = new StringBuilder();
for (int j = 0; j < userIdByDid.size(); j++) {
// 获取仓库管理员信息
UserByPort manager = PageController.FindUserById(userIdByDid.get(j), userByPort);
// 仓库管理员订单信息
Map<String, Object> userRecord = new HashMap<>();
// 用户当前子订单
String userMinRecord = (String) redisTemplate.opsForHash().get("user:" + userIdByDid.get(j), "minRecord");
if (userMinRecord == null) { // 如果当前用户没有子订单
userRecord.put("minRecord", "[" + minRecordKey + "," + "]"); // 插入一条子订单
} else { // 如果当前用户已经有子订单
StringBuilder minRecordList = new StringBuilder(userMinRecord); // 转为stringbuilder类型
minRecordList.insert(1, minRecordKey + ",");// 将当前子订单插入头部
userRecord.put("minRecord", minRecordList.toString());
}
// 更新redis中用户记录
redisTemplate.opsForHash().putAll("user:" + userIdByDid.get(j), userRecord);
minRecordManage.append(userIdByDid.get(j)).append(",");
// QyWxUid.append(manager.getWorkwechat()+",");
}
QyWxUid.append("PangFuZhen,");
minRecord.put("manager", minRecordManage.toString());
// 添加子订单到redis中
redisTemplate.opsForHash().putAll(minRecordKey, minRecord);
// 开启线程向仓库管理员发送消息
new Thread(new Runnable() {
@Override
public void run() {
JSONObject jsonObject = qyWxOperationService.sendNotificationToDepositoryManager(QyWxUid.toString(), applicationOutRecordMin.getId());
}
}).start();
}
// 将主订单插入到redis中
redisTemplate.opsForHash().put("record:" + recordP.getId(), "minRecord", minRecordByMain.toString());
map.put("state", "仓储中心负责人审核通过");
}else{
// 如果是不通过
map.put("depositoryManagerPass",2);
map.put("pass", 2);
map.put("state", "仓储中心负责人审核未通过");
}
}
map.put("id", outId);
return depositoryRecordMapper.updateApplicationOutRecord(map);
}
/** /**
* 转移物品 * 转移物品
* *
@ -761,7 +1032,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("price", material.getPrice().toString()); map.put("price", material.getPrice().toString());
map.put("depositoryId", transferRecor.getToId()); map.put("depositoryId", transferRecor.getToId());
map.put("placeId", transferRecor.getToPlaceId()); map.put("placeId", transferRecor.getToPlaceId());
map.put("mid",mid); map.put("mid", mid);
applicationInPlace(map); applicationInPlace(map);
} else { } else {
// 如果不在该仓库,插入一条新记录 // 如果不在该仓库,插入一条新记录
@ -835,9 +1106,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
* @return 该id的数据记录 * @return 该id的数据记录
*/ */
@Override @Override
public DepositoryRecordP findDepositoryRecordById(Integer id) { public DepositoryRecordP findDepositoryRecordById(Integer id, HttpServletRequest request) {
DepositoryRecord depositoryRecordById = depositoryRecordMapper.findDepositoryRecordById(id); DepositoryRecord depositoryRecordById = depositoryRecordMapper.findDepositoryRecordById(id);
return singlePack(depositoryRecordById); return singlePack(depositoryRecordById, request);
} }
public Integer checkPass() { public Integer checkPass() {
@ -861,7 +1132,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
* @return 符合条件的仓库调度记录集合 * @return 符合条件的仓库调度记录集合
*/ */
@Override @Override
public List<DepositoryRecordP> findDepositoryRecordPByCondition(Map<String, Object> map) { public List<DepositoryRecordP> findDepositoryRecordPByCondition(Map<String, Object> map, HttpServletRequest request) {
Integer size = 8, page = 1; Integer size = 8, page = 1;
if (map.containsKey("size")) { if (map.containsKey("size")) {
size = ObjectFormatUtil.toInteger(map.get("size")); size = ObjectFormatUtil.toInteger(map.get("size"));
@ -872,7 +1143,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("begin", (page - 1) * size); map.put("begin", (page - 1) * size);
} }
List<DepositoryRecord> depositoryRecordByCondition = depositoryRecordMapper.findDepositoryRecordByCondition(map); List<DepositoryRecord> depositoryRecordByCondition = depositoryRecordMapper.findDepositoryRecordByCondition(map);
return pack(depositoryRecordByCondition); return pack(depositoryRecordByCondition, request);
} }
/** /**
@ -882,7 +1153,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
* @return * @return
*/ */
@Override @Override
public List<ApplicationInRecordP> findApplicationInRecordPByCondition(Map<String, Object> map) { public List<ApplicationInRecordP> findApplicationInRecordPByCondition(Map<String, Object> map, HttpServletRequest request) {
Integer size = 10, page = 1; Integer size = 10, page = 1;
if (map.containsKey("size")) { if (map.containsKey("size")) {
size = ObjectFormatUtil.toInteger(map.get("size")); size = ObjectFormatUtil.toInteger(map.get("size"));
@ -898,7 +1169,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
} }
List<ApplicationInRecordP> list = depositoryRecordMapper.findApplicationInRecordPByCondition(map); List<ApplicationInRecordP> list = depositoryRecordMapper.findApplicationInRecordPByCondition(map);
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
UserByPort userByPortById = findUserByPortById(list.get(i).getApplicantId()); UserByPort userByPortById = findUserByPortById(list.get(i).getApplicantId(), request);
String time = DateUtil.TimeStampToDateTime(Long.valueOf(list.get(i).getApplicantTime())); String time = DateUtil.TimeStampToDateTime(Long.valueOf(list.get(i).getApplicantTime()));
list.get(i).setApplicantName(userByPortById.getName()); list.get(i).setApplicantName(userByPortById.getName());
list.get(i).setApplicantTime(time); list.get(i).setApplicantTime(time);
@ -914,7 +1185,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
* @return * @return
*/ */
@Override @Override
public List<ApplicationOutRecordP> findApplicationOutRecordPByCondition(Map<String, Object> map) { public List<ApplicationOutRecordP> findApplicationOutRecordPByCondition(Map<String, Object> map, HttpServletRequest request) {
Integer size = 10, page = 1; Integer size = 10, page = 1;
if (map.containsKey("size")) { if (map.containsKey("size")) {
size = ObjectFormatUtil.toInteger(map.get("size")); size = ObjectFormatUtil.toInteger(map.get("size"));
@ -930,7 +1201,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
} }
List<ApplicationOutRecordP> list = depositoryRecordMapper.findApplicationOutRecordPByCondition(map); List<ApplicationOutRecordP> list = depositoryRecordMapper.findApplicationOutRecordPByCondition(map);
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
UserByPort userByPortById = findUserByPortById(list.get(i).getApplicantId()); UserByPort userByPortById = findUserByPortById(list.get(i).getApplicantId(), request);
String time = DateUtil.TimeStampToDateTime(Long.valueOf(list.get(i).getApplicantTime())); String time = DateUtil.TimeStampToDateTime(Long.valueOf(list.get(i).getApplicantTime()));
list.get(i).setApplicantName(userByPortById.getName()); list.get(i).setApplicantName(userByPortById.getName());
list.get(i).setApplicantTime(time); list.get(i).setApplicantTime(time);
@ -979,7 +1250,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
* @return 我的任务 * @return 我的任务
*/ */
@Override @Override
public List<SimpleApplicationOutRecordP> findMyTask(Map<String, Object> map) { public List<SimpleApplicationOutRecordP> findMyTask(Map<String, Object> map, HttpServletRequest request) {
Integer size = 10, page = 1; Integer size = 10, page = 1;
if (map.containsKey("size")) { if (map.containsKey("size")) {
size = ObjectFormatUtil.toInteger(map.get("size")); size = ObjectFormatUtil.toInteger(map.get("size"));
@ -990,7 +1261,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
map.put("begin", (page - 1) * size); map.put("begin", (page - 1) * size);
} }
// return simplePack(depositoryRecordMapper.findMyTask(map)); // return simplePack(depositoryRecordMapper.findMyTask(map));
return simplePackOut(depositoryRecordMapper.findMyTaskOut(map)); return simplePackOut(depositoryRecordMapper.findMyTaskOut(map), request);
} }
/** /**
@ -1143,8 +1414,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
for (int i = 0; i < applicationOutRecordPAll.size(); i++) { for (int i = 0; i < applicationOutRecordPAll.size(); i++) {
ApplicationOutRecordP applicationOutRecordP = applicationOutRecordPAll.get(i); ApplicationOutRecordP applicationOutRecordP = applicationOutRecordPAll.get(i);
// 获取所有子物料 // 获取所有子物料
Map<String,Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("parentId",applicationOutRecordP.getId()); map.put("parentId", applicationOutRecordP.getId());
List<ApplicationOutRecordMin> minByCondition = depositoryRecordMapper.findApplicationOutMinByCondition(map); List<ApplicationOutRecordMin> minByCondition = depositoryRecordMapper.findApplicationOutMinByCondition(map);
for (int k = 0; k < minByCondition.size(); k++) { for (int k = 0; k < minByCondition.size(); k++) {
ApplicationOutRecordMin applicationOutRecordMin = minByCondition.get(k); ApplicationOutRecordMin applicationOutRecordMin = minByCondition.get(k);
@ -1159,8 +1430,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
if (state.equals(applicationOutRecordPAll.get(i).getState())) { if (state.equals(applicationOutRecordPAll.get(i).getState())) {
ApplicationOutRecordP applicationOutRecordP = applicationOutRecordPAll.get(i); ApplicationOutRecordP applicationOutRecordP = applicationOutRecordPAll.get(i);
// 获取所有子物料 // 获取所有子物料
Map<String,Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("parentId",applicationOutRecordP.getId()); map.put("parentId", applicationOutRecordP.getId());
List<ApplicationOutRecordMin> minByCondition = depositoryRecordMapper.findApplicationOutMinByCondition(map); List<ApplicationOutRecordMin> minByCondition = depositoryRecordMapper.findApplicationOutMinByCondition(map);
for (int k = 0; k < minByCondition.size(); k++) { for (int k = 0; k < minByCondition.size(); k++) {
ApplicationOutRecordMin applicationOutRecordMin = minByCondition.get(k); ApplicationOutRecordMin applicationOutRecordMin = minByCondition.get(k);
@ -1356,11 +1627,11 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
* @param list SimpleDepositoryRecord集合 * @param list SimpleDepositoryRecord集合
* @return 包装好的集合 * @return 包装好的集合
*/ */
private List<SimpleApplicationOutRecordP> simplePackOut(List<SimpleApplicationOutRecord> list) { private List<SimpleApplicationOutRecordP> simplePackOut(List<SimpleApplicationOutRecord> list, HttpServletRequest request) {
List<SimpleApplicationOutRecordP> result = new ArrayList<>(list.size()); List<SimpleApplicationOutRecordP> result = new ArrayList<>(list.size());
for (SimpleApplicationOutRecord record : list) { for (SimpleApplicationOutRecord record : list) {
SimpleApplicationOutRecordP d = new SimpleApplicationOutRecordP(record); SimpleApplicationOutRecordP d = new SimpleApplicationOutRecordP(record);
UserByPort userByPort = findUserByPortById(record.getApplicantId()); UserByPort userByPort = findUserByPortById(record.getApplicantId(), request);
d.setApplyRemark(d.getApplyRemark() == null ? "" : d.getApplyRemark()); d.setApplyRemark(d.getApplyRemark() == null ? "" : d.getApplyRemark());
d.setApplicantName(userByPort.getName()); d.setApplicantName(userByPort.getName());
result.add(d); result.add(d);
@ -1374,25 +1645,25 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
* @param list DepositoryRecord集合 * @param list DepositoryRecord集合
* @return 包装好的集合 * @return 包装好的集合
*/ */
private List<DepositoryRecordP> pack(List<DepositoryRecord> list) { private List<DepositoryRecordP> pack(List<DepositoryRecord> list, HttpServletRequest request) {
List<DepositoryRecordP> result = new ArrayList<>(list.size()); List<DepositoryRecordP> result = new ArrayList<>(list.size());
for (DepositoryRecord record : list) { for (DepositoryRecord record : list) {
result.add(singlePack(record)); result.add(singlePack(record, request));
} }
return result; return result;
} }
private DepositoryRecordP singlePack(DepositoryRecord record) { private DepositoryRecordP singlePack(DepositoryRecord record, HttpServletRequest request) {
DepositoryRecordP d = new DepositoryRecordP(record); DepositoryRecordP d = new DepositoryRecordP(record);
UserByPort getApplicantUser = findUserByPortById(record.getApplicantId()); UserByPort getApplicantUser = findUserByPortById(record.getApplicantId(), request);
d.setApplicantName(getApplicantUser.getName()); d.setApplicantName(getApplicantUser.getName());
d.setDepositoryName(depositoryMapper.findDepositoryNameById(record.getDepositoryId())); d.setDepositoryName(depositoryMapper.findDepositoryNameById(record.getDepositoryId()));
if (record.getReviewerId() != null) { if (record.getReviewerId() != null) {
UserByPort reviewerUser = findUserByPortById(record.getReviewerId()); UserByPort reviewerUser = findUserByPortById(record.getReviewerId(), request);
d.setReviewerName(reviewerUser.getName()); d.setReviewerName(reviewerUser.getName());
} }
if (record.getCheckerId() != null) { if (record.getCheckerId() != null) {
UserByPort checkerUser = findUserByPortById(record.getCheckerId()); UserByPort checkerUser = findUserByPortById(record.getCheckerId(), request);
d.setCheckerName(checkerUser.getName()); d.setCheckerName(checkerUser.getName());
} }
return d; return d;
@ -1404,7 +1675,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
* @param id * @param id
* @return * @return
*/ */
private UserByPort findUserByPortById(Integer id) { private UserByPort findUserByPortById(Integer id, HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
String url = PortConfig.external_url + "/staff/archivescont"; String url = PortConfig.external_url + "/staff/archivescont";
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("id", id); map.put("id", id);
@ -1412,7 +1684,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url, paramObject, StandardCharsets.UTF_8.toString()); post = HttpUtils.send(url, paramObject, StandardCharsets.UTF_8.toString(), userToken);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }

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

@ -35,7 +35,7 @@ public class DepositoryServiceImpl implements DepositoryService {
* @return 影响条数 * @return 影响条数
*/ */
@Override @Override
public Integer insertDepository(Map<String, Object> map) { public Integer insertDepository(Map<String, Object> map,UserByPort userByPort) {
// 获取当前仓库拼音首字母 // 获取当前仓库拼音首字母
String dname = (String) map.get("dname"); String dname = (String) map.get("dname");
String dnamePinYin = WordUtil.getPinYinHeadChar(dname); String dnamePinYin = WordUtil.getPinYinHeadChar(dname);
@ -49,12 +49,12 @@ public class DepositoryServiceImpl implements DepositoryService {
List<Depository> condition = depositoryMapper.findDepositoryRecordPByCondition(temp); List<Depository> condition = depositoryMapper.findDepositoryRecordPByCondition(temp);
// 公司编号 // 公司编号
Integer cid = ObjectFormatUtil.toInteger(map.get("cid")); Integer cid = ObjectFormatUtil.toInteger(map.get("cid"));
String companyName = PageController.getCompany(cid).getName(); String companyName = PageController.getCompany(cid,userByPort).getName();
String adminorgName = ""; String adminorgName = "";
// 部门编号 // 部门编号
if(!"".equals(map.get("adminorg"))){ if(!"".equals(map.get("adminorg"))){
Integer adminorg = ObjectFormatUtil.toInteger(map.get("adminorg")); Integer adminorg = ObjectFormatUtil.toInteger(map.get("adminorg"));
adminorgName = PageController.getCompany(adminorg).getName(); adminorgName = PageController.getCompany(adminorg,userByPort).getName();
} }
// 公司简称 // 公司简称
companyName = WordUtil.getPinYinHeadChar(companyName); companyName = WordUtil.getPinYinHeadChar(companyName);
@ -86,7 +86,7 @@ public class DepositoryServiceImpl implements DepositoryService {
// 部门编号 // 部门编号
if(!"".equals(map.get("adminorg"))){ if(!"".equals(map.get("adminorg"))){
Integer adminorg = ObjectFormatUtil.toInteger(map.get("adminorg")); Integer adminorg = ObjectFormatUtil.toInteger(map.get("adminorg"));
adminorgName = PageController.getCompany(adminorg).getName(); adminorgName = PageController.getCompany(adminorg,userByPort).getName();
adminorgName = WordUtil.getPinYinHeadChar(adminorgName).substring(0,2); adminorgName = WordUtil.getPinYinHeadChar(adminorgName).substring(0,2);
} }
// 获取父仓库编码 // 获取父仓库编码
@ -113,7 +113,7 @@ public class DepositoryServiceImpl implements DepositoryService {
* @return 影响条数 * @return 影响条数
*/ */
@Override @Override
public List<Depository> findDepositoryRecordPByCondition(Map<String,Object> map) { public List<Depository> findDepositoryRecordPByCondition(Map<String,Object> map,UserByPort userByPort) {
Integer size = 10, page = 1; Integer size = 10, page = 1;
if (map.containsKey("size")) { if (map.containsKey("size")) {
size = ObjectFormatUtil.toInteger(map.get("size")); size = ObjectFormatUtil.toInteger(map.get("size"));
@ -127,7 +127,7 @@ public class DepositoryServiceImpl implements DepositoryService {
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
Depository depository = list.get(i); Depository depository = list.get(i);
if(!depository.getAdminorg().isEmpty()){ if(!depository.getAdminorg().isEmpty()){
Administration company = PageController.getCompany(ObjectFormatUtil.toInteger(depository.getAdminorg())); Administration company = PageController.getCompany(ObjectFormatUtil.toInteger(depository.getAdminorg()),userByPort);
depository.setAdminorgName(company.getName()); depository.setAdminorgName(company.getName());
} }
} }
@ -246,7 +246,7 @@ public class DepositoryServiceImpl implements DepositoryService {
@Override @Override
public Map<String, Integer> findDepositoryAllNameAndId(UserByPort user) { public Map<String, Integer> findDepositoryAllNameAndId(UserByPort user) {
// 获取当前用户所在部门管理的仓库 // 获取当前用户所在部门管理的仓库
List<Depository> depositoryByAdminorg = depositoryMapper.findDepositoryByAdminorg(user.getMaindeparmentname()); List<Depository> depositoryByAdminorg = depositoryMapper.findDepositoryByAdminorg(user.getMaindeparment().toString());
// 仓库id列表 // 仓库id列表
List<Integer> depositoryListId = new ArrayList<>(); List<Integer> depositoryListId = new ArrayList<>();
@ -276,6 +276,8 @@ public class DepositoryServiceImpl implements DepositoryService {
return map; return map;
} }
/** /**
* 根据仓库名称获取当前仓库库存容量 * 根据仓库名称获取当前仓库库存容量
* @param dname * @param dname
@ -380,6 +382,38 @@ public class DepositoryServiceImpl implements DepositoryService {
return depositoryMapper.findDepositoryByCode(code); return depositoryMapper.findDepositoryByCode(code);
} }
/**
* 获取当前用户与其部门所管理的仓库
* @param userByPort
* @return
*/
@Override
public List<Depository> findDepositoryByAdminorgAndUser(UserByPort userByPort) {
// 获取当前用户所在部门管理的仓库
List<Depository> depositoryByAdminorg = depositoryMapper.findDepositoryByAdminorg(userByPort.getMaindeparment().toString());
// 仓库id列表
List<Depository> depositoryList = new ArrayList<>();
// 添加到id列表
for (Depository depository : depositoryByAdminorg) {
depositoryList.add(depository);
}
// 获取当前用户管理的仓库
List<RoleAndDepository> depositoryAndRole = roleMapper.findDepositoryAndRole(userByPort.getId());
for (int i = 0; i < depositoryAndRole.size(); i++) {
RoleAndDepository roleAndDepository = depositoryAndRole.get(i);
// 如果重复则跳过
if(depositoryList.get(i).getId().compareTo(roleAndDepository.getDepositoryId()) == 0){
continue;
}
Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(roleAndDepository.getDepositoryId());
depositoryList.add(depositoryRecordById);
}
return depositoryList;
}
//判断是否有子类 //判断是否有子类
public boolean isChildForDepository(Integer parentId){ public boolean isChildForDepository(Integer parentId){
boolean flag = false; boolean flag = false;

31
src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java

@ -347,23 +347,6 @@ public class MaterialServiceImpl implements MaterialService {
return result; return result;
} }
private UserByPort findUserByPortById(Integer id) {
String url = PortConfig.external_url + "/staff/archivescont";
Map<String, Object> map = new HashMap<>();
map.put("id", id);
String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
JSONObject jsonObject = JSONObject.parseObject(post);
JSONObject data = (JSONObject) jsonObject.get("data");
UserByPort userByPort = JSONObject.toJavaObject( data, UserByPort.class);
return userByPort;
}
/** /**
@ -383,7 +366,21 @@ public class MaterialServiceImpl implements MaterialService {
size= ObjectFormatUtil.toInteger(map.get("size")); size= ObjectFormatUtil.toInteger(map.get("size"));
map.put("size", size); map.put("size", size);
} }
Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId"));
Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(depositoryId);
List<Material> materialByDepository = materialMapper.findMaterialByDepository(map); List<Material> materialByDepository = materialMapper.findMaterialByDepository(map);
for (int i = 0; i < materialByDepository.size(); i++) {
materialByDepository.get(i).setDepositoryCode(depositoryRecordById.getCode());
// 获取当前物料所处库位
Integer mid = materialByDepository.get(i).getId();
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(mid, depositoryId);
StringBuilder placeCode = new StringBuilder();
for (int j = 0; j < placeByMidAndDid.size(); j++) {
placeCode.append(placeByMidAndDid.get(j).getCode()).append(" ");
}
materialByDepository.get(i).setPlaceCode(placeCode.toString());
}
return pack(materialByDepository); return pack(materialByDepository);
} }

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

@ -0,0 +1,497 @@
package com.dreamchaser.depository_manage.service.impl;
import cn.hutool.core.lang.Snowflake;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.config.QyWx_template_card.*;
import com.dreamchaser.depository_manage.controller.PageController;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.DepositoryMapper;
import com.dreamchaser.depository_manage.mapper.DepositoryRecordMapper;
import com.dreamchaser.depository_manage.mapper.MaterialMapper;
import com.dreamchaser.depository_manage.pojo.ApplicationOutRecordP;
import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard;
import com.dreamchaser.depository_manage.utils.DateUtil;
import com.dreamchaser.depository_manage.utils.HttpUtils;
import org.apache.poi.ss.formula.functions.T;
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;
@Service
public class QyWxOperationService {
@Autowired
DepositoryRecordMapper depositoryRecordMapper;
@Autowired
MaterialMapper materialMapper;
@Autowired
DepositoryMapper depositoryMapper;
@Autowired
RedisTemplate<String,String> redisTemplate;
/**
* 用于向企业微信发送消息
* @param uid 接收人
* @param outId 申请出库编号
* @param flag 用于判断发送类型是部门负责人还是仓储负责人(true为部门false为仓储)
* @return
*/
public JSONObject sendQyWxMessage(String uid, Integer outId, Boolean flag) {
// 获取将要发送申请的订单记录
ApplicationOutRecordP applicationOutRecordPById = depositoryRecordMapper.findApplicationOutRecordPById(outId);
// 申请人id
Integer applicantId = applicationOutRecordPById.getApplicantId();
// 申请人
UserByPort applicant = PageController.FindUserById(applicantId, null);
// 获取所有子订单
List<ApplicationOutRecordMin> applicationOutRecordMinByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(outId);
StringBuilder mname = new StringBuilder();
StringBuilder depositoryName = new StringBuilder();
StringBuilder sumQuantity = new StringBuilder();
for (int i = 0; i < applicationOutRecordMinByParent.size(); i++) {
// 获取子订单信息
ApplicationOutRecordMin applicationOutRecordMin = applicationOutRecordMinByParent.get(i);
// 获取当前申请物料
Material materialById = materialMapper.findMaterialById(applicationOutRecordMin.getMid());
// 获取当前物料所在仓库
Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(materialById.getDepositoryId());
sumQuantity.append(applicationOutRecordMin.getQuantity()).append(",");
mname.append(materialById.getMname()).append(",");
depositoryName.append(depositoryRecordById.getDname()).append(",");
}
// 1.获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url
String accessToken = "".equals(QyWxConfig.token)?QyWxConfig.GetQYWXToken():QyWxConfig.token;
// 2.获取发送对象,并转成json
ButtonInteraction buttonInteraction = new ButtonInteraction();
// 1.1非必需
//设置消息接收者
String[] split = uid.split(",");
StringBuilder toUserName = new StringBuilder();
for (int i = 0; i < split.length - 1; i++) {
toUserName.append(split[i]).append("|");
}
toUserName.append(split[split.length - 1]);
buttonInteraction.setTouser(toUserName.toString()); // 不区分大小写
// 1.2必需
// 消息类型
buttonInteraction.setMsgtype("template_card");
// 企业应用的id,整型
buttonInteraction.setAgentid(QyWxConfig.AgentId);
// 卡片模板
TemplateCard_button_interaction templateCard_button_interaction = new TemplateCard_button_interaction();
// 模板卡片类型,按钮交互型卡片填写"button_interaction"
templateCard_button_interaction.setCard_type("button_interaction");
// 卡片右上角更多操作按钮
TemplateCard_action_menu action_menu = new TemplateCard_action_menu();
action_menu.setDesc("卡片副交互辅助文本说明");
// 卡片右上角操作按钮
TemplateCard_action action1 = new TemplateCard_action();
action1.setKey("AcceptThePush");
action1.setText("接受推送");
TemplateCard_action action2 = new TemplateCard_action();
action2.setKey("NoPush");
action2.setText("不再推送");
List<TemplateCard_action> actionList = new ArrayList<>();
actionList.add(action1);
actionList.add(action2);
action_menu.setAction_list(actionList);
// 设置操作按钮
templateCard_button_interaction.setAction_menu(action_menu);
// 一级标题
TemplateCard_main_title main_title = new TemplateCard_main_title();
// main_title.setTitle(applicant+"的出库申请");
main_title.setTitle(applicant.getName()+"的出库申请");
main_title.setDesc("申请时间:"+ DateUtil.TimeStampToDateTime(Long.valueOf(applicationOutRecordPById.getApplicantTime())));
// 设置一级标题
templateCard_button_interaction.setMain_title(main_title);
// 二级标题+文本列表,用于设置物料名称
TemplateCard_horizontal_content horizontal_content_mname = new TemplateCard_horizontal_content();
// 链接类型 0代表不是链接
horizontal_content_mname.setType(0);
// 二级标题
horizontal_content_mname.setKeyname("申请物料:");
horizontal_content_mname.setValue(mname.toString());
// 二级标题+文本列表,用于设置物料数量
TemplateCard_horizontal_content horizontal_content_quantity = new TemplateCard_horizontal_content();
// 链接类型 0代表不是链接
horizontal_content_quantity.setType(0);
// 二级标题
horizontal_content_quantity.setKeyname("数量");
horizontal_content_quantity.setValue(sumQuantity.toString());
// 二级标题+文本列表,用于设置物料对应仓库
TemplateCard_horizontal_content horizontal_content_depositoryName = new TemplateCard_horizontal_content();
// 链接类型 0代表不是链接
horizontal_content_depositoryName.setType(0);
// 二级标题
horizontal_content_depositoryName.setKeyname("仓库名称");
horizontal_content_depositoryName.setValue(depositoryName.toString());
// 二级标题+文本列表,用于设置申请查看明细
TemplateCard_horizontal_content horizontal_content_detail = new TemplateCard_horizontal_content();
// 链接类型 0代表不是链接
horizontal_content_detail.setType(1);
// 二级标题
horizontal_content_detail.setKeyname("申请明细");
horizontal_content_detail.setValue("查看明细");
horizontal_content_detail.setUrl("https://jy.hxgk.group/ApplicationOutView?id="+outId);
List<TemplateCard_horizontal_content> horizontal_contentList = new ArrayList<>();
horizontal_contentList.add(horizontal_content_mname);
horizontal_contentList.add(horizontal_content_quantity);
horizontal_contentList.add(horizontal_content_depositoryName);
horizontal_contentList.add(horizontal_content_detail);
// 设置二级标题
templateCard_button_interaction.setHorizontal_content_list(horizontal_contentList);
// 任务id,同一个应用任务id不能重复,只能由数字、字母和“_-@”组成,最长128字节
// 通过雪花算法获取taskId
Snowflake snowflake = new Snowflake(10,10,true);
templateCard_button_interaction.setTask_id(snowflake.nextIdStr());
// 下拉式的选择器
TemplateCard_button_selection button_selection = new TemplateCard_button_selection();
// 下拉式的选择器的key
button_selection.setQuestion_key("btn_status");
button_selection.setTitle("您的身份");
List<TemplateCard_button_selection_option> optionList = new ArrayList<>();
// 选项
TemplateCard_button_selection_option button_selection_option = new TemplateCard_button_selection_option();
button_selection_option.setText("部门负责人");
if(flag) {
// 如果是发送给部门负责人
button_selection_option.setId("btn_status_departManagerHead");
}else{
// 如果是发送给仓储负责人
button_selection_option.setId("btn_status_depositoryManager");
}
optionList.add(button_selection_option);
button_selection.setOption_list(optionList);
templateCard_button_interaction.setButton_selection(button_selection);
// 按钮列表,列表长度不超过6
List<TemplateCard_button> buttonList = new ArrayList<>();
TemplateCard_button button1 = new TemplateCard_button();
button1.setKey("wms_pass_outId"+outId);
button1.setStyle(1);
button1.setText("通过");
TemplateCard_button button2 = new TemplateCard_button();
button2.setKey("wms_reject_outId"+outId);
button2.setStyle(2);
button2.setText("驳回");
buttonList.add(button1);
buttonList.add(button2);
templateCard_button_interaction.setButton_list(buttonList);
buttonInteraction.setTemplate_card(templateCard_button_interaction);
String s = JSONObject.toJSONString(buttonInteraction);
// 3.获取请求的url
String url = QyWxConfig.sendMessage_url.replace("ACCESS_TOKEN", accessToken);
// 4.调用接口,发送消息
String s1 = HttpUtils.doPost(url, s);
// 将返回结果转为json对象
JSONObject jsonObject = JSON.parseObject(s1);
// 返回
return jsonObject;
}
/**
* 将最终完成的订单抄送给仓储负责人
* @param uid 仓储负责人编号
* @param outId 订单编号
* @return
*/
public JSONObject sendCcMessageToUsers(String uid,Integer outId){
// 获取已经完成的订单
ApplicationOutRecordP recordP = depositoryRecordMapper.findApplicationOutRecordPById(outId);
// 申请人id
Integer applicantId = recordP.getApplicantId();
// 申请人
UserByPort applicant = PageController.FindUserById(applicantId, null);
// 获取所有子订单
List<ApplicationOutRecordMin> applicationOutRecordMinByParent = depositoryRecordMapper.findApplicationOutRecordMinByParent(outId);
MessageByMarkDown markDown = new MessageByMarkDown();
//设置消息接收者
String[] split = uid.split(",");
StringBuilder toUserName = new StringBuilder();
for (int i = 0; i < split.length - 1; i++) {
toUserName.append(split[i]).append("|");
}
toUserName.append(split[split.length - 1]);
markDown.setTouser(toUserName.toString()); // 不区分大小写
// 设置agentId
markDown.setAgentid(QyWxConfig.AgentId);
markDown.setMsgtype("markdown");
// 设置content
Map<String,String> markdown = new HashMap<>();
StringBuilder content = new StringBuilder("## `抄送信息:`%n");
content.append(">### **"+applicant.getName()+"的出库申请** %n<font color='warning'>申请时间:2022-10-23 14:30:18</font> %n");
content.append("%n---%n");
for (ApplicationOutRecordMin recordMin : applicationOutRecordMinByParent) {
// 获取子订单信息
// 获取申请物料信息
Material materialById = materialMapper.findMaterialById(recordMin.getMid());
// 获取仓库信息
Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(recordMin.getDepositoryId());
// 获取处理人信息
UserByPort userByPort = PageController.FindUserById(recordMin.getCheckId(), null);
content.append(">- 物料名称:").append(materialById.getMname()).append("%n");
content.append(">- 申请数量:").append(recordMin.getQuantity()).append("%n");
content.append(">- 所处仓库:").append(depositoryRecordById.getDname()).append("%n");
content.append(">- 出库人员:").append(userByPort.getName()).append("%n");
content.append("%n---%n");
}
content.append(">## '''%n" +
">如需要查看详细信息,请点击:[查看信息](https://jy.hxgk.group/ApplicationOutView?id="+recordP.getId()+")");
markdown.put("content",content.toString());
markDown.setMarkdown(markdown);
String jsonString = JSONObject.toJSONString(markDown);
jsonString = String.format(jsonString);
System.out.println(jsonString);
// 3.获取请求的url
// 获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url
String accessToken = "".equals(QyWxConfig.token)?QyWxConfig.GetQYWXToken():QyWxConfig.token;
String url = QyWxConfig.sendMessage_url.replace("ACCESS_TOKEN", accessToken);
// 4.调用接口,发送消息
String s1 = HttpUtils.doPost(url, jsonString);
// 将返回结果转为json对象
JSONObject jsonObject = JSON.parseObject(s1);
// 返回
return jsonObject;
}
/**
* 给仓库管理员发送出库通知
* @param uid
* @param outMinId
* @return
*/
public JSONObject sendNotificationToDepositoryManager(String uid,Integer outMinId){
// 需要出库的子订单
ApplicationOutRecordMin recordMin = depositoryRecordMapper.findApplicationOutMinById(outMinId);
// 获取其主订单
ApplicationOutRecordP outRecordP = depositoryRecordMapper.findApplicationOutRecordPById(recordMin.getParentId());
// 申请人id
Integer applicantId = outRecordP.getApplicantId();
// 申请人
UserByPort applicant = PageController.FindUserById(applicantId, null);
// 定义文本通知型卡片
TextNotice textNotice = new TextNotice();
//设置消息接收者
String[] split = uid.split(",");
StringBuilder toUserName = new StringBuilder();
for (int i = 0; i < split.length - 1; i++) {
toUserName.append(split[i]).append("|");
}
toUserName.append(split[split.length - 1]);
textNotice.setTouser(toUserName.toString()); // 不区分大小写
// 设置agentId
textNotice.setAgentid(QyWxConfig.AgentId);
// 定义卡片模板
TemplateCard_text_notice text_notice = new TemplateCard_text_notice();
text_notice.setCard_type("text_notice");
// 任务id,同一个应用任务id不能重复,只能由数字、字母和“_-@”组成,最长128字节
// 通过雪花算法获取taskId
Snowflake snowflake = new Snowflake(10,10,true);
text_notice.setTask_id(snowflake.nextIdStr());
textNotice.setMsgtype("template_card");
// 设置主标题
TemplateCard_main_title main_title = new TemplateCard_main_title();
main_title.setTitle(applicant.getName()+"的出库请求");
main_title.setDesc("申请时间:"+ DateUtil.TimeStampToDateTime(Long.valueOf(outRecordP.getApplicantTime())));
text_notice.setMain_title(main_title);
// 卡片右上角更多操作按钮
TemplateCard_action_menu action_menu = new TemplateCard_action_menu();
action_menu.setDesc("卡片副交互辅助文本说明");
// 卡片右上角操作按钮
TemplateCard_action action1 = new TemplateCard_action();
action1.setKey("AcceptThePush");
action1.setText("接受推送");
TemplateCard_action action2 = new TemplateCard_action();
action2.setKey("NoPush");
action2.setText("不再推送");
List<TemplateCard_action> actionList = new ArrayList<>();
actionList.add(action1);
actionList.add(action2);
action_menu.setAction_list(actionList);
text_notice.setAction_menu(action_menu);
List<TemplateCard_horizontal_content> horizontalContentList = new ArrayList<>();
// 获取申请物料信息
Material materialById = materialMapper.findMaterialById(recordMin.getMid());
// 获取仓库信息
Depository depositoryRecordById = depositoryMapper.findDepositoryRecordById(recordMin.getDepositoryId());
// 设至二级标题
// 物料名称
TemplateCard_horizontal_content horizontal_content_mname = new TemplateCard_horizontal_content();
horizontal_content_mname.setType(0);
horizontal_content_mname.setKeyname("物料名称:");
horizontal_content_mname.setValue(materialById.getMname());
// 物料编码
TemplateCard_horizontal_content horizontal_content_mcode = new TemplateCard_horizontal_content();
horizontal_content_mcode.setType(0);
horizontal_content_mcode.setKeyname("物料编码:");
horizontal_content_mcode.setValue(materialById.getCode().toString());
// 申请数量
TemplateCard_horizontal_content horizontal_content_quantity = new TemplateCard_horizontal_content();
horizontal_content_quantity.setType(0);
horizontal_content_quantity.setKeyname("申请数量:");
horizontal_content_quantity.setValue(recordMin.getQuantity().toString());
// 所在仓库
TemplateCard_horizontal_content horizontal_content_depository = new TemplateCard_horizontal_content();
horizontal_content_depository.setType(0);
horizontal_content_depository.setKeyname("所在仓库:");
horizontal_content_depository.setValue(depositoryRecordById.getDname());
// 申请备注
TemplateCard_horizontal_content horizontal_content_applyRemark = new TemplateCard_horizontal_content();
horizontal_content_applyRemark.setType(0);
horizontal_content_applyRemark.setKeyname("申请备注:");
horizontal_content_applyRemark.setValue(outRecordP.getApplyRemark());
horizontalContentList.add(horizontal_content_mname);
horizontalContentList.add(horizontal_content_mcode);
horizontalContentList.add(horizontal_content_quantity);
horizontalContentList.add(horizontal_content_depository);
horizontalContentList.add(horizontal_content_applyRemark);
text_notice.setHorizontal_content_list(horizontalContentList);
// 卡片整体点击事件
TemplateCard_card_action card_action = new TemplateCard_card_action();
card_action.setType(1);
card_action.setUrl("https://jy.hxgk.group/ApplicationOutMinByDidForMobile?depositoryId="+depositoryRecordById.getId()+"&state=0");
text_notice.setCard_action(card_action);
//跳转指引样式的列表
List<TemplateCard_jump> jumpList = new ArrayList<>();
TemplateCard_jump jump = new TemplateCard_jump();
jump.setType("1");
jump.setUrl("https://jy.hxgk.group");
jump.setTitle("进入系统");
jumpList.add(jump);
text_notice.setJump_list(jumpList);
textNotice.setTemplate_card(text_notice);
String s = JSONObject.toJSONString(textNotice);
// 3.获取请求的url
// 获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url
String accessToken = "".equals(QyWxConfig.token)?QyWxConfig.GetQYWXToken():QyWxConfig.token;
String url = QyWxConfig.sendMessage_url.replace("ACCESS_TOKEN", accessToken);
// 4.调用接口,发送消息
String s1 = HttpUtils.doPost(url, s);
// 将返回结果转为json对象
JSONObject jsonObject = JSON.parseObject(s1);
// 返回
return jsonObject;
}
/**
* 用于撤回发送给企业微信的消息
* @param msgid 待撤回消息的id
* @return
*/
public String withdrawQyWxMessage(String msgid){
String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/message/recall?access_token=%s", QyWxConfig.token);
Map<String,Object> param = new HashMap<>();
param.put("msgid",msgid);
String jsonString = JSONObject.toJSONString(param);
String post = HttpUtils.doPost(url, jsonString);
JSONObject jsonObject = JSON.parseObject(post);
String errmsg = jsonObject.getString("errmsg");
Integer errcode = jsonObject.getInteger("errcode");
if(errcode == 0){
// 如果撤回成功
return errmsg;
}else{
return errmsg;
}
}
/**
* 用于更新卡片中的按钮为不可点击状态
* @param response_code
* @return
*/
public JSONObject updateTemplateCard(String response_code,String userName,String state){
String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/message/update_template_card?access_token="+QyWxConfig.token+"&debug=1");
Map<String,Object> map = new HashMap<>();
map.put("atall",1);
map.put("agentid",QyWxConfig.AgentId);
map.put("response_code",response_code);
Map<String,Object> button = new HashMap<>();
button.put("replace_name",userName+"已"+state);
map.put("button",button);
String jsonString = JSONObject.toJSONString(map);
String s1 = HttpUtils.doPost(url, jsonString);
JSONObject jsonObject = JSON.parseObject(s1);
return jsonObject;
}
}

30
src/main/java/com/dreamchaser/depository_manage/utils/HttpUtils.java

@ -1,6 +1,8 @@
package com.dreamchaser.depository_manage.utils; package com.dreamchaser.depository_manage.utils;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.security.pool.UserKeyAndTokenPool;
import lombok.Data; import lombok.Data;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
@ -33,16 +35,6 @@ import java.net.URL;
@Log4j2 @Log4j2
public class HttpUtils { public class HttpUtils {
public static String userKey = "";
public static String userToken = "";
public static void setUserKey(String userKey) {
HttpUtils.userKey = userKey;
}
public static void setUserToken(String userToken) {
HttpUtils.userToken = userToken;
}
public static String doGet(String httpurl) { public static String doGet(String httpurl) {
HttpURLConnection connection = null; HttpURLConnection connection = null;
@ -224,7 +216,7 @@ public class HttpUtils {
* @throws ParseException * @throws ParseException
* @throws IOException * @throws IOException
*/ */
public static String send(String url, JSONObject jsonObject,String encoding) throws ParseException, IOException{ public static String send(String url, JSONObject jsonObject, String encoding, UserByPort userByPort) throws ParseException, IOException{
String body = ""; String body = "";
//创建httpclient对象 //创建httpclient对象
CloseableHttpClient client = HttpClients.createDefault(); CloseableHttpClient client = HttpClients.createDefault();
@ -236,15 +228,25 @@ public class HttpUtils {
"application/json")); "application/json"));
//设置参数到请求对象中 //设置参数到请求对象中
httpPost.setEntity(s); httpPost.setEntity(s);
System.out.println("请求地址:"+url);
// System.out.println("请求参数:"+nvps.toString()); // System.out.println("请求参数:"+nvps.toString());
//设置header信息 //设置header信息
//指定报文头【Content-type】、【User-Agent】 //指定报文头【Content-type】、【User-Agent】
httpPost.setHeader("Content-type", "application/json"); httpPost.setHeader("Content-type", "application/json");
httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
httpPost.setHeader("user-token",userToken); String keyAndToken = " & ";
httpPost.setHeader("user-key",userKey); if(userByPort!=null)
{
keyAndToken = UserKeyAndTokenPool.getKeyAndToken(userByPort.getNumber());
}
String[] split = keyAndToken.split("&");
httpPost.setHeader("user-token",split[1]);
httpPost.setHeader("user-key",split[0]);
System.out.println("请求地址:"+url);
System.out.println("请求Key:"+split[0]);
System.out.println("请求token:"+split[1]);
//执行请求操作,并拿到结果(同步阻塞) //执行请求操作,并拿到结果(同步阻塞)
CloseableHttpResponse response = client.execute(httpPost); CloseableHttpResponse response = client.execute(httpPost);
//获取结果实体 //获取结果实体

117
src/main/java/com/dreamchaser/depository_manage/utils/QyWxXMLUtils.java

@ -1,4 +1,121 @@
package com.dreamchaser.depository_manage.utils; package com.dreamchaser.depository_manage.utils;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import org.apache.commons.lang.StringEscapeUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.FileOutputStream;
import java.io.StringReader;
import java.io.StringWriter;
/**
* 用于企业微信xml的工具类
*/
public class QyWxXMLUtils { public class QyWxXMLUtils {
/**
* 用于拼接回调post请求时的xml
* @param Encrypt
* @return
*/
public static String formatDataToXml(String Encrypt){
// 创建document对象
Document document = DocumentHelper.createDocument();
// 创建根节点xml
Element root = document.addElement("xml");
// 4、生成子节点及子节点内容
Element ToUserName = root.addElement("ToUserName");
ToUserName.setText("<![CDATA["+QyWxConfig.corpid+"]]>");
Element agentID = root.addElement("AgentID");
agentID.setText("<![CDATA["+QyWxConfig.AgentId+"]]>");
Element encrypt = root.addElement("Encrypt");
encrypt.setText("<![CDATA["+Encrypt+"]]>");
// 5、设置生成xml的格式
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置编码格式
format.setEncoding("UTF-8");
String xml = document.asXML();
xml = QyWxXMLUtils.dealxmlHeader(xml);
xml = StringEscapeUtils.unescapeXml(xml);
return xml;
}
/**
* 用于删除企业微信中的头标识
* @param xmlText
* @return
*/
public static String dealxmlHeader(String xmlText)
{
StringBuilder sb=new StringBuilder(xmlText);
StringBuilder newsb=new StringBuilder("");
String startstring=sb.substring(0,xmlText.indexOf("<?xml"));
String endstring=sb.substring(xmlText.indexOf("?>") + 2,xmlText.length());
newsb.append(startstring+endstring);
xmlText=new String(newsb.toString());
return xmlText;
}
/**
* 将String类型的xml转换成对象
* @param clazz
* @param xmlStr
* @return
*/
public static Object convertXmlStrToObject(Class clazz, String xmlStr) {
Object xmlObject = null;
try {
JAXBContext context = JAXBContext.newInstance(clazz);
// 进行将Xml转成对象的核心接口
Unmarshaller unmarshaller = context.createUnmarshaller();
StringReader sr = new StringReader(xmlStr);
xmlObject = unmarshaller.unmarshal(sr);
} catch (JAXBException e) {
e.printStackTrace();
}
return xmlObject;
}
/**
* 将对象直接转换成String类型的 XML输出
*
* @param obj
* @return
*/
public static String convertToXml(Object obj) {
// 创建输出流
StringWriter sw = new StringWriter();
try {
// 利用jdk中自带的转换类实现
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
// 格式化xml输出的格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
Boolean.TRUE);
// 将对象转换成输出流形式的xml
marshaller.marshal(obj, sw);
} catch (JAXBException e) {
e.printStackTrace();
}
return sw.toString();
}
} }

7
src/main/resources/application-test.yml

@ -5,6 +5,10 @@ management:
exposure: exposure:
include: beans,health include: beans,health
spring: spring:
mobile:
sitepreference:
enabled:true
servlet: servlet:
multipart: multipart:
enabled: true enabled: true
@ -68,9 +72,6 @@ spring:
# resources:
# static-locations: classpath:/static/
server: server:
mybatis: mybatis:
type-aliases-package: com.dreamchaser.depository_manage.entity type-aliases-package: com.dreamchaser.depository_manage.entity

1
src/main/resources/static/api/init.json

@ -180,7 +180,6 @@
"target": "_self", "target": "_self",
"href": "/my_task" "href": "/my_task"
}, },
{ {
"title": "我的申请", "title": "我的申请",
"href": "/my_apply", "href": "/my_apply",

1
src/main/resources/static/api/init_checker.json

@ -180,7 +180,6 @@
"target": "_self", "target": "_self",
"href": "/my_task" "href": "/my_task"
}, },
{ {
"title": "我的申请", "title": "我的申请",
"href": "/my_apply", "href": "/my_apply",

1
src/main/resources/static/api/init_reviewer.json

@ -180,7 +180,6 @@
"target": "_self", "target": "_self",
"href": "/my_task" "href": "/my_task"
}, },
{ {
"title": "我的申请", "title": "我的申请",
"href": "/my_apply", "href": "/my_apply",

1
src/main/resources/static/api/init_user.json

@ -60,7 +60,6 @@
"target": "_self", "target": "_self",
"href": "/my_task" "href": "/my_task"
}, },
{ {
"title": "我的申请", "title": "我的申请",
"href": "/my_apply", "href": "/my_apply",

20
src/main/resources/static/api/table-in.json

@ -35,10 +35,11 @@
"reviewTime": "2021-10-07 11:12", "reviewTime": "2021-10-07 11:12",
"depositoryId": 57, "depositoryId": 57,
"applyRemarks": "老板要求今天这批货得进库,请尽快批准", "applyRemarks": "老板要求今天这批货得进库,请尽快批准",
"checkerName":"李四", "checkerName": "李四",
"checkRemarks": "验收无误,入库!", "checkRemarks": "验收无误,入库!",
"checkTime": "2021-10-8 15:23" "checkTime": "2021-10-8 15:23"
},{ },
{
"id": 10002, "id": 10002,
"applicationId": 409, "applicationId": 409,
"materialName": "骁龙888芯片", "materialName": "骁龙888芯片",
@ -53,7 +54,8 @@
"reviewTime": "2020-10-07 11:12", "reviewTime": "2020-10-07 11:12",
"depositoryId": 57, "depositoryId": 57,
"applyRemarks": "老板要求今天这批货得进库,请尽快批准" "applyRemarks": "老板要求今天这批货得进库,请尽快批准"
},{ },
{
"id": 10000, "id": 10000,
"applicationId": 123, "applicationId": 123,
"materialName": "骁龙888芯片", "materialName": "骁龙888芯片",
@ -68,7 +70,8 @@
"reviewTime": "2020-10-07 11:12", "reviewTime": "2020-10-07 11:12",
"depositoryId": 57, "depositoryId": 57,
"applyRemarks": "老板要求今天这批货得进库,请尽快批准" "applyRemarks": "老板要求今天这批货得进库,请尽快批准"
},{ },
{
"id": 10000, "id": 10000,
"applicationId": 321, "applicationId": 321,
"materialName": "骁龙888芯片", "materialName": "骁龙888芯片",
@ -83,7 +86,8 @@
"reviewTime": "2020-10-07 11:12", "reviewTime": "2020-10-07 11:12",
"depositoryId": 57, "depositoryId": 57,
"applyRemarks": "老板要求今天这批货得进库,请尽快批准" "applyRemarks": "老板要求今天这批货得进库,请尽快批准"
},{ },
{
"id": 10000, "id": 10000,
"applicationId": 456, "applicationId": 456,
"materialName": "骁龙888芯片", "materialName": "骁龙888芯片",
@ -98,7 +102,8 @@
"reviewTime": "2020-10-07 11:12", "reviewTime": "2020-10-07 11:12",
"depositoryId": 57, "depositoryId": 57,
"applyRemarks": "老板要求今天这批货得进库,请尽快批准" "applyRemarks": "老板要求今天这批货得进库,请尽快批准"
},{ },
{
"id": 10000, "id": 10000,
"applicationId": 456, "applicationId": 456,
"materialName": "骁龙888芯片", "materialName": "骁龙888芯片",
@ -113,7 +118,8 @@
"reviewTime": "2020-10-07 11:12", "reviewTime": "2020-10-07 11:12",
"depositoryId": 57, "depositoryId": 57,
"applyRemarks": "老板要求今天这批货得进库,请尽快批准" "applyRemarks": "老板要求今天这批货得进库,请尽快批准"
},{ },
{
"id": 10000, "id": 10000,
"applicationId": 123, "applicationId": 123,
"materialName": "骁龙888芯片", "materialName": "骁龙888芯片",

18
src/main/resources/static/api/table-out.json

@ -35,7 +35,8 @@
"reviewTime": "2021-10-07 11:12", "reviewTime": "2021-10-07 11:12",
"depositoryId": 57, "depositoryId": 57,
"applyRemarks": "老板要求今天这批货得进库,请尽快批准" "applyRemarks": "老板要求今天这批货得进库,请尽快批准"
},{ },
{
"id": 10002, "id": 10002,
"applicationId": 409, "applicationId": 409,
"materialName": "骁龙888芯片", "materialName": "骁龙888芯片",
@ -50,7 +51,8 @@
"reviewTime": "2020-10-07 11:12", "reviewTime": "2020-10-07 11:12",
"depositoryId": 57, "depositoryId": 57,
"applyRemarks": "老板要求今天这批货得进库,请尽快批准" "applyRemarks": "老板要求今天这批货得进库,请尽快批准"
},{ },
{
"id": 10000, "id": 10000,
"applicationId": 123, "applicationId": 123,
"materialName": "骁龙888芯片", "materialName": "骁龙888芯片",
@ -65,7 +67,8 @@
"reviewTime": "2020-10-07 11:12", "reviewTime": "2020-10-07 11:12",
"depositoryId": 57, "depositoryId": 57,
"applyRemarks": "老板要求今天这批货得进库,请尽快批准" "applyRemarks": "老板要求今天这批货得进库,请尽快批准"
},{ },
{
"id": 10000, "id": 10000,
"applicationId": 321, "applicationId": 321,
"materialName": "骁龙888芯片", "materialName": "骁龙888芯片",
@ -80,7 +83,8 @@
"reviewTime": "2020-10-07 11:12", "reviewTime": "2020-10-07 11:12",
"depositoryId": 57, "depositoryId": 57,
"applyRemarks": "老板要求今天这批货得进库,请尽快批准" "applyRemarks": "老板要求今天这批货得进库,请尽快批准"
},{ },
{
"id": 10000, "id": 10000,
"applicationId": 456, "applicationId": 456,
"materialName": "骁龙888芯片", "materialName": "骁龙888芯片",
@ -95,7 +99,8 @@
"reviewTime": "2020-10-07 11:12", "reviewTime": "2020-10-07 11:12",
"depositoryId": 57, "depositoryId": 57,
"applyRemarks": "老板要求今天这批货得进库,请尽快批准" "applyRemarks": "老板要求今天这批货得进库,请尽快批准"
},{ },
{
"id": 10000, "id": 10000,
"applicationId": 456, "applicationId": 456,
"materialName": "骁龙888芯片", "materialName": "骁龙888芯片",
@ -110,7 +115,8 @@
"reviewTime": "2020-10-07 11:12", "reviewTime": "2020-10-07 11:12",
"depositoryId": 57, "depositoryId": 57,
"applyRemarks": "老板要求今天这批货得进库,请尽快批准" "applyRemarks": "老板要求今天这批货得进库,请尽快批准"
},{ },
{
"id": 10000, "id": 10000,
"applicationId": 123, "applicationId": 123,
"materialName": "骁龙888芯片", "materialName": "骁龙888芯片",

96
src/main/resources/static/api/tableSelect.json

@ -3,21 +3,85 @@
"msg": "", "msg": "",
"count": 16, "count": 16,
"data": [ "data": [
{ "id":"001", "username":"张玉林", "sex":"女" }, {
{ "id":"002", "username":"刘晓军", "sex":"男" }, "id": "001",
{ "id":"003", "username":"张恒", "sex":"男" }, "username": "张玉林",
{ "id":"004", "username":"朱一", "sex":"男" }, "sex": "女"
{ "id":"005", "username":"刘佳能", "sex":"女" }, },
{ "id":"006", "username":"晓梅", "sex":"女" }, {
{ "id":"007", "username":"马冬梅", "sex":"女" }, "id": "002",
{ "id":"008", "username":"刘晓庆", "sex":"女" }, "username": "刘晓军",
{ "id":"009", "username":"刘晓庆", "sex":"女" }, "sex": "男"
{ "id":"010", "username":"刘晓庆", "sex":"女" }, },
{ "id":"011", "username":"刘晓庆", "sex":"女" }, {
{ "id":"012", "username":"刘晓庆", "sex":"女" }, "id": "003",
{ "id":"013", "username":"刘晓庆", "sex":"女" }, "username": "张恒",
{ "id":"014", "username":"刘晓庆", "sex":"女" }, "sex": "男"
{ "id":"015", "username":"刘晓庆", "sex":"女" }, },
{ "id":"016", "username":"刘晓庆", "sex":"女" } {
"id": "004",
"username": "朱一",
"sex": "男"
},
{
"id": "005",
"username": "刘佳能",
"sex": "女"
},
{
"id": "006",
"username": "晓梅",
"sex": "女"
},
{
"id": "007",
"username": "马冬梅",
"sex": "女"
},
{
"id": "008",
"username": "刘晓庆",
"sex": "女"
},
{
"id": "009",
"username": "刘晓庆",
"sex": "女"
},
{
"id": "010",
"username": "刘晓庆",
"sex": "女"
},
{
"id": "011",
"username": "刘晓庆",
"sex": "女"
},
{
"id": "012",
"username": "刘晓庆",
"sex": "女"
},
{
"id": "013",
"username": "刘晓庆",
"sex": "女"
},
{
"id": "014",
"username": "刘晓庆",
"sex": "女"
},
{
"id": "015",
"username": "刘晓庆",
"sex": "女"
},
{
"id": "016",
"username": "刘晓庆",
"sex": "女"
}
] ]
} }

1
src/main/resources/static/api/test.json

@ -1,4 +1,3 @@
{ {
"homeInfo": { "homeInfo": {
"title": "首页", "title": "首页",

55
src/main/resources/static/css/layuimini.css

@ -645,12 +645,12 @@
color: #484545; color: #484545;
} }
.layuimini-tab-make{ .layuimini-tab-make {
position: absolute; position: absolute;
top: 36px; top: 36px;
bottom: 0px; bottom: 0px;
width: 100%; width: 100%;
background: rgb(255, 255, 255,0); background: rgb(255, 255, 255, 0);
padding: 0px; padding: 0px;
overflow: hidden; overflow: hidden;
} }
@ -658,13 +658,15 @@
/** /**
菜单缩放 菜单缩放
*/ */
.popup-tips .layui-layer-TipsG{ .popup-tips .layui-layer-TipsG {
display: none; display: none;
} }
.popup-tips.layui-layer-tips .layui-layer-content{
.popup-tips.layui-layer-tips .layui-layer-content {
padding: 0; padding: 0;
} }
.popup-tips .layui-nav-tree{
.popup-tips .layui-nav-tree {
width: 150px; width: 150px;
border-radius: 10px; border-radius: 10px;
} }
@ -675,13 +677,13 @@
} }
/**头部菜单字体间距*/ /**头部菜单字体间距*/
.layui-layout-admin .layui-header .layuimini-header-menu.layuimini-pc-show,.layui-layout-admin .layui-header .layuimini-header-menu.layuimini-mobile-show { .layui-layout-admin .layui-header .layuimini-header-menu.layuimini-pc-show, .layui-layout-admin .layui-header .layuimini-header-menu.layuimini-mobile-show {
letter-spacing: 1px; letter-spacing: 1px;
} }
/**左侧菜单更多下拉样式*/ /**左侧菜单更多下拉样式*/
.layuimini-menu-left .layui-nav-more,.layuimini-menu-left-zoom .layui-nav-more { .layuimini-menu-left .layui-nav-more, .layuimini-menu-left-zoom .layui-nav-more {
font-family: layui-icon !important; font-family: layui-icon !important;
font-size: 12px; font-size: 12px;
font-style: normal; font-style: normal;
@ -700,18 +702,19 @@
margin-top: -6px !important; margin-top: -6px !important;
} }
.layuimini-menu-left .layui-nav .layui-nav-mored,.layuimini-menu-left .layui-nav-itemed>a .layui-nav-more{ .layuimini-menu-left .layui-nav .layui-nav-mored, .layuimini-menu-left .layui-nav-itemed > a .layui-nav-more {
margin-top: -9px!important; margin-top: -9px !important;
} }
.layuimini-menu-left-zoom.layui-nav .layui-nav-mored,.layuimini-menu-left-zoom.layui-nav-itemed>a .layui-nav-more{ .layuimini-menu-left-zoom.layui-nav .layui-nav-mored, .layuimini-menu-left-zoom.layui-nav-itemed > a .layui-nav-more {
margin-top: -9px!important; margin-top: -9px !important;
} }
.layuimini-menu-left .layui-nav-more:before,.layuimini-menu-left-zoom .layui-nav-more:before { .layuimini-menu-left .layui-nav-more:before, .layuimini-menu-left-zoom .layui-nav-more:before {
content: "\e61a"; content: "\e61a";
} }
.layuimini-menu-left .layui-nav-itemed > a > .layui-nav-more,.layuimini-menu-left-zoom .layui-nav-itemed > a > .layui-nav-more {
.layuimini-menu-left .layui-nav-itemed > a > .layui-nav-more, .layuimini-menu-left-zoom .layui-nav-itemed > a > .layui-nav-more {
transform: rotate(180deg); transform: rotate(180deg);
-ms-transform: rotate(180deg); -ms-transform: rotate(180deg);
-moz-transform: rotate(180deg); -moz-transform: rotate(180deg);
@ -719,10 +722,10 @@
-o-transform: rotate(180deg); -o-transform: rotate(180deg);
width: 12px; width: 12px;
text-align: center; text-align: center;
border-style:none; border-style: none;
} }
.layuimini-menu-left .layui-nav-itemed > a > .layui-nav-more:before,.layuimini-menu-left-zoom .layui-nav-itemed > a > .layui-nav-more:before { .layuimini-menu-left .layui-nav-itemed > a > .layui-nav-more:before, .layuimini-menu-left-zoom .layui-nav-itemed > a > .layui-nav-more:before {
content: '\e61a'; content: '\e61a';
background-color: transparent; background-color: transparent;
display: inline-block; display: inline-block;
@ -730,7 +733,7 @@
} }
/**修复左侧菜单字体不对齐的问题*/ /**修复左侧菜单字体不对齐的问题*/
.layuimini-menu-left .layui-nav-item a .fa,.layuimini-menu-left .layui-nav-item a .layui-icon{ .layuimini-menu-left .layui-nav-item a .fa, .layuimini-menu-left .layui-nav-item a .layui-icon {
width: 20px; width: 20px;
} }
@ -786,16 +789,18 @@
left: 95px !important; left: 95px !important;
} }
.layuimini-pc-show{ .layuimini-pc-show {
display: block; display: block;
} }
.layuimini-mobile-show{
.layuimini-mobile-show {
display: none; display: none;
} }
/**菜单缩放*/ /**菜单缩放*/
.layuimini-mini .layuimini-menu-left .layui-nav-more,.layuimini-mini .layuimini-menu-left .layui-nav-child{ .layuimini-mini .layuimini-menu-left .layui-nav-more, .layuimini-mini .layuimini-menu-left .layui-nav-child {
display: none;!important; display: none;
!important;
} }
} }
@ -819,12 +824,14 @@
width: 100%; width: 100%;
} }
.layuimini-pc-show{ .layuimini-pc-show {
display: none; display: none;
} }
.layuimini-mobile-show{
.layuimini-mobile-show {
display: block; display: block;
} }
.layuimini-header-content { .layuimini-header-content {
left: 0; left: 0;
} }
@ -867,7 +874,7 @@
} }
.layuimini-mini .layui-layout-admin .layui-body { .layuimini-mini .layui-layout-admin .layui-body {
left: 0!important; left: 0 !important;
transition: left .2s; transition: left .2s;
top: 0; top: 0;
z-index: 998; z-index: 998;
@ -918,7 +925,7 @@
} }
} }
@media screen and (max-width: 550px){ @media screen and (max-width: 550px) {
/**头部右侧数据*/ /**头部右侧数据*/
.layuimini-multi-module.layuimini-mini .layuimini-header-content .layui-layout-right { .layuimini-multi-module.layuimini-mini .layuimini-header-content .layui-layout-right {

14
src/main/resources/static/css/public.css

@ -73,7 +73,7 @@ body {
box-shadow: 2px 0 4px rgba(0, 21, 41, .35); box-shadow: 2px 0 4px rgba(0, 21, 41, .35);
} }
.my-card{ .my-card {
cursor: pointer; cursor: pointer;
width: 100%; width: 100%;
display: inline-block; display: inline-block;
@ -81,11 +81,19 @@ body {
border-top-right-radius: 4px; border-top-right-radius: 4px;
} }
.my-time{ .my-card-context{
margin-left: 15px;
font-size: 18px;
margin-top: 5px;
font-weight:normal;
}
.my-time {
margin-top: 40px; margin-top: 40px;
margin-bottom: 20px; margin-bottom: 20px;
} }
body{
body {
font-family: 华文楷体; font-family: 华文楷体;
font-weight: bold; font-weight: bold;
} }

BIN
src/main/resources/static/images/logo_back.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

10027
src/main/resources/static/js/ZXing.js

File diff suppressed because one or more lines are too long

54
src/main/resources/static/js/cookie.js

@ -1,41 +1,41 @@
var cookieUtil={ var cookieUtil = {
createCookie:function (name,value,days){ createCookie: function (name, value, days) {
var expires=""; var expires = "";
if (days){ if (days) {
var date=new Date(); var date = new Date();
date.setTime(date.getTime()+(days*14*24*3600*1000)); date.setTime(date.getTime() + (days * 14 * 24 * 3600 * 1000));
expires=";expires="+date.toGMTString(); expires = ";expires=" + date.toGMTString();
} }
document.cookie=name+"="+value+expires+";path=/"; document.cookie = name + "=" + value + expires + ";path=/";
}, },
/*设置cookie*/ /*设置cookie*/
set:function(name,value,expires,path,domain,secure){ set: function (name, value, expires, path, domain, secure) {
var cookie=encodeURIComponent(name)+"="+encodeURIComponent(value); var cookie = encodeURIComponent(name) + "=" + encodeURIComponent(value);
if(expires instanceof Date){ if (expires instanceof Date) {
cookie+="; expires="+expires.toGMTString(); cookie += "; expires=" + expires.toGMTString();
}else{ } else {
var date=new Date(); var date = new Date();
date.setTime(date.getTime()+expires*24*3600*1000); date.setTime(date.getTime() + expires * 24 * 3600 * 1000);
cookie+="; expires="+date.toGMTString(); cookie += "; expires=" + date.toGMTString();
} }
if(path){ if (path) {
cookie+="; path="+path; cookie += "; path=" + path;
} }
if(domain){ if (domain) {
cookie+="; domain="+domain; cookie += "; domain=" + domain;
} }
if (secure) { if (secure) {
cookie+="; "+secure; cookie += "; " + secure;
} }
document.cookie=cookie; document.cookie = cookie;
}, },
/*获取cookie*/ /*获取cookie*/
get:function(name){ get: function (name) {
var cookieName=encodeURIComponent(name); var cookieName = encodeURIComponent(name);
/*正则表达式获取cookie*/ /*正则表达式获取cookie*/
var restr="(^| )"+cookieName+"=([^;]*)(;|$)"; var restr = "(^| )" + cookieName + "=([^;]*)(;|$)";
var reg=new RegExp(restr); var reg = new RegExp(restr);
var cookieValue=document.cookie.match(reg)[2]; var cookieValue = document.cookie.match(reg)[2];
/*字符串截取cookie*/ /*字符串截取cookie*/
/*var cookieStart=document.cookie.indexOf(cookieName+=); /*var cookieStart=document.cookie.indexOf(cookieName+=);
var cookieValue=null; var cookieValue=null;

1173
src/main/resources/static/js/jsQR.js

File diff suppressed because it is too large

5
src/main/resources/static/js/lay-module/cardTable/cardTable.css

@ -22,7 +22,7 @@
border: 1px solid #e8e8e8; border: 1px solid #e8e8e8;
} }
.project-list-item .project-list-item-body>h2 { .project-list-item .project-list-item-body > h2 {
font-size: 16px; font-size: 16px;
color: #333; color: #333;
margin-bottom: 12px; margin-bottom: 12px;
@ -76,14 +76,17 @@
.cloud-card-component .layui-laypage .layui-laypage-curr .layui-laypage-em { .cloud-card-component .layui-laypage .layui-laypage-curr .layui-laypage-em {
border-radius: 0px !important; border-radius: 0px !important;
} }
.ew-table-loading { .ew-table-loading {
padding: 10px 0; padding: 10px 0;
text-align: center; text-align: center;
} }
.ew-table-loading > i { .ew-table-loading > i {
color: #999; color: #999;
font-size: 30px; font-size: 30px;
} }
.ew-table-loading.ew-loading-float { .ew-table-loading.ew-loading-float {
position: absolute; position: absolute;
top: 0; top: 0;

38
src/main/resources/static/js/lay-module/cardTable/cardTable.js

@ -1,4 +1,4 @@
layui.define(['table', 'laypage','jquery', 'element'], function(exports) { layui.define(['table', 'laypage', 'jquery', 'element'], function (exports) {
"use strict"; "use strict";
var filePath = layui.cache.modules.cardTable var filePath = layui.cache.modules.cardTable
.substr(0, layui.cache.modules.cardTable.lastIndexOf('/')); .substr(0, layui.cache.modules.cardTable.lastIndexOf('/'));
@ -17,10 +17,10 @@ layui.define(['table', 'laypage','jquery', 'element'], function(exports) {
limit: 0, //每页数量默认是每行数量的双倍 limit: 0, //每页数量默认是每行数量的双倍
linenum: 4, //每行数量 2,3,4,6 linenum: 4, //每行数量 2,3,4,6
currentPage: 1,//当前页 currentPage: 1,//当前页
data:[], //静态数据 data: [], //静态数据
limits:[], //页码 limits: [], //页码
page: true, //是否分页 page: true, //是否分页
layout: ['count', 'prev', 'page', 'next','limit', 'skip'],//分页控件 layout: ['count', 'prev', 'page', 'next', 'limit', 'skip'],//分页控件
request: { request: {
pageName: 'page' //页码的参数名称,默认:page pageName: 'page' //页码的参数名称,默认:page
, limitName: 'limit' //每页数据量的参数名,默认:limit , limitName: 'limit' //每页数据量的参数名,默认:limit
@ -42,7 +42,7 @@ layui.define(['table', 'laypage','jquery', 'element'], function(exports) {
} }
}; };
var card = function(opt) { var card = function (opt) {
_instances[opt.elem.substring(1)] = this; _instances[opt.elem.substring(1)] = this;
this.reload(opt); this.reload(opt);
}; };
@ -69,8 +69,7 @@ layui.define(['table', 'laypage','jquery', 'element'], function(exports) {
if (!!url) { if (!!url) {
if (url.indexOf("?") >= 0) { if (url.indexOf("?") >= 0) {
url = url + '&v=1.0.0'; url = url + '&v=1.0.0';
} } else {
else {
url = url + '?v=1.0.0'; url = url + '?v=1.0.0';
} }
if (!!option.page) { if (!!option.page) {
@ -92,15 +91,14 @@ layui.define(['table', 'laypage','jquery', 'element'], function(exports) {
option.count = option.data.length; option.count = option.data.length;
} }
} } else {
else {
if (!option.alldata) { if (!option.alldata) {
option.alldata = option.data; option.alldata = option.data;
} }
if (option.page) { if (option.page) {
var data = []; var data = [];
option.count = option.alldata.length; option.count = option.alldata.length;
for (var i = (option.currentPage - 1) * option.limit; i < option.currentPage * option.limit && i<option.alldata.length; i++) { for (var i = (option.currentPage - 1) * option.limit; i < option.currentPage * option.limit && i < option.alldata.length; i++) {
data.push(option.alldata[i]); data.push(option.alldata[i]);
} }
option.data = data; option.data = data;
@ -110,8 +108,7 @@ layui.define(['table', 'laypage','jquery', 'element'], function(exports) {
if (!!option.data && option.data.length > 0) { if (!!option.data && option.data.length > 0) {
html = createComponent(option.elem.substring(1), option.linenum, option.data); html = createComponent(option.elem.substring(1), option.linenum, option.data);
html += "<div id='cardpage'></div>"; html += "<div id='cardpage'></div>";
} } else {
else {
html = "<p>没有数据</p>"; html = "<p>没有数据</p>";
} }
$(option.elem).html(html); $(option.elem).html(html);
@ -136,30 +133,33 @@ layui.define(['table', 'laypage','jquery', 'element'], function(exports) {
this.init(); // 初始化表格 this.init(); // 初始化表格
} }
function createComponent(elem,linenum,data) { function createComponent(elem, linenum, data) {
var html = "<div class='cloud-card-component'>" var html = "<div class='cloud-card-component'>"
var content = createCards(elem, linenum,data); var content = createCards(elem, linenum, data);
var page = ""; var page = "";
content = content + page; content = content + page;
html += content + "</div>" html += content + "</div>"
return html; return html;
} }
/** 创建指定数量的卡片 */ /** 创建指定数量的卡片 */
function createCards(elem, linenum,data) { function createCards(elem, linenum, data) {
var content = "<div class='layui-row layui-col-space30'>"; var content = "<div class='layui-row layui-col-space30'>";
for (var i = 0; i < data.length; i++) { for (var i = 0; i < data.length; i++) {
content += createCard(elem, linenum,data[i],i); content += createCard(elem, linenum, data[i], i);
} }
content += "</div>"; content += "</div>";
return content; return content;
} }
/** 创建一个卡片 */ /** 创建一个卡片 */
function createCard(elem, linenum, item, no) { function createCard(elem, linenum, item, no) {
var line = 12 / linenum; var line = 12 / linenum;
var card = var card =
'<div id=' + item.id + ' onclick="cardTableCheckedCard(' + elem + ',this)" class="layui-col-md' + line + ' ew-datagrid-item" data-index="' + no+'" data-number="1"> <div class="project-list-item"> <img class="project-list-item-cover" src="' +item.image + '"> <div class="project-list-item-body"> <h2>' + item.title + '</h2> <div class="project-list-item-text layui-text">' + item.remark + '</div> <div class="project-list-item-desc"> <span class="time">' +item.time + '</span> <div class="ew-head-list"></div> </div> </div > </div > </div > ' '<div id=' + item.id + ' onclick="cardTableCheckedCard(' + elem + ',this)" class="layui-col-md' + line + ' ew-datagrid-item" data-index="' + no + '" data-number="1"> <div class="project-list-item"> <img class="project-list-item-cover" src="' + item.image + '"> <div class="project-list-item-body"> <h2>' + item.title + '</h2> <div class="project-list-item-text layui-text">' + item.remark + '</div> <div class="project-list-item-desc"> <span class="time">' + item.time + '</span> <div class="ew-head-list"></div> </div> </div > </div > </div > '
return card; return card;
} }
/** 格式化返回参数 */ /** 格式化返回参数 */
function initData(tempData, option) { function initData(tempData, option) {
var data = {}; var data = {};
@ -179,6 +179,7 @@ layui.define(['table', 'laypage','jquery', 'element'], function(exports) {
} }
return data; return data;
} }
/** 同 步 请 求 获 取 数 据 */ /** 同 步 请 求 获 取 数 据 */
function getData(url) { function getData(url) {
$.ajaxSettings.async = false; $.ajaxSettings.async = false;
@ -190,8 +191,9 @@ layui.define(['table', 'laypage','jquery', 'element'], function(exports) {
}); });
return redata; return redata;
} }
//卡片点击事件 //卡片点击事件
window.cardTableCheckedCard = function (elem,obj) { window.cardTableCheckedCard = function (elem, obj) {
$(obj).addClass('layui-table-click').siblings().removeClass('layui-table-click'); $(obj).addClass('layui-table-click').siblings().removeClass('layui-table-click');
var item = {}; var item = {};
item.id = obj.id; item.id = obj.id;

15838
src/main/resources/static/js/lay-module/echarts/echarts.js

File diff suppressed because one or more lines are too long

2
src/main/resources/static/js/lay-module/echarts/echartsTheme.js

@ -1,4 +1,4 @@
layui.define(function(exports) { layui.define(function (exports) {
exports('echartsTheme', exports('echartsTheme',
{ {
"color": [ "color": [

61
src/main/resources/static/js/lay-module/layarea/layarea.js

@ -3826,7 +3826,8 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) {
cityCode: 0, cityCode: 0,
countyCode: 0, countyCode: 0,
}, },
change: function(result){} change: function (result) {
}
}; };
Class.prototype.index = 0; Class.prototype.index = 0;
@ -3850,13 +3851,13 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) {
let countyEl = options.elem.find('.county-selector'); let countyEl = options.elem.find('.county-selector');
//filter //filter
if(provinceEl.attr('lay-filter')){ if (provinceEl.attr('lay-filter')) {
provinceFilter = provinceEl.attr('lay-filter'); provinceFilter = provinceEl.attr('lay-filter');
} }
if(cityEl.attr('lay-filter')){ if (cityEl.attr('lay-filter')) {
cityFilter = cityEl.attr('lay-filter'); cityFilter = cityEl.attr('lay-filter');
} }
if(countyEl.attr('lay-filter')){ if (countyEl.attr('lay-filter')) {
countyFilter = countyEl.attr('lay-filter'); countyFilter = countyEl.attr('lay-filter');
} }
provinceEl.attr('lay-filter', provinceFilter); provinceEl.attr('lay-filter', provinceFilter);
@ -3864,16 +3865,16 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) {
countyEl.attr('lay-filter', countyFilter); countyEl.attr('lay-filter', countyFilter);
//获取默认值 //获取默认值
if(provinceEl.data('value')){ if (provinceEl.data('value')) {
options.data.province = provinceEl.data('value'); options.data.province = provinceEl.data('value');
options.data.provinceCode = getCode('province', options.data.province); options.data.provinceCode = getCode('province', options.data.province);
} }
if(cityEl.data('value')){ if (cityEl.data('value')) {
options.data.city = cityEl.data('value'); options.data.city = cityEl.data('value');
let code = getCode('city', options.data.city, options.data.provinceCode.slice(0, 2)); let code = getCode('city', options.data.city, options.data.provinceCode.slice(0, 2));
options.data.cityCode = code; options.data.cityCode = code;
} }
if(countyEl.data('value')){ if (countyEl.data('value')) {
options.data.county = countyEl.data('value'); options.data.county = countyEl.data('value');
options.data.countyCode = getCode('county', options.data.county, options.data.cityCode.slice(0, 4)); options.data.countyCode = getCode('county', options.data.county, options.data.cityCode.slice(0, 4));
} }
@ -3882,25 +3883,25 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) {
countyEl.attr('lay-filter', countyFilter); countyEl.attr('lay-filter', countyFilter);
//监听结果 //监听结果
form.on('select('+provinceFilter+')', function(data){ form.on('select(' + provinceFilter + ')', function (data) {
options.data.province = data.value; options.data.province = data.value;
options.data.provinceCode = getCode('province', data.value); options.data.provinceCode = getCode('province', data.value);
renderCity(options.data.provinceCode); renderCity(options.data.provinceCode);
options.change(options.data); options.change(options.data);
}); });
form.on('select('+cityFilter+')', function(data){ form.on('select(' + cityFilter + ')', function (data) {
options.data.city = data.value; options.data.city = data.value;
if(options.data.provinceCode){ if (options.data.provinceCode) {
options.data.cityCode = getCode('city', data.value, options.data.provinceCode.slice(0, 2)); options.data.cityCode = getCode('city', data.value, options.data.provinceCode.slice(0, 2));
renderCounty(options.data.cityCode); renderCounty(options.data.cityCode);
} }
options.change(options.data); options.change(options.data);
}); });
form.on('select('+countyFilter+')', function(data){ form.on('select(' + countyFilter + ')', function (data) {
options.data.county = data.value; options.data.county = data.value;
if(options.data.cityCode){ if (options.data.cityCode) {
options.data.countyCode = getCode('county', data.value, options.data.cityCode.slice(0, 4)); options.data.countyCode = getCode('county', data.value, options.data.cityCode.slice(0, 4));
} }
options.change(options.data); options.change(options.data);
@ -3909,21 +3910,21 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) {
renderProvince(); renderProvince();
//查找province //查找province
function renderProvince(){ function renderProvince() {
let tpl = '<option value="">--选择省--</option>'; let tpl = '<option value="">--选择省--</option>';
let provinceList = getList("province"); let provinceList = getList("province");
let currentCode = ''; let currentCode = '';
let currentName = ''; let currentName = '';
provinceList.forEach(function(_item){ provinceList.forEach(function (_item) {
// if (!currentCode){ // if (!currentCode){
// currentCode = _item.code; // currentCode = _item.code;
// currentName = _item.name; // currentName = _item.name;
// } // }
if(_item.name === options.data.province){ if (_item.name === options.data.province) {
currentCode = _item.code; currentCode = _item.code;
currentName = _item.name; currentName = _item.name;
} }
tpl += '<option value="'+_item.name+'">'+_item.name+'</option>'; tpl += '<option value="' + _item.name + '">' + _item.name + '</option>';
}); });
provinceEl.html(tpl); provinceEl.html(tpl);
provinceEl.val(options.data.province); provinceEl.val(options.data.province);
@ -3931,21 +3932,21 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) {
renderCity(currentCode); renderCity(currentCode);
} }
function renderCity(provinceCode){ function renderCity(provinceCode) {
let tpl = '<option value="">--选择市--</option>'; let tpl = '<option value="">--选择市--</option>';
let cityList = getList('city', provinceCode.slice(0, 2)); let cityList = getList('city', provinceCode.slice(0, 2));
let currentCode = ''; let currentCode = '';
let currentName = ''; let currentName = '';
cityList.forEach(function(_item){ cityList.forEach(function (_item) {
// if (!currentCode){ // if (!currentCode){
// currentCode = _item.code; // currentCode = _item.code;
// currentName = _item.name; // currentName = _item.name;
// } // }
if(_item.name === options.data.city){ if (_item.name === options.data.city) {
currentCode = _item.code; currentCode = _item.code;
currentName = _item.name; currentName = _item.name;
} }
tpl += '<option value="'+_item.name+'">'+_item.name+'</option>'; tpl += '<option value="' + _item.name + '">' + _item.name + '</option>';
}); });
options.data.city = currentName; options.data.city = currentName;
cityEl.html(tpl); cityEl.html(tpl);
@ -3954,21 +3955,21 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) {
renderCounty(currentCode); renderCounty(currentCode);
} }
function renderCounty(cityCode){ function renderCounty(cityCode) {
let tpl = '<option value="">--选择区--</option>'; let tpl = '<option value="">--选择区--</option>';
let countyList = getList('county', cityCode.slice(0, 4)); let countyList = getList('county', cityCode.slice(0, 4));
let currentCode = ''; let currentCode = '';
let currentName = ''; let currentName = '';
countyList.forEach(function(_item){ countyList.forEach(function (_item) {
// if (!currentCode){ // if (!currentCode){
// currentCode = _item.code; // currentCode = _item.code;
// currentName = _item.name; // currentName = _item.name;
// } // }
if(_item.name === options.data.county){ if (_item.name === options.data.county) {
currentCode = _item.code; currentCode = _item.code;
currentName = _item.name; currentName = _item.name;
} }
tpl += '<option value="'+_item.name+'">'+_item.name+'</option>'; tpl += '<option value="' + _item.name + '">' + _item.name + '</option>';
}); });
options.data.county = currentName; options.data.county = currentName;
countyEl.html(tpl); countyEl.html(tpl);
@ -4006,21 +4007,21 @@ layui.define(['layer', 'form', 'laytpl'], function (exports) {
return result; return result;
} }
function getCode(type, name, parentCode = 0){ function getCode(type, name, parentCode = 0) {
let code = ''; let code = '';
let list = areaList[type + "_list"] || {}; let list = areaList[type + "_list"] || {};
let result = {}; let result = {};
Object.keys(list).map(function (_code) { Object.keys(list).map(function (_code) {
if(parentCode){ if (parentCode) {
if(_code.indexOf(parentCode) === 0){ if (_code.indexOf(parentCode) === 0) {
result[_code] = list[_code]; result[_code] = list[_code];
} }
}else{ } else {
result[_code] = list[_code]; result[_code] = list[_code];
} }
}); });
layui.each(result, function(_code, _name){ layui.each(result, function (_code, _name) {
if(_name === name){ if (_name === name) {
code = _code; code = _code;
} }
}); });

18
src/main/resources/static/js/lay-module/layuimini/miniAdmin.js

@ -4,12 +4,12 @@
* version:2.0 * version:2.0
* description:layuimini 主体框架扩展 * description:layuimini 主体框架扩展
*/ */
layui.define(["jquery", "miniMenu", "element","miniTab", "miniTheme"], function (exports) { layui.define(["jquery", "miniMenu", "element", "miniTab", "miniTheme"], function (exports) {
var $ = layui.$, var $ = layui.$,
layer = layui.layer, layer = layui.layer,
miniMenu = layui.miniMenu, miniMenu = layui.miniMenu,
miniTheme = layui.miniTheme, miniTheme = layui.miniTheme,
element = layui.element , element = layui.element,
miniTab = layui.miniTab; miniTab = layui.miniTab;
if (!/http(s*):\/\//.test(location.href)) { if (!/http(s*):\/\//.test(location.href)) {
@ -103,7 +103,7 @@ layui.define(["jquery", "miniMenu", "element","miniTab", "miniTheme"], function
* @param clearUrl * @param clearUrl
*/ */
renderClear: function (clearUrl) { renderClear: function (clearUrl) {
$('.layuimini-clear').attr('data-href',clearUrl); $('.layuimini-clear').attr('data-href', clearUrl);
}, },
/** /**
@ -170,7 +170,7 @@ layui.define(["jquery", "miniMenu", "element","miniTab", "miniTheme"], function
el.msExitFullscreen(); el.msExitFullscreen();
} else if (el.oRequestFullscreen) { } else if (el.oRequestFullscreen) {
el.oCancelFullScreen(); el.oCancelFullScreen();
}else if (el.mozCancelFullScreen) { } else if (el.mozCancelFullScreen) {
el.mozCancelFullScreen(); el.mozCancelFullScreen();
} else if (el.webkitCancelFullScreen) { } else if (el.webkitCancelFullScreen) {
el.webkitCancelFullScreen(); el.webkitCancelFullScreen();
@ -290,14 +290,14 @@ layui.define(["jquery", "miniMenu", "element","miniTab", "miniTheme"], function
tips = $(this).prop("innerHTML"), tips = $(this).prop("innerHTML"),
isShow = $('.layuimini-tool i').attr('data-side-fold'); isShow = $('.layuimini-tool i').attr('data-side-fold');
if (isShow == 0 && tips) { if (isShow == 0 && tips) {
tips = "<ul class='layuimini-menu-left-zoom layui-nav layui-nav-tree layui-this'><li class='layui-nav-item layui-nav-itemed'>"+tips+"</li></ul>" ; tips = "<ul class='layuimini-menu-left-zoom layui-nav layui-nav-tree layui-this'><li class='layui-nav-item layui-nav-itemed'>" + tips + "</li></ul>";
window.openTips = layer.tips(tips, $(this), { window.openTips = layer.tips(tips, $(this), {
tips: [2, '#2f4056'], tips: [2, '#2f4056'],
time: 300000, time: 300000,
skin:"popup-tips", skin: "popup-tips",
success:function (el) { success: function (el) {
var left = $(el).position().left - 10 ; var left = $(el).position().left - 10;
$(el).css({ left:left }); $(el).css({left: left});
element.render(); element.render();
} }
}); });

110
src/main/resources/static/js/lay-module/layuimini/miniMenu.js

@ -4,7 +4,7 @@
* version:2.0 * version:2.0
* description:layuimini 菜单框架扩展 * description:layuimini 菜单框架扩展
*/ */
layui.define(["element","laytpl" ,"jquery"], function (exports) { layui.define(["element", "laytpl", "jquery"], function (exports) {
var element = layui.element, var element = layui.element,
$ = layui.$, $ = layui.$,
laytpl = layui.laytpl, laytpl = layui.laytpl,
@ -40,9 +40,9 @@ layui.define(["element","laytpl" ,"jquery"], function (exports) {
var leftMenuHtml = '', var leftMenuHtml = '',
childOpenClass = '', childOpenClass = '',
leftMenuCheckDefault = 'layui-this'; leftMenuCheckDefault = 'layui-this';
var me = this ; var me = this;
if (menuChildOpen) childOpenClass = ' layui-nav-itemed'; if (menuChildOpen) childOpenClass = ' layui-nav-itemed';
leftMenuHtml = this.renderLeftMenu(menuList,{ childOpenClass:childOpenClass }) ; leftMenuHtml = this.renderLeftMenu(menuList, {childOpenClass: childOpenClass});
$('.layui-layout-body').addClass('layuimini-single-module'); //单模块标识 $('.layui-layout-body').addClass('layuimini-single-module'); //单模块标识
$('.layuimini-header-menu').remove(); $('.layuimini-header-menu').remove();
$('.layuimini-menu-left').html(leftMenuHtml); $('.layuimini-menu-left').html(leftMenuHtml);
@ -53,49 +53,49 @@ layui.define(["element","laytpl" ,"jquery"], function (exports) {
/** /**
* 渲染一级菜单 * 渲染一级菜单
*/ */
compileMenu: function(menu,isSub){ compileMenu: function (menu, isSub) {
var menuHtml = '<li {{#if( d.menu){ }} data-menu="{{d.menu}}" {{#}}} class="layui-nav-item menu-li {{d.childOpenClass}} {{d.className}}" {{#if( d.id){ }} id="{{d.id}}" {{#}}}> <a {{#if( d.href){ }} layuimini-href="{{d.href}}" {{#}}} {{#if( d.target){ }} target="{{d.target}}" {{#}}} href="javascript:;">{{#if( d.icon){ }} <i class="{{d.icon}}"></i> {{#}}} <span class="layui-left-nav">{{d.title}}</span></a> {{# if(d.children){}} {{d.children}} {{#}}} </li>' ; var menuHtml = '<li {{#if( d.menu){ }} data-menu="{{d.menu}}" {{#}}} class="layui-nav-item menu-li {{d.childOpenClass}} {{d.className}}" {{#if( d.id){ }} id="{{d.id}}" {{#}}}> <a {{#if( d.href){ }} layuimini-href="{{d.href}}" {{#}}} {{#if( d.target){ }} target="{{d.target}}" {{#}}} href="javascript:;">{{#if( d.icon){ }} <i class="{{d.icon}}"></i> {{#}}} <span class="layui-left-nav">{{d.title}}</span></a> {{# if(d.children){}} {{d.children}} {{#}}} </li>';
if(isSub){ if (isSub) {
menuHtml = '<dd class="menu-dd {{d.childOpenClass}} {{ d.className }}"> <a href="javascript:;" {{#if( d.menu){ }} data-menu="{{d.menu}}" {{#}}} {{#if( d.id){ }} id="{{d.id}}" {{#}}} {{#if(( !d.child || !d.child.length ) && d.href){ }} layuimini-href="{{d.href}}" {{#}}} {{#if( d.target){ }} target="{{d.target}}" {{#}}}> {{#if( d.icon){ }} <i class="{{d.icon}}"></i> {{#}}} <span class="layui-left-nav"> {{d.title}}</span></a> {{# if(d.children){}} {{d.children}} {{#}}}</dd>' menuHtml = '<dd class="menu-dd {{d.childOpenClass}} {{ d.className }}"> <a href="javascript:;" {{#if( d.menu){ }} data-menu="{{d.menu}}" {{#}}} {{#if( d.id){ }} id="{{d.id}}" {{#}}} {{#if(( !d.child || !d.child.length ) && d.href){ }} layuimini-href="{{d.href}}" {{#}}} {{#if( d.target){ }} target="{{d.target}}" {{#}}}> {{#if( d.icon){ }} <i class="{{d.icon}}"></i> {{#}}} <span class="layui-left-nav"> {{d.title}}</span></a> {{# if(d.children){}} {{d.children}} {{#}}}</dd>'
} }
return laytpl(menuHtml).render(menu); return laytpl(menuHtml).render(menu);
}, },
compileMenuContainer :function(menu,isSub){ compileMenuContainer: function (menu, isSub) {
var wrapperHtml = '<ul class="layui-nav layui-nav-tree layui-left-nav-tree {{d.className}}" id="{{d.id}}">{{d.children}}</ul>' ; var wrapperHtml = '<ul class="layui-nav layui-nav-tree layui-left-nav-tree {{d.className}}" id="{{d.id}}">{{d.children}}</ul>';
if(isSub){ if (isSub) {
wrapperHtml = '<dl class="layui-nav-child ">{{d.children}}</dl>' ; wrapperHtml = '<dl class="layui-nav-child ">{{d.children}}</dl>';
} }
if(!menu.children){ if (!menu.children) {
return ""; return "";
} }
return laytpl(wrapperHtml).render(menu); return laytpl(wrapperHtml).render(menu);
}, },
each:function(list,callback){ each: function (list, callback) {
var _list = []; var _list = [];
for(var i = 0 ,length = list.length ; i<length ;i++ ){ for (var i = 0, length = list.length; i < length; i++) {
_list[i] = callback(i,list[i]) ; _list[i] = callback(i, list[i]);
} }
return _list ; return _list;
}, },
renderChildrenMenu:function(menuList,options){ renderChildrenMenu: function (menuList, options) {
var me = this ; var me = this;
menuList = menuList || [] ; menuList = menuList || [];
var html = this.each(menuList,function (idx,menu) { var html = this.each(menuList, function (idx, menu) {
if(menu.child && menu.child.length){ if (menu.child && menu.child.length) {
menu.children = me.renderChildrenMenu(menu.child,{ childOpenClass: options.childOpenClass || '' }); menu.children = me.renderChildrenMenu(menu.child, {childOpenClass: options.childOpenClass || ''});
} }
menu.className = "" ; menu.className = "";
menu.childOpenClass = options.childOpenClass || '' menu.childOpenClass = options.childOpenClass || ''
return me.compileMenu(menu,true) return me.compileMenu(menu, true)
}).join(""); }).join("");
return me.compileMenuContainer({ children:html },true) return me.compileMenuContainer({children: html}, true)
}, },
renderLeftMenu :function(leftMenus,options){ renderLeftMenu: function (leftMenus, options) {
options = options || {}; options = options || {};
var me = this ; var me = this;
var leftMenusHtml = me.each(leftMenus || [],function (idx,leftMenu) { // 左侧菜单遍历 var leftMenusHtml = me.each(leftMenus || [], function (idx, leftMenu) { // 左侧菜单遍历
var children = me.renderChildrenMenu(leftMenu.child, { childOpenClass:options.childOpenClass }); var children = me.renderChildrenMenu(leftMenu.child, {childOpenClass: options.childOpenClass});
var leftMenuHtml = me.compileMenu({ var leftMenuHtml = me.compileMenu({
href: leftMenu.href, href: leftMenu.href,
target: leftMenu.target, target: leftMenu.target,
@ -105,11 +105,15 @@ layui.define(["element","laytpl" ,"jquery"], function (exports) {
children: children, children: children,
className: '', className: '',
}); });
return leftMenuHtml ; return leftMenuHtml;
}).join(""); }).join("");
leftMenusHtml = me.compileMenuContainer({ id:options.parentMenuId,className:options.leftMenuCheckDefault,children:leftMenusHtml }) ; leftMenusHtml = me.compileMenuContainer({
return leftMenusHtml ; id: options.parentMenuId,
className: options.leftMenuCheckDefault,
children: leftMenusHtml
});
return leftMenusHtml;
}, },
/** /**
* 多模块 * 多模块
@ -118,7 +122,7 @@ layui.define(["element","laytpl" ,"jquery"], function (exports) {
*/ */
renderMultiModule: function (menuList, menuChildOpen) { renderMultiModule: function (menuList, menuChildOpen) {
menuList = menuList || []; menuList = menuList || [];
var me = this ; var me = this;
var headerMenuHtml = '', var headerMenuHtml = '',
headerMobileMenuHtml = '', headerMobileMenuHtml = '',
leftMenuHtml = '', leftMenuHtml = '',
@ -128,27 +132,33 @@ layui.define(["element","laytpl" ,"jquery"], function (exports) {
if (menuChildOpen) childOpenClass = ' layui-nav-itemed'; if (menuChildOpen) childOpenClass = ' layui-nav-itemed';
var headerMenuHtml = this.each(menuList, function (index, val) { //顶部菜单渲染 var headerMenuHtml = this.each(menuList, function (index, val) { //顶部菜单渲染
var menu = 'multi_module_' + index ; var menu = 'multi_module_' + index;
var id = menu+"HeaderId"; var id = menu + "HeaderId";
var topMenuItemHtml = "" ; var topMenuItemHtml = "";
topMenuItemHtml = me.compileMenu({ topMenuItemHtml = me.compileMenu({
className:headerMenuCheckDefault, className: headerMenuCheckDefault,
menu:menu, menu: menu,
id:id, id: id,
title:val.title, title: val.title,
href:"", href: "",
target:"", target: "",
children:"" children: ""
}); });
leftMenuHtml+=me.renderLeftMenu(val.child,{ leftMenuHtml += me.renderLeftMenu(val.child, {
parentMenuId:menu, parentMenuId: menu,
childOpenClass:childOpenClass, childOpenClass: childOpenClass,
leftMenuCheckDefault:leftMenuCheckDefault leftMenuCheckDefault: leftMenuCheckDefault
}); });
headerMobileMenuHtml +=me.compileMenu({ id:id,menu:menu,id:id,icon:val.icon, title:val.title, },true); headerMobileMenuHtml += me.compileMenu({
id: id,
menu: menu,
id: id,
icon: val.icon,
title: val.title,
}, true);
headerMenuCheckDefault = ""; headerMenuCheckDefault = "";
leftMenuCheckDefault = "layui-hide" ; leftMenuCheckDefault = "layui-hide";
return topMenuItemHtml ; return topMenuItemHtml;
}).join(""); }).join("");
$('.layui-layout-body').addClass('layuimini-multi-module'); //多模块标识 $('.layui-layout-body').addClass('layuimini-multi-module'); //多模块标识
$('.layuimini-menu-header-pc').html(headerMenuHtml); //电脑 $('.layuimini-menu-header-pc').html(headerMenuHtml); //电脑
@ -235,7 +245,7 @@ layui.define(["element","laytpl" ,"jquery"], function (exports) {
$('body').on('click', '.layuimini-header-menu.layuimini-mobile-show dd', function () { $('body').on('click', '.layuimini-header-menu.layuimini-mobile-show dd', function () {
var loading = layer.load(0, {shade: false, time: 2 * 1000}); var loading = layer.load(0, {shade: false, time: 2 * 1000});
var check = $('.layuimini-tool [data-side-fold]').attr('data-side-fold'); var check = $('.layuimini-tool [data-side-fold]').attr('data-side-fold');
if(check === "1"){ if (check === "1") {
$('.layuimini-site-mobile').trigger("click"); $('.layuimini-site-mobile').trigger("click");
element.init(); element.init();
} }

10
src/main/resources/static/js/lay-module/layuimini/miniTab.js

@ -53,8 +53,10 @@ layui.define(["element", "layer", "jquery"], function (exports) {
if (options.isIframe) ele = parent.layui.element; if (options.isIframe) ele = parent.layui.element;
ele.tabAdd('layuiminiTab', { ele.tabAdd('layuiminiTab', {
title: '<span class="layuimini-tab-active"></span><span>' + options.title + '</span><i class="layui-icon layui-unselect layui-tab-close">ဆ</i>' //用于演示 title: '<span class="layuimini-tab-active"></span><span>' + options.title + '</span><i class="layui-icon layui-unselect layui-tab-close">ဆ</i>' //用于演示
, content: '<iframe width="100%" height="100%" frameborder="no" border="0" marginwidth="0" marginheight="0" src="' + options.href + '"></iframe>' ,
, id: options.tabId content: '<iframe width="100%" height="100%" frameborder="no" border="0" marginwidth="0" marginheight="0" src="' + options.href + '"></iframe>'
,
id: options.tabId
}); });
$('.layuimini-menu-left').attr('layuimini-tab-tag', 'add'); $('.layuimini-menu-left').attr('layuimini-tab-tag', 'add');
sessionStorage.setItem('layuiminimenu_' + options.tabId, options.title); sessionStorage.setItem('layuiminimenu_' + options.tabId, options.title);
@ -404,10 +406,10 @@ layui.define(["element", "layer", "jquery"], function (exports) {
options.menuList = options.menuList || []; options.menuList = options.menuList || [];
if (!options.urlHashLocation) return false; if (!options.urlHashLocation) return false;
var tabId = location.hash.replace(/^#\//, ''); var tabId = location.hash.replace(/^#\//, '');
if (tabId === null || tabId === undefined || tabId ==='') return false; if (tabId === null || tabId === undefined || tabId === '') return false;
// 判断是否为首页 // 判断是否为首页
if(tabId ===options.homeInfo.href) return false; if (tabId === options.homeInfo.href) return false;
// 判断是否为右侧菜单 // 判断是否为右侧菜单
var menu = miniTab.searchMenu(tabId, options.menuList); var menu = miniTab.searchMenu(tabId, options.menuList);

2
src/main/resources/static/js/lay-module/layuimini/miniTheme.js

@ -307,7 +307,7 @@ layui.define(["jquery", "layer"], function (exports) {
'/**头部右侧下拉字体颜色 headerRightChildColor */\n' + '/**头部右侧下拉字体颜色 headerRightChildColor */\n' +
'.layui-layout-admin .layui-header .layui-nav .layui-nav-item .layui-nav-child a {\n' + '.layui-layout-admin .layui-header .layui-nav .layui-nav-item .layui-nav-child a {\n' +
' color: ' + bgcolorData.headerRightChildColor + '!important;\n' + ' color: ' + bgcolorData.headerRightChildColor + '!important;\n' +
'}\n'+ '}\n' +
'\n' + '\n' +
'/*头部右侧鼠标选中 headerRightColorThis */\n' + '/*头部右侧鼠标选中 headerRightColorThis */\n' +
'.layui-header .layuimini-menu-header-pc.layui-nav .layui-nav-item a:hover, .layui-header .layuimini-header-menu.layuimini-pc-show.layui-nav .layui-this a {\n' + '.layui-header .layuimini-menu-header-pc.layui-nav .layui-nav-item a:hover, .layui-header .layuimini-header-menu.layuimini-pc-show.layui-nav .layui-this a {\n' +

2
src/main/resources/static/js/lay-module/layuimini/miniTongji.js

@ -17,7 +17,7 @@ layui.define(["jquery"], function (exports) {
options.specific = options.specific || false; options.specific = options.specific || false;
options.domains = options.domains || []; options.domains = options.domains || [];
var domain = window.location.hostname; var domain = window.location.hostname;
if (options.specific === false || (options.specific === true && options.domains.indexOf(domain) >=0)) { if (options.specific === false || (options.specific === true && options.domains.indexOf(domain) >= 0)) {
miniTongji.listen(); miniTongji.listen();
} }
}, },

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save