KabeiyiServiceImpl.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. package com.malk.kabeiyi.service.impl;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.malk.kabeiyi.service.KabeiyiService;
  5. import com.malk.kabeiyi.util.U8Util;
  6. import com.malk.server.aliwork.YDConf;
  7. import com.malk.server.aliwork.YDParam;
  8. import com.malk.server.common.McR;
  9. import com.malk.server.dingtalk.DDConf;
  10. import com.malk.server.dingtalk.DDR;
  11. import com.malk.service.aliwork.YDService;
  12. import com.malk.service.dingtalk.DDClient;
  13. import com.malk.service.dingtalk.DDClient_Workflow;
  14. import com.malk.utils.UtilHttp;
  15. import com.malk.utils.UtilToken;
  16. import lombok.extern.slf4j.Slf4j;
  17. import org.apache.commons.lang3.StringUtils;
  18. import org.slf4j.MDC;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.beans.factory.annotation.Value;
  21. import org.springframework.scheduling.annotation.Async;
  22. import org.springframework.stereotype.Service;
  23. import java.util.HashMap;
  24. import java.util.List;
  25. import java.util.Map;
  26. import java.util.Objects;
  27. @Slf4j
  28. @Service
  29. public class KabeiyiServiceImpl implements KabeiyiService {
  30. @Autowired
  31. private DDClient_Workflow ddClient_workflow;
  32. @Autowired
  33. private DDClient ddClient;
  34. @Autowired
  35. private YDService ydService;
  36. @Autowired
  37. private DDConf ddConf;
  38. @Value("${tcdingtalk.appKey}")
  39. private String appKey;
  40. @Value("${tcdingtalk.appSecret}")
  41. private String appSecret;
  42. //审批实例url前缀(卡倍亿)
  43. private static final String PROC_INST_PREFIX_URL = "https://aflow.dingtalk.com/dingtalk/web/query/pchomepage.htm?from=oflow&op=true&corpid=dingc3a744cb591a7346f2c783f7214b6d69#/plainapproval?procInstId=";
  44. //宜搭-关联数据(卡倍亿)
  45. private static final String RELATION = "FORM-230C40137ED94524B4D4C94F8B23A8D2F8PF";
  46. //审批实例url前缀(特充)
  47. private static final String PROC_INST_PREFIX_URL2 = "https://aflow.dingtalk.com/dingtalk/web/query/pchomepage.htm?from=oflow&op=true&corpid=ding3ea249a3b5b466d0f2c783f7214b6d69#/plainapproval?procInstId=";
  48. //宜搭-关联数据(特充)
  49. private static final String RELATION2 = "FORM-51E17EFB52C14C9CB9E00168FED2BC18LQ6H";
  50. //关联表单(卡倍亿)
  51. private static final Map<String,String> SCHEMA_MAP = new HashMap<>();
  52. static{
  53. SCHEMA_MAP.put("工厂用章流程","1.1、工厂用章流程(除采购营销人事)");
  54. SCHEMA_MAP.put("中心用章流程","1.2、中心用章流程(除采购营销人事)");
  55. SCHEMA_MAP.put("人事专用用章审批流程","1.3、人事专用用章审批流程");
  56. SCHEMA_MAP.put("商务部用章申请流程","1.4、商务部用章申请流程");
  57. SCHEMA_MAP.put("办公用品采购申请流程","4.3、办公用品采购申请流程");
  58. //需传其他值
  59. //对方单位名称 收入或支出 金额 备注
  60. SCHEMA_MAP.put("信息化建设用章流程","1.7、信息化建设用章流程");
  61. //合同说明 采购物品类型
  62. SCHEMA_MAP.put("技术中心请购审批流程","4.10、技术中心请购审批流程");
  63. //合同总金额 合同说明
  64. SCHEMA_MAP.put("设备备品备件采购合同审批流程","4.1b、设备备品备件采购合同审批流程");
  65. SCHEMA_MAP.put("其他物品采购合同流程","4.2b、其他物品采购合同流程");
  66. SCHEMA_MAP.put("设备采购合同审批流程","4.5c、设备采购合同审批流程");
  67. SCHEMA_MAP.put("原材料采购合同审批流程","4.9b、原材料采购合同审批流程");
  68. SCHEMA_MAP.put("墨西哥采购合同审批流程","4.13b、墨西哥采购合同审批流程");
  69. }
  70. //关联表单(特充)
  71. private static final Map<String,String> SCHEMA_MAP2 = new HashMap<>();
  72. static{
  73. //需传其他值
  74. //对方单位名称 收入或支出 金额 备注
  75. SCHEMA_MAP2.put("特充用章流程","1.2、特充用章流程(除采购营销人事)");
  76. //合同总金额 合同说明
  77. SCHEMA_MAP2.put("设备备品备件采购合同审批流程","4.1b、设备备品备件采购合同审批流程");
  78. SCHEMA_MAP2.put("其他物品采购合同流程","4.2b、其他物品采购合同流程");
  79. SCHEMA_MAP2.put("母排设备采购合同审批流程","4.5c、母排设备采购合同审批流程");
  80. SCHEMA_MAP2.put("双铝设备采购合同审批流程","4.6c、双铝设备采购合同审批流程");
  81. //合同总金额
  82. SCHEMA_MAP2.put("原材料采购合同审批流程","4.9b、原材料采购合同审批流程");
  83. //文件类别 对方单位名称 收入或支出 金额 用印文件名称 文件份数 加盖何种印章 备注
  84. SCHEMA_MAP2.put("信息化建设用章流程","1.7、信息化建设用章流程");
  85. }
  86. @Override
  87. public McR addPayment(Map map) {
  88. try {
  89. String tradeid = U8Util.getTradeid();
  90. map.put("tradeid",tradeid);
  91. U8Util.sendPost(map,"https://api.yonyouup.com/api/voucher/add","voucher");
  92. }catch (Exception e) {
  93. return McR.errorUnknown(e.getMessage());
  94. }
  95. return McR.success();
  96. }
  97. @Override
  98. public McR pushProcInstToYD(Map map) {
  99. MDC.put("MDC_KEY_PID","1002");
  100. //审批实例
  101. String procInstId = String.valueOf(map.get("procInstId"));
  102. //获取审批实例信息
  103. Map processInstance = ddClient_workflow.getProcessInstanceId(ddClient.getAccessToken(), procInstId);
  104. if (Objects.nonNull(processInstance)){
  105. Map formData = new HashMap<>();
  106. String title = String.valueOf(processInstance.get("title"));
  107. String type = "";
  108. List<Map> formComponentValues = (List<Map>) processInstance.get("formComponentValues");
  109. for (String key : SCHEMA_MAP.keySet()) {
  110. if (title.contains(key)){
  111. type = SCHEMA_MAP.get(key);
  112. switch (type){
  113. case "1.7、信息化建设用章流程" :
  114. for (Map formComponentValue : formComponentValues) {
  115. String name = String.valueOf(formComponentValue.get("name"));
  116. String value = String.valueOf(formComponentValue.get("value")).equals("null") ? "" : String.valueOf(formComponentValue.get("value"));
  117. switch (name){
  118. case "对方单位名称" : formData.put("textField_lygzlf3j",value);break;
  119. case "收入或支出" : formData.put("textField_lygzlf3k",value);break;
  120. case "金额" : formData.put("textField_lygzlf3l",value);break;
  121. case "备注" : formData.put("textField_lygzlf3m",value);break;
  122. }
  123. }
  124. break;
  125. case "4.1b、设备备品备件采购合同审批流程" :
  126. case "4.2b、其他物品采购合同流程" :
  127. case "4.5c、设备采购合同审批流程" :
  128. case "4.9b、原材料采购合同审批流程" :
  129. case "4.13b、墨西哥采购合同审批流程" :
  130. for (Map formComponentValue : formComponentValues) {
  131. String name = String.valueOf(formComponentValue.get("name"));
  132. switch (name){
  133. case "合同总金额" : formData.put("numberField_lyf81587",formComponentValue.get("value"));break;
  134. case "合同说明" :
  135. if (Objects.nonNull(formComponentValue.get("value"))){
  136. formData.put("textField_lyf81588",formComponentValue.get("value"));
  137. }
  138. break;
  139. }
  140. }
  141. break;
  142. case "4.10、技术中心请购审批流程" :
  143. for (Map formComponentValue : formComponentValues) {
  144. String name = String.valueOf(formComponentValue.get("name"));
  145. switch (name){
  146. case "采购物品类型" : formData.put("textField_lyibvb98",formComponentValue.get("value"));break;
  147. case "合同说明" :
  148. if (Objects.nonNull(formComponentValue.get("value"))){
  149. formData.put("textField_lyf81588",formComponentValue.get("value"));
  150. }
  151. break;
  152. }
  153. }
  154. break;
  155. default:
  156. break;
  157. }
  158. formData.put("textField_lyf8157x",title);
  159. formData.put("selectField_lyf81580",type);
  160. Map condition = new HashMap<>();
  161. condition.put("textField_lyf81581",PROC_INST_PREFIX_URL + procInstId);
  162. //同步到宜搭
  163. ydService.upsertFormData(RELATION,condition,formData,null);
  164. break;
  165. }
  166. }
  167. return McR.success();
  168. }
  169. return McR.errorParam("审批实例不存在!");
  170. }
  171. @Override
  172. public McR pushProcInstToYD2(Map map) {
  173. MDC.put("MDC_KEY_PID","1003");
  174. //审批实例
  175. String procInstId = String.valueOf(map.get("procInstId"));
  176. //获取审批实例信息
  177. Map processInstance = ddClient_workflow.getProcessInstanceId(getTcAccessToken(), procInstId);
  178. if (Objects.nonNull(processInstance)){
  179. Map formData = new HashMap<>();
  180. String title = String.valueOf(processInstance.get("title"));
  181. String type = "";
  182. List<Map> formComponentValues = (List<Map>) processInstance.get("formComponentValues");
  183. for (String key : SCHEMA_MAP2.keySet()) {
  184. if (title.contains(key)){
  185. type = SCHEMA_MAP2.get(key);
  186. switch (type){
  187. case "1.7、信息化建设用章流程" :
  188. for (Map formComponentValue : formComponentValues) {
  189. String name = String.valueOf(formComponentValue.get("name"));
  190. Object value = formComponentValue.get("value");
  191. switch (name){
  192. case "文件类别" : formData.put("textField_lymfq9oa",value);break;
  193. case "对方单位名称" : formData.put("textField_lygzlf3j",value);break;
  194. case "收入或支出" : formData.put("textField_lygzlf3k",value);break;
  195. case "金额(元)" : formData.put("textField_lygzlf3l",value);break;
  196. case "用印文件名称" : formData.put("textField_lymfq9oc",value);break;
  197. case "文件份数" : formData.put("numberField_lymfq9od",value);break;
  198. case "加盖何种印章" : formData.put("textField_lymfq9oe",value);break;
  199. case "备注" : formData.put("textField_lygzlf3m",value);break;
  200. }
  201. }
  202. break;
  203. case "4.1b、设备备品备件采购合同审批流程" :
  204. case "4.2b、其他物品采购合同流程" :
  205. case "4.5c、母排设备采购合同审批流程" :
  206. case "4.6c、双铝设备采购合同审批流程" :
  207. case "4.9b、原材料采购合同审批流程" :
  208. for (Map formComponentValue : formComponentValues) {
  209. String name = String.valueOf(formComponentValue.get("name"));
  210. switch (name){
  211. case "合同总金额(元)":
  212. case "合同总金额" : formData.put("numberField_lyf81587",formComponentValue.get("value"));break;
  213. case "合同说明" :
  214. if (Objects.nonNull(formComponentValue.get("value"))){
  215. formData.put("textField_lyf81588",formComponentValue.get("value"));
  216. }
  217. break;
  218. }
  219. }
  220. break;
  221. case "1.2、特充用章流程(除采购营销人事)" :
  222. for (Map formComponentValue : formComponentValues) {
  223. String name = String.valueOf(formComponentValue.get("name"));
  224. String value = String.valueOf(formComponentValue.get("value")).equals("null") ? "" : String.valueOf(formComponentValue.get("value"));
  225. switch (name){
  226. case "对方单位名称" : formData.put("textField_lygzlf3j",value);break;
  227. case "收入或支出" : formData.put("textField_lygzlf3k",value);break;
  228. case "金额(元)" : formData.put("textField_lygzlf3l",value);break;
  229. case "备注" : formData.put("textField_lygzlf3m",value);break;
  230. }
  231. }
  232. break;
  233. default:
  234. break;
  235. }
  236. formData.put("textField_lyf8157x",title);
  237. formData.put("selectField_lyf81580",type);
  238. Map condition = new HashMap<>();
  239. condition.put("textField_lyf81581",PROC_INST_PREFIX_URL2 + procInstId);
  240. //同步到宜搭
  241. ydService.upsertFormData(RELATION2,condition,formData,null);
  242. break;
  243. }
  244. }
  245. return McR.success();
  246. }
  247. return McR.errorParam("审批实例不存在!");
  248. }
  249. public String getTcAccessToken() {
  250. String accessToken = UtilToken.get("tc-invalid-token-dingtalk");
  251. if (StringUtils.isNotBlank(accessToken)) {
  252. return accessToken;
  253. } else {
  254. Map param = new HashMap();
  255. param.put("appkey", appKey);
  256. param.put("appsecret", appSecret);
  257. DDR r = (DDR)UtilHttp.doGet("https://oapi.dingtalk.com/gettoken", param, DDR.class);
  258. log.info("特充响应token, {}", r.getAccessToken());
  259. accessToken = r.getAccessToken();
  260. UtilToken.put("tc-invalid-token-dingtalk", accessToken, (long)r.getExpiresIn() * 1000L);
  261. return accessToken;
  262. }
  263. }
  264. }