MachineDistributeLeaflets.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550
  1. package com.java110.job.adapt.Repair;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.java110.core.factory.CommunitySettingFactory;
  5. import com.java110.core.factory.WechatFactory;
  6. import com.java110.core.log.LoggerFactory;
  7. import com.java110.dto.community.CommunityDto;
  8. import com.java110.dto.file.FileRelDto;
  9. import com.java110.dto.owner.OwnerAppUserDto;
  10. import com.java110.dto.repair.RepairDto;
  11. import com.java110.dto.repair.RepairUserDto;
  12. import com.java110.dto.smallWeChat.SmallWeChatDto;
  13. import com.java110.dto.smallWechatAttr.SmallWechatAttrDto;
  14. import com.java110.dto.staffAppAuth.StaffAppAuthDto;
  15. import com.java110.dto.user.UserDto;
  16. import com.java110.entity.order.Business;
  17. import com.java110.entity.wechat.Content;
  18. import com.java110.entity.wechat.Data;
  19. import com.java110.entity.wechat.PropertyFeeTemplateMessage;
  20. import com.java110.intf.common.IFileRelInnerServiceSMO;
  21. import com.java110.intf.community.ICommunityInnerServiceSMO;
  22. import com.java110.intf.community.IRepairInnerServiceSMO;
  23. import com.java110.intf.community.IRepairUserInnerServiceSMO;
  24. import com.java110.intf.store.ISmallWeChatInnerServiceSMO;
  25. import com.java110.intf.store.ISmallWechatAttrInnerServiceSMO;
  26. import com.java110.intf.user.IOwnerAppUserInnerServiceSMO;
  27. import com.java110.intf.user.IStaffAppAuthInnerServiceSMO;
  28. import com.java110.intf.user.IUserInnerServiceSMO;
  29. import com.java110.job.adapt.DatabusAdaptImpl;
  30. import com.java110.utils.cache.MappingCache;
  31. import com.java110.utils.util.ImageUtils;
  32. import com.java110.utils.util.StringUtil;
  33. import org.slf4j.Logger;
  34. import org.springframework.beans.factory.annotation.Autowired;
  35. import org.springframework.http.HttpStatus;
  36. import org.springframework.http.ResponseEntity;
  37. import org.springframework.stereotype.Component;
  38. import org.springframework.web.client.RestTemplate;
  39. import java.text.SimpleDateFormat;
  40. import java.util.List;
  41. /**
  42. * 派单(抢单、转单)通知适配器
  43. *
  44. * @author fqz
  45. * @date 2021-01-13 13:55
  46. */
  47. @Component(value = "machineDistributeLeaflets")
  48. public class MachineDistributeLeaflets extends DatabusAdaptImpl {
  49. private static Logger logger = LoggerFactory.getLogger(MachineDistributeLeaflets.class);
  50. @Autowired
  51. private IRepairUserInnerServiceSMO repairUserInnerServiceSMO;
  52. @Autowired
  53. private IRepairInnerServiceSMO repairInnerServiceSMO;
  54. @Autowired
  55. private ICommunityInnerServiceSMO communityInnerServiceSMO;
  56. @Autowired
  57. private ISmallWeChatInnerServiceSMO smallWeChatInnerServiceSMOImpl;
  58. @Autowired
  59. private ISmallWechatAttrInnerServiceSMO smallWechatAttrInnerServiceSMOImpl;
  60. @Autowired
  61. private IStaffAppAuthInnerServiceSMO staffAppAuthInnerServiceSMO;
  62. @Autowired
  63. private RestTemplate outRestTemplate;
  64. @Autowired
  65. private IUserInnerServiceSMO userInnerServiceSMO;
  66. @Autowired
  67. private IOwnerAppUserInnerServiceSMO ownerAppUserInnerServiceSMO;
  68. @Autowired
  69. private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl;
  70. //模板信息推送地址
  71. private static String sendMsgUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";
  72. @Override
  73. public void execute(Business business, List<Business> businesses) {
  74. RepairUserDto repairUserDto = new RepairUserDto();
  75. repairUserDto.setbId(business.getbId());
  76. repairUserDto.setStatusCd("0");
  77. List<RepairUserDto> repairUserDtos = repairUserInnerServiceSMO.queryRepairUsers(repairUserDto);
  78. //获取员工处理状态(10001 处理中;10002 结单;10003 退单;10004 转单;10005 提交)
  79. String state = repairUserDtos.get(0).getState();
  80. if (!state.equals("10005")) {
  81. //获取报修id
  82. String repairId = repairUserDtos.get(0).getRepairId();
  83. RepairDto repairDto = new RepairDto();
  84. repairDto.setRepairId(repairId);
  85. repairDto.setStatusCd("0");
  86. List<RepairDto> repairDtos = repairInnerServiceSMO.queryRepairs(repairDto);
  87. //查询报修状态(1000 未派单;1100 接单;1200 退单;1300 转单;1400 申请支付;1500 支付失败;1700 待评价;1800 电话回访;1900 办理完成;2000 未办理结单)
  88. String repairState = repairDtos.get(0).getState();
  89. //获取联系人姓名
  90. String repairName = repairDtos.get(0).getRepairName();
  91. //获取联系人电话
  92. String tel = repairDtos.get(0).getTel();
  93. //获取位置信息
  94. String repairObjName = repairDtos.get(0).getRepairObjName();
  95. //报修对象ID
  96. String repairObjId = repairDtos.get(0).getRepairObjId();
  97. //获取报修内容
  98. String context = repairDtos.get(0).getContext();
  99. //获取派单时间
  100. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  101. String time = format.format(repairUserDtos.get(0).getCreateTime());
  102. //获取小区id
  103. String communityId = repairDtos.get(0).getCommunityId();
  104. //查询小区信息
  105. CommunityDto communityDto = new CommunityDto();
  106. communityDto.setCommunityId(communityId);
  107. List<CommunityDto> communityDtos = communityInnerServiceSMO.queryCommunitys(communityDto);
  108. //派单方式(100表示抢单;200表示指派;300表示轮训)
  109. String repairWay = repairDtos.get(0).getRepairWay();
  110. if (repairState.equals("1100") && repairWay.equals("200")) {
  111. //获取维修员工的id
  112. String staffId = repairUserDtos.get(1).getStaffId();
  113. //获取用户id
  114. String preStaffId = repairUserDtos.get(0).getPreStaffId();
  115. JSONObject paramIn = new JSONObject();
  116. paramIn.put("repairName", repairName);
  117. paramIn.put("repairObjName", repairObjName);
  118. paramIn.put("tel", tel);
  119. paramIn.put("communityId", communityId);
  120. paramIn.put("context", context);
  121. paramIn.put("time", time);
  122. paramIn.put("staffId", staffId);
  123. paramIn.put("repairObjId", repairObjId);
  124. paramIn.put("preStaffId", preStaffId);
  125. paramIn.put("repairId", repairId);
  126. //给维修师傅推送信息
  127. sendMsg(paramIn, communityDtos.get(0));
  128. //派单成功给业主推送信息
  129. publishMsg(paramIn, communityDtos.get(0));
  130. //为企业微信群发消息
  131. sendMsgToWechatGroup(paramIn, communityDtos.get(0));
  132. } else if (repairState.equals("1100") && (repairWay.equals("100") || repairWay.equals("300"))) {
  133. String staffId = "";
  134. if (repairUserDtos.size() > 1) {
  135. staffId = repairUserDtos.get(1).getStaffId();
  136. } else {
  137. //获取维修员工的id
  138. staffId = repairUserDtos.get(0).getStaffId();
  139. }
  140. //获取用户id
  141. String preStaffId = repairUserDtos.get(0).getPreStaffId();
  142. JSONObject paramIn = new JSONObject();
  143. paramIn.put("staffId", staffId);
  144. paramIn.put("context", context);
  145. paramIn.put("time", time);
  146. paramIn.put("repairObjId", repairObjId);
  147. paramIn.put("preStaffId", preStaffId);
  148. paramIn.put("repairName", repairName);
  149. paramIn.put("tel", tel);
  150. paramIn.put("repairObjName", repairObjName);
  151. //抢单成功给业主推送信息
  152. publishMsg(paramIn, communityDtos.get(0));
  153. if (repairUserDtos.size() > 1) {
  154. //给维修师傅推送信息
  155. sendMsg(paramIn, communityDtos.get(0));
  156. } else {
  157. //抢单成功给维修师傅推送信息
  158. publishMessage(paramIn, communityDtos.get(0));
  159. }
  160. } else if (repairState.equals("1300")) { //转单
  161. //获取维修员工id
  162. String staffId = repairUserDtos.get(0).getStaffId();
  163. //获取上级用户姓名
  164. String preStaffName = repairUserDtos.get(0).getPreStaffName();
  165. JSONObject paramIn = new JSONObject();
  166. paramIn.put("repairName", repairName);
  167. paramIn.put("repairObjName", repairObjName);
  168. paramIn.put("tel", tel);
  169. paramIn.put("context", context);
  170. paramIn.put("time", time);
  171. paramIn.put("staffId", staffId);
  172. paramIn.put("preStaffName", preStaffName);
  173. //给维修师傅推送信息
  174. sendMessage(paramIn, communityDtos.get(0));
  175. }
  176. }
  177. }
  178. /**
  179. * 转单给维修师傅推送信息
  180. *
  181. * @param paramIn
  182. * @param communityDto
  183. */
  184. private void sendMessage(JSONObject paramIn, CommunityDto communityDto) {
  185. //查询公众号配置
  186. SmallWeChatDto smallWeChatDto = new SmallWeChatDto();
  187. smallWeChatDto.setWeChatType("1100");
  188. smallWeChatDto.setObjType(SmallWeChatDto.OBJ_TYPE_COMMUNITY);
  189. smallWeChatDto.setObjId(communityDto.getCommunityId());
  190. List<SmallWeChatDto> smallWeChatDtos = smallWeChatInnerServiceSMOImpl.querySmallWeChats(smallWeChatDto);
  191. if (smallWeChatDto == null || smallWeChatDtos.size() <= 0) {
  192. logger.info("未配置微信公众号信息,定时任务执行结束");
  193. return;
  194. }
  195. SmallWeChatDto weChatDto = smallWeChatDtos.get(0);
  196. SmallWechatAttrDto smallWechatAttrDto = new SmallWechatAttrDto();
  197. smallWechatAttrDto.setCommunityId(communityDto.getCommunityId());
  198. smallWechatAttrDto.setWechatId(weChatDto.getWeChatId());
  199. smallWechatAttrDto.setSpecCd(SmallWechatAttrDto.SPEC_CD_WECHAT_DISPATCH_REMIND_TEMPLATE);
  200. List<SmallWechatAttrDto> smallWechatAttrDtos = smallWechatAttrInnerServiceSMOImpl.querySmallWechatAttrs(smallWechatAttrDto);
  201. if (smallWechatAttrDtos == null || smallWechatAttrDtos.size() <= 0) {
  202. logger.info("未配置微信公众号消息模板");
  203. return;
  204. }
  205. String templateId = smallWechatAttrDtos.get(0).getValue();
  206. String accessToken = WechatFactory.getAccessToken(weChatDto.getAppId(), weChatDto.getAppSecret());
  207. if (StringUtil.isEmpty(accessToken)) {
  208. logger.info("推送微信模板,获取accessToken失败:{}", accessToken);
  209. return;
  210. }
  211. String url = sendMsgUrl + accessToken;
  212. //根据 userId 查询到openId
  213. StaffAppAuthDto staffAppAuthDto = new StaffAppAuthDto();
  214. staffAppAuthDto.setStaffId(paramIn.getString("staffId"));
  215. staffAppAuthDto.setAppType("WECHAT");
  216. List<StaffAppAuthDto> staffAppAuthDtos = staffAppAuthInnerServiceSMO.queryStaffAppAuths(staffAppAuthDto);
  217. if (staffAppAuthDtos.size() > 0) {
  218. String openId = staffAppAuthDtos.get(0).getOpenId();
  219. Data data = new Data();
  220. PropertyFeeTemplateMessage templateMessage = new PropertyFeeTemplateMessage();
  221. templateMessage.setTemplate_id(templateId);
  222. templateMessage.setTouser(openId);
  223. data.setFirst(new Content("您有新的维修任务,维修信息如下:"));
  224. data.setKeyword1(new Content(paramIn.getString("repairName")));
  225. data.setKeyword2(new Content(paramIn.getString("tel")));
  226. data.setKeyword3(new Content(paramIn.getString("time")));
  227. data.setKeyword4(new Content(paramIn.getString("context") + "\r\n" + "报修位置:" + paramIn.getString("repairObjName")));
  228. data.setRemark(new Content(paramIn.getString("preStaffName") + "转单给您,请及时登录公众号接单确认!"));
  229. templateMessage.setData(data);
  230. //获取员工公众号地址
  231. String wechatUrl = MappingCache.getValue("STAFF_WECHAT_URL");
  232. templateMessage.setUrl(wechatUrl);
  233. logger.info("发送模板消息内容:{}", JSON.toJSONString(templateMessage));
  234. ResponseEntity<String> responseEntity = outRestTemplate.postForEntity(url, JSON.toJSONString(templateMessage), String.class);
  235. logger.info("微信模板返回内容:{}", responseEntity);
  236. }
  237. }
  238. /**
  239. * 派单给维修师傅推送信息
  240. *
  241. * @param paramIn
  242. * @param communityDto
  243. */
  244. private void sendMsg(JSONObject paramIn, CommunityDto communityDto) {
  245. //查询公众号配置
  246. SmallWeChatDto smallWeChatDto = new SmallWeChatDto();
  247. smallWeChatDto.setWeChatType("1100");
  248. smallWeChatDto.setObjType(SmallWeChatDto.OBJ_TYPE_COMMUNITY);
  249. smallWeChatDto.setObjId(communityDto.getCommunityId());
  250. List<SmallWeChatDto> smallWeChatDtos = smallWeChatInnerServiceSMOImpl.querySmallWeChats(smallWeChatDto);
  251. if (smallWeChatDto == null || smallWeChatDtos.size() <= 0) {
  252. logger.info("未配置微信公众号信息,定时任务执行结束");
  253. return;
  254. }
  255. SmallWeChatDto weChatDto = smallWeChatDtos.get(0);
  256. SmallWechatAttrDto smallWechatAttrDto = new SmallWechatAttrDto();
  257. smallWechatAttrDto.setCommunityId(communityDto.getCommunityId());
  258. smallWechatAttrDto.setWechatId(weChatDto.getWeChatId());
  259. smallWechatAttrDto.setSpecCd(SmallWechatAttrDto.SPEC_CD_WECHAT_DISPATCH_REMIND_TEMPLATE);
  260. List<SmallWechatAttrDto> smallWechatAttrDtos = smallWechatAttrInnerServiceSMOImpl.querySmallWechatAttrs(smallWechatAttrDto);
  261. if (smallWechatAttrDtos == null || smallWechatAttrDtos.size() <= 0) {
  262. logger.info("未配置微信公众号消息模板");
  263. return;
  264. }
  265. String templateId = smallWechatAttrDtos.get(0).getValue();
  266. String accessToken = WechatFactory.getAccessToken(weChatDto.getAppId(), weChatDto.getAppSecret());
  267. if (StringUtil.isEmpty(accessToken)) {
  268. logger.info("推送微信模板,获取accessToken失败:{}", accessToken);
  269. return;
  270. }
  271. //获取具体位置
  272. String address = "";
  273. if (communityDto.getName().equals(paramIn.getString("repairObjName"))) {
  274. address = paramIn.getString("repairObjName");
  275. } else {
  276. address = communityDto.getName() + paramIn.getString("repairObjName");
  277. }
  278. String url = sendMsgUrl + accessToken;
  279. //根据 userId 查询到openId
  280. StaffAppAuthDto staffAppAuthDto = new StaffAppAuthDto();
  281. staffAppAuthDto.setStaffId(paramIn.getString("staffId"));
  282. staffAppAuthDto.setAppType("WECHAT");
  283. List<StaffAppAuthDto> staffAppAuthDtos = staffAppAuthInnerServiceSMO.queryStaffAppAuths(staffAppAuthDto);
  284. if (staffAppAuthDtos.size() > 0) {
  285. String openId = staffAppAuthDtos.get(0).getOpenId();
  286. Data data = new Data();
  287. PropertyFeeTemplateMessage templateMessage = new PropertyFeeTemplateMessage();
  288. templateMessage.setTemplate_id(templateId);
  289. templateMessage.setTouser(openId);
  290. data.setFirst(new Content("您有新的维修任务,维修信息如下:"));
  291. data.setKeyword1(new Content(paramIn.getString("repairName")));
  292. data.setKeyword2(new Content(paramIn.getString("tel")));
  293. data.setKeyword3(new Content(paramIn.getString("time")));
  294. data.setKeyword4(new Content(paramIn.getString("context") + "\r\n" + "报修位置:" + address));
  295. data.setRemark(new Content("请及时登录公众号接单确认!"));
  296. templateMessage.setData(data);
  297. //获取员工公众号地址
  298. String wechatUrl = MappingCache.getValue("STAFF_WECHAT_URL");
  299. templateMessage.setUrl(wechatUrl);
  300. logger.info("发送模板消息内容:{}", JSON.toJSONString(templateMessage));
  301. ResponseEntity<String> responseEntity = outRestTemplate.postForEntity(url, JSON.toJSONString(templateMessage), String.class);
  302. logger.info("微信模板返回内容:{}", responseEntity);
  303. }
  304. }
  305. private void sendMsgToWechatGroup(JSONObject paramIn, CommunityDto communityDto) {
  306. //查询公众号配置
  307. String url = CommunitySettingFactory.getRemark(communityDto.getCommunityId(), "WECHAT_SEND_REPAIR_URL");
  308. if (StringUtil.isEmpty(url)) {
  309. return;
  310. }
  311. JSONObject rebootParam = new JSONObject();
  312. rebootParam.put("msgtype", "markdown");
  313. JSONObject rebootMarkdown = new JSONObject();
  314. rebootParam.put("markdown", rebootMarkdown);
  315. //获取具体位置
  316. String address = "";
  317. if (communityDto.getName().equals(paramIn.getString("repairObjName"))) {
  318. address = paramIn.getString("repairObjName");
  319. } else {
  320. address = communityDto.getName() + paramIn.getString("repairObjName");
  321. }
  322. //根据 userId 查询到openId
  323. UserDto userDto = new UserDto();
  324. userDto.setUserId(paramIn.getString("staffId"));
  325. List<UserDto> userDtos = userInnerServiceSMO.getUsers(userDto);
  326. String staffName = "";
  327. if (userDtos != null && userDtos.size() > 0) {
  328. staffName = userDtos.get(0).getName();
  329. }
  330. String content = staffName + " 您有新的维修任务,维修信息如下:\n";
  331. content += ("> 标题:<font color=\"comment\">" + paramIn.getString("repairName") + "</font> \n");
  332. content += ("> 电话:<font color=\"comment\">" + paramIn.getString("tel") + "</font> \n");
  333. content += ("> 时间:<font color=\"comment\">" + paramIn.getString("time") + "</font> \n");
  334. content += ("> 内容:<font color=\"comment\">" + paramIn.getString("context") + "</font> \n");
  335. content += ("> 位置:<font color=\"comment\">" + address + "</font> \n");
  336. content += ("> 单号:<font color=\"comment\">" + paramIn.getString("repairId") + "</font> \n");
  337. rebootMarkdown.put("content", content);
  338. logger.info("发送消息内容:{}", content);
  339. ResponseEntity<String> responseEntity = outRestTemplate.postForEntity(url, rebootParam.toJSONString(), String.class);
  340. logger.info("企业微信返回内容:{}", responseEntity);
  341. if (responseEntity.getStatusCode() != HttpStatus.OK) {
  342. return;
  343. }
  344. String imgUrl = MappingCache.getValue("IMG_PATH");
  345. imgUrl += (!StringUtil.isEmpty(imgUrl) && imgUrl.endsWith("/") ? "" : "/");
  346. FileRelDto fileRelDto = new FileRelDto();
  347. fileRelDto.setObjId(paramIn.getString("repairId"));
  348. List<FileRelDto> fileRelDtos = fileRelInnerServiceSMOImpl.queryFileRels(fileRelDto);
  349. if (fileRelDtos == null || fileRelDtos.size() < 1) {
  350. return;
  351. }
  352. rebootParam = JSONObject.parseObject(" {\n" +
  353. " \"msgtype\":\"image\",\n" +
  354. " \"image\":{\n" +
  355. " }\n" +
  356. " }");
  357. JSONObject image = rebootParam.getJSONObject("image");
  358. String imageUrl = "";
  359. for (FileRelDto tmpFileRelDto : fileRelDtos) {
  360. if (!tmpFileRelDto.getRelTypeCd().equals(FileRelDto.REL_TYPE_CD_REPAIR)) { //维修图片
  361. continue;
  362. }
  363. imageUrl = imgUrl + tmpFileRelDto.getFileRealName();
  364. image.put("base64", ImageUtils.getBase64ByImgUrl(imageUrl));
  365. image.put("md5", ImageUtils.getMd5ByImgUrl(imageUrl));
  366. responseEntity = outRestTemplate.postForEntity(url, rebootParam.toJSONString(), String.class);
  367. logger.debug("返回信息:"+responseEntity);
  368. }
  369. }
  370. /**
  371. * 派单(抢单)成功后给业主推送信息
  372. *
  373. * @param paramIn
  374. * @param communityDto
  375. */
  376. private void publishMsg(JSONObject paramIn, CommunityDto communityDto) {
  377. //查询公众号配置
  378. SmallWeChatDto smallWeChatDto = new SmallWeChatDto();
  379. smallWeChatDto.setWeChatType("1100");
  380. smallWeChatDto.setObjType(SmallWeChatDto.OBJ_TYPE_COMMUNITY);
  381. smallWeChatDto.setObjId(communityDto.getCommunityId());
  382. List<SmallWeChatDto> smallWeChatDtos = smallWeChatInnerServiceSMOImpl.querySmallWeChats(smallWeChatDto);
  383. if (smallWeChatDto == null || smallWeChatDtos.size() <= 0) {
  384. logger.info("未配置微信公众号信息,定时任务执行结束");
  385. return;
  386. }
  387. SmallWeChatDto weChatDto = smallWeChatDtos.get(0);
  388. SmallWechatAttrDto smallWechatAttrDto = new SmallWechatAttrDto();
  389. smallWechatAttrDto.setCommunityId(communityDto.getCommunityId());
  390. smallWechatAttrDto.setWechatId(weChatDto.getWeChatId());
  391. smallWechatAttrDto.setSpecCd(SmallWechatAttrDto.SPEC_CD_WECHAT_SCHEDULE_TEMPLATE);
  392. List<SmallWechatAttrDto> smallWechatAttrDtos = smallWechatAttrInnerServiceSMOImpl.querySmallWechatAttrs(smallWechatAttrDto);
  393. if (smallWechatAttrDtos == null || smallWechatAttrDtos.size() <= 0) {
  394. logger.info("未配置微信公众号消息模板");
  395. return;
  396. }
  397. String templateId = smallWechatAttrDtos.get(0).getValue();
  398. String accessToken = WechatFactory.getAccessToken(weChatDto.getAppId(), weChatDto.getAppSecret());
  399. if (StringUtil.isEmpty(accessToken)) {
  400. logger.info("推送微信模板,获取accessToken失败:{}", accessToken);
  401. return;
  402. }
  403. //查询维修员工信息
  404. UserDto userDto = new UserDto();
  405. userDto.setUserId(paramIn.getString("staffId"));
  406. userDto.setStatusCd("0");
  407. List<UserDto> users = userInnerServiceSMO.getUsers(userDto);
  408. //获取维修员工姓名
  409. String name = users.get(0).getName();
  410. //获取维修员工联系方式
  411. String tel = users.get(0).getTel();
  412. //获取用户id
  413. String preStaffId = paramIn.getString("preStaffId");
  414. if (!StringUtil.isEmpty(preStaffId)) {
  415. OwnerAppUserDto ownerAppUserDto = new OwnerAppUserDto();
  416. ownerAppUserDto.setUserId(preStaffId);
  417. ownerAppUserDto.setAppType("WECHAT");
  418. //查询绑定业主
  419. List<OwnerAppUserDto> ownerAppUserDtos = ownerAppUserInnerServiceSMO.queryOwnerAppUsers(ownerAppUserDto);
  420. if (ownerAppUserDtos.size() > 0) {
  421. //获取openId
  422. String openId = ownerAppUserDtos.get(0).getOpenId();
  423. String url = sendMsgUrl + accessToken;
  424. Data data = new Data();
  425. PropertyFeeTemplateMessage templateMessage = new PropertyFeeTemplateMessage();
  426. templateMessage.setTemplate_id(templateId);
  427. templateMessage.setTouser(openId);
  428. data.setFirst(new Content("您的报修受理成功,维修人员信息如下:"));
  429. data.setKeyword1(new Content(paramIn.getString("context")));
  430. data.setKeyword2(new Content(name));
  431. data.setKeyword3(new Content(tel));
  432. data.setKeyword4(new Content(paramIn.getString("time")));
  433. data.setRemark(new Content("您的报修已受理,请保持电话畅通,以便维修人员及时跟您取得联系!感谢您的使用!"));
  434. templateMessage.setData(data);
  435. //获取业主公众号地址
  436. String wechatUrl = MappingCache.getValue("OWNER_WECHAT_URL");
  437. templateMessage.setUrl(wechatUrl);
  438. logger.info("发送模板消息内容:{}", JSON.toJSONString(templateMessage));
  439. ResponseEntity<String> responseEntity = outRestTemplate.postForEntity(url, JSON.toJSONString(templateMessage), String.class);
  440. logger.info("微信模板返回内容:{}", responseEntity);
  441. }
  442. }
  443. }
  444. /**
  445. * 抢单成功后给维修师傅推送信息
  446. *
  447. * @param paramIn
  448. * @param communityDto
  449. */
  450. private void publishMessage(JSONObject paramIn, CommunityDto communityDto) {
  451. //查询公众号配置
  452. SmallWeChatDto smallWeChatDto = new SmallWeChatDto();
  453. smallWeChatDto.setWeChatType("1100");
  454. smallWeChatDto.setObjType(SmallWeChatDto.OBJ_TYPE_COMMUNITY);
  455. smallWeChatDto.setObjId(communityDto.getCommunityId());
  456. List<SmallWeChatDto> smallWeChatDtos = smallWeChatInnerServiceSMOImpl.querySmallWeChats(smallWeChatDto);
  457. if (smallWeChatDto == null || smallWeChatDtos.size() <= 0) {
  458. logger.info("未配置微信公众号信息,定时任务执行结束");
  459. return;
  460. }
  461. SmallWeChatDto weChatDto = smallWeChatDtos.get(0);
  462. SmallWechatAttrDto smallWechatAttrDto = new SmallWechatAttrDto();
  463. smallWechatAttrDto.setCommunityId(communityDto.getCommunityId());
  464. smallWechatAttrDto.setWechatId(weChatDto.getWeChatId());
  465. smallWechatAttrDto.setSpecCd(SmallWechatAttrDto.SPEC_CD_WECHAT_DISPATCH_REMIND_TEMPLATE);
  466. List<SmallWechatAttrDto> smallWechatAttrDtos = smallWechatAttrInnerServiceSMOImpl.querySmallWechatAttrs(smallWechatAttrDto);
  467. if (smallWechatAttrDtos == null || smallWechatAttrDtos.size() <= 0) {
  468. logger.info("未配置微信公众号消息模板");
  469. return;
  470. }
  471. String templateId = smallWechatAttrDtos.get(0).getValue();
  472. String accessToken = WechatFactory.getAccessToken(weChatDto.getAppId(), weChatDto.getAppSecret());
  473. if (StringUtil.isEmpty(accessToken)) {
  474. logger.info("推送微信模板,获取accessToken失败:{}", accessToken);
  475. return;
  476. }
  477. //获取具体位置
  478. String address = "";
  479. if (communityDto.getName().equals(paramIn.getString("repairObjName"))) {
  480. address = paramIn.getString("repairObjName");
  481. } else {
  482. address = communityDto.getName() + paramIn.getString("repairObjName");
  483. }
  484. //根据 userId 查询到openId
  485. StaffAppAuthDto staffAppAuthDto = new StaffAppAuthDto();
  486. staffAppAuthDto.setStaffId(paramIn.getString("staffId"));
  487. staffAppAuthDto.setAppType("WECHAT");
  488. List<StaffAppAuthDto> staffAppAuthDtos = staffAppAuthInnerServiceSMO.queryStaffAppAuths(staffAppAuthDto);
  489. String openId = staffAppAuthDtos.get(0).getOpenId();
  490. String url = sendMsgUrl + accessToken;
  491. Data data = new Data();
  492. PropertyFeeTemplateMessage templateMessage = new PropertyFeeTemplateMessage();
  493. templateMessage.setTemplate_id(templateId);
  494. templateMessage.setTouser(openId);
  495. data.setFirst(new Content("恭喜您抢单成功,报修信息如下:"));
  496. data.setKeyword1(new Content(paramIn.getString("repairName")));
  497. data.setKeyword2(new Content(paramIn.getString("tel")));
  498. data.setKeyword3(new Content(paramIn.getString("time")));
  499. data.setKeyword4(new Content(paramIn.getString("context") + "\r\n" + "报修位置:" + address));
  500. data.setRemark(new Content("请及时与客户取得联系!"));
  501. templateMessage.setData(data);
  502. //获取员工公众号地址
  503. String wechatUrl = MappingCache.getValue("STAFF_WECHAT_URL");
  504. templateMessage.setUrl(wechatUrl);
  505. logger.info("发送模板消息内容:{}", JSON.toJSONString(templateMessage));
  506. ResponseEntity<String> responseEntity = outRestTemplate.postForEntity(url, JSON.toJSONString(templateMessage), String.class);
  507. logger.info("微信模板返回内容:{}", responseEntity);
  508. }
  509. }