| | |
| | | package com.java110.job.adapt.Repair; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.java110.core.factory.CommunitySettingFactory; |
| | | import com.java110.core.factory.WechatFactory; |
| | | import com.java110.core.log.LoggerFactory; |
| | | import com.java110.dto.community.CommunityDto; |
| | | import com.java110.dto.file.FileRelDto; |
| | | import com.java110.dto.owner.OwnerAppUserDto; |
| | | import com.java110.dto.repair.RepairDto; |
| | | import com.java110.dto.repair.RepairUserDto; |
| | |
| | | import com.java110.entity.wechat.Content; |
| | | import com.java110.entity.wechat.Data; |
| | | import com.java110.entity.wechat.PropertyFeeTemplateMessage; |
| | | import com.java110.intf.common.IFileRelInnerServiceSMO; |
| | | import com.java110.intf.community.ICommunityInnerServiceSMO; |
| | | import com.java110.intf.community.IRepairInnerServiceSMO; |
| | | import com.java110.intf.community.IRepairUserInnerServiceSMO; |
| | |
| | | import com.java110.intf.user.IStaffAppAuthInnerServiceSMO; |
| | | import com.java110.intf.user.IUserInnerServiceSMO; |
| | | import com.java110.job.adapt.DatabusAdaptImpl; |
| | | import com.java110.po.owner.RepairUserPo; |
| | | import com.java110.utils.cache.MappingCache; |
| | | import com.java110.utils.util.ImageUtils; |
| | | import com.java110.utils.util.StringUtil; |
| | | import org.slf4j.Logger; |
| | | import com.java110.core.log.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.http.ResponseEntity; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.client.RestTemplate; |
| | |
| | | @Autowired |
| | | private IOwnerAppUserInnerServiceSMO ownerAppUserInnerServiceSMO; |
| | | |
| | | @Autowired |
| | | private IFileRelInnerServiceSMO fileRelInnerServiceSMOImpl; |
| | | |
| | | //模板信息推送地址 |
| | | private static String sendMsgUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="; |
| | | |
| | | @Override |
| | | public void execute(Business business, List<Business> businesses) { |
| | | JSONObject data = business.getData(); |
| | | JSONArray businessRepairUsers = new JSONArray(); |
| | | System.out.println("收到日志:>>>>>>>>>>>>>" + data.toJSONString()); |
| | | if (data.containsKey(RepairUserPo.class.getSimpleName())) { |
| | | Object bObj = data.get(RepairUserPo.class.getSimpleName()); |
| | | if (bObj instanceof JSONObject) { |
| | | businessRepairUsers.add(bObj); |
| | | } else if (bObj instanceof List) { |
| | | businessRepairUsers = JSONArray.parseArray(JSONObject.toJSONString(bObj)); |
| | | } else { |
| | | businessRepairUsers = (JSONArray) bObj; |
| | | } |
| | | } else { |
| | | if (data instanceof JSONObject) { |
| | | businessRepairUsers.add(data); |
| | | } |
| | | } |
| | | for (int bOwnerRepairIndex = 0; bOwnerRepairIndex < businessRepairUsers.size(); bOwnerRepairIndex++) { |
| | | JSONObject businessRepairUser = businessRepairUsers.getJSONObject(bOwnerRepairIndex); |
| | | doDealOwnerRepair(businesses, businessRepairUser); |
| | | } |
| | | } |
| | | |
| | | private void doDealOwnerRepair(List<Business> businesses, JSONObject businessRepairUser) { |
| | | RepairUserDto repairUserDto = new RepairUserDto(); |
| | | repairUserDto.setbId(business.getbId()); |
| | | repairUserDto.setStatusCd("0"); |
| | | repairUserDto.setRuId(businessRepairUser.getString("ruId")); |
| | | List<RepairUserDto> repairUserDtos = repairUserInnerServiceSMO.queryRepairUsers(repairUserDto); |
| | | //获取员工处理状态(10001 处理中;10002 结单;10003 退单;10004 转单;10005 提交) |
| | | //获取员工处理状态(10001 处理中;10002 结单;10003 退单;10004 转单;10005 提交;10006 已派单;10007 已评价;10008 已回访;10009 待支付;11000 待评价;12000 已支付;12001 暂停) |
| | | String state = repairUserDtos.get(0).getState(); |
| | | if (!state.equals("10005")) { |
| | | //获取报修id |
| | | String repairId = repairUserDtos.get(0).getRepairId(); |
| | | RepairDto repairDto = new RepairDto(); |
| | | repairDto.setRepairId(repairId); |
| | | repairDto.setStatusCd("0"); |
| | | List<RepairDto> repairDtos = repairInnerServiceSMO.queryRepairs(repairDto); |
| | | //查询报修状态(1000 未派单;1100 接单;1200 退单;1300 转单;1400 申请支付;1500 支付失败;1700 待评价;1800 电话回访;1900 办理完成;2000 未办理结单) |
| | | String repairState = repairDtos.get(0).getState(); |
| | |
| | | CommunityDto communityDto = new CommunityDto(); |
| | | communityDto.setCommunityId(communityId); |
| | | List<CommunityDto> communityDtos = communityInnerServiceSMO.queryCommunitys(communityDto); |
| | | //派单方式(100表示抢单;200表示指派;300表示轮训) |
| | | String repairWay = repairDtos.get(0).getRepairWay(); |
| | | if (repairState.equals("1100") && repairWay.equals("200")) { |
| | | //获取维修员工的id |
| | | String staffId = repairUserDtos.get(1).getStaffId(); |
| | | //获取用户id |
| | | String preStaffId = repairUserDtos.get(0).getPreStaffId(); |
| | | if (repairState.equals("1100") && businessRepairUser.getString("state").equals("10006")) { //派单 |
| | | JSONObject paramIn = new JSONObject(); |
| | | for (Business business : businesses) { |
| | | String businessTypeCd = business.getBusinessTypeCd(); |
| | | if (!StringUtil.isEmpty(businessTypeCd) && businessTypeCd.equals("130200030001")) { |
| | | JSONObject data = business.getData(); |
| | | if (!StringUtil.isEmpty(data.getString("state")) && data.getString("state").equals("10001")) { |
| | | paramIn.put("staffId", data.getString("staffId")); |
| | | paramIn.put("staffName", data.getString("staffName")); |
| | | } else if (data.getString("state").equals("10006")) { |
| | | paramIn.put("preStaffId", data.getString("preStaffId")); |
| | | paramIn.put("preStaffName", data.getString("preStaffName")); |
| | | } |
| | | } |
| | | } |
| | | paramIn.put("repairName", repairName); |
| | | paramIn.put("repairObjName", repairObjName); |
| | | paramIn.put("tel", tel); |
| | | paramIn.put("communityId", communityId); |
| | | paramIn.put("context", context); |
| | | paramIn.put("time", time); |
| | | paramIn.put("staffId", staffId); |
| | | paramIn.put("repairObjId", repairObjId); |
| | | paramIn.put("preStaffId", preStaffId); |
| | | paramIn.put("repairId", repairId); |
| | | //给维修师傅推送信息 |
| | | sendMsg(paramIn, communityDtos.get(0)); |
| | | //派单成功给业主推送信息 |
| | | publishMsg(paramIn, communityDtos.get(0)); |
| | | } else if (repairState.equals("1100") && (repairWay.equals("100") || repairWay.equals("300"))) { |
| | | String staffId = ""; |
| | | if (repairUserDtos.size() > 1) { |
| | | staffId = repairUserDtos.get(1).getStaffId(); |
| | | } else { |
| | | //获取维修员工的id |
| | | staffId = repairUserDtos.get(0).getStaffId(); |
| | | } |
| | | //获取用户id |
| | | String preStaffId = repairUserDtos.get(0).getPreStaffId(); |
| | | //为企业微信群发消息 |
| | | sendMsgToWechatGroup(paramIn, communityDtos.get(0)); |
| | | } else if (repairState.equals("1100") && !businessRepairUser.getString("state").equals("10006")) { |
| | | JSONObject paramIn = new JSONObject(); |
| | | paramIn.put("staffId", staffId); |
| | | paramIn.put("staffId", businessRepairUser.getString("staffId")); |
| | | paramIn.put("context", context); |
| | | paramIn.put("time", time); |
| | | paramIn.put("repairObjId", repairObjId); |
| | | paramIn.put("preStaffId", preStaffId); |
| | | paramIn.put("preStaffId", businessRepairUser.getString("preStaffId")); |
| | | paramIn.put("repairName", repairName); |
| | | paramIn.put("tel", tel); |
| | | paramIn.put("repairObjName", repairObjName); |
| | | //抢单成功给维修师傅推送信息 |
| | | publishMessage(paramIn, communityDtos.get(0)); |
| | | //抢单成功给业主推送信息 |
| | | publishMsg(paramIn, communityDtos.get(0)); |
| | | if (repairUserDtos.size() > 1) { |
| | | //给维修师傅推送信息 |
| | | sendMsg(paramIn, communityDtos.get(0)); |
| | | } else { |
| | | //抢单成功给维修师傅推送信息 |
| | | publishMessage(paramIn, communityDtos.get(0)); |
| | | } |
| | | } else if (repairState.equals("1300")) { //转单 |
| | | //获取维修员工id |
| | | String staffId = repairUserDtos.get(0).getStaffId(); |
| | | //获取上级用户姓名 |
| | | String preStaffName = repairUserDtos.get(0).getPreStaffName(); |
| | | JSONObject paramIn = new JSONObject(); |
| | | paramIn.put("repairName", repairName); |
| | | paramIn.put("repairObjName", repairObjName); |
| | | paramIn.put("tel", tel); |
| | | paramIn.put("context", context); |
| | | paramIn.put("time", time); |
| | | paramIn.put("staffId", staffId); |
| | | paramIn.put("preStaffName", preStaffName); |
| | | paramIn.put("staffId", businessRepairUser.getString("staffId")); |
| | | paramIn.put("preStaffName", businessRepairUser.getString("preStaffName")); |
| | | //给维修师傅推送信息 |
| | | sendMessage(paramIn, communityDtos.get(0)); |
| | | } |
| | |
| | | //根据 userId 查询到openId |
| | | StaffAppAuthDto staffAppAuthDto = new StaffAppAuthDto(); |
| | | staffAppAuthDto.setStaffId(paramIn.getString("staffId")); |
| | | staffAppAuthDto.setStaffName(paramIn.getString("staffName")); |
| | | staffAppAuthDto.setAppType("WECHAT"); |
| | | List<StaffAppAuthDto> staffAppAuthDtos = staffAppAuthInnerServiceSMO.queryStaffAppAuths(staffAppAuthDto); |
| | | if (staffAppAuthDtos.size() > 0) { |
| | |
| | | logger.info("微信模板返回内容:{}", responseEntity); |
| | | } |
| | | } |
| | | |
| | | |
| | | private void sendMsgToWechatGroup(JSONObject paramIn, CommunityDto communityDto) { |
| | | |
| | | //查询公众号配置 |
| | | String url = CommunitySettingFactory.getRemark(communityDto.getCommunityId(), "WECHAT_SEND_REPAIR_URL"); |
| | | if (StringUtil.isEmpty(url)) { |
| | | return; |
| | | } |
| | | |
| | | JSONObject rebootParam = new JSONObject(); |
| | | rebootParam.put("msgtype", "markdown"); |
| | | JSONObject rebootMarkdown = new JSONObject(); |
| | | rebootParam.put("markdown", rebootMarkdown); |
| | | |
| | | |
| | | //获取具体位置 |
| | | String address = ""; |
| | | if (communityDto.getName().equals(paramIn.getString("repairObjName"))) { |
| | | address = paramIn.getString("repairObjName"); |
| | | } else { |
| | | address = communityDto.getName() + paramIn.getString("repairObjName"); |
| | | } |
| | | |
| | | //根据 userId 查询到openId |
| | | UserDto userDto = new UserDto(); |
| | | userDto.setUserId(paramIn.getString("staffId")); |
| | | List<UserDto> userDtos = userInnerServiceSMO.getUsers(userDto); |
| | | String staffName = ""; |
| | | if (userDtos != null && userDtos.size() > 0) { |
| | | staffName = userDtos.get(0).getName(); |
| | | } |
| | | String content = staffName + " 您有新的维修任务,维修信息如下:\n"; |
| | | |
| | | content += ("> 标题:<font color=\"comment\">" + paramIn.getString("repairName") + "</font> \n"); |
| | | content += ("> 电话:<font color=\"comment\">" + paramIn.getString("tel") + "</font> \n"); |
| | | content += ("> 时间:<font color=\"comment\">" + paramIn.getString("time") + "</font> \n"); |
| | | content += ("> 内容:<font color=\"comment\">" + paramIn.getString("context") + "</font> \n"); |
| | | content += ("> 位置:<font color=\"comment\">" + address + "</font> \n"); |
| | | content += ("> 单号:<font color=\"comment\">" + paramIn.getString("repairId") + "</font> \n"); |
| | | |
| | | rebootMarkdown.put("content", content); |
| | | logger.info("发送消息内容:{}", content); |
| | | ResponseEntity<String> responseEntity = outRestTemplate.postForEntity(url, rebootParam.toJSONString(), String.class); |
| | | logger.info("企业微信返回内容:{}", responseEntity); |
| | | |
| | | |
| | | if (responseEntity.getStatusCode() != HttpStatus.OK) { |
| | | return; |
| | | } |
| | | |
| | | String imgUrl = MappingCache.getValue("IMG_PATH"); |
| | | FileRelDto fileRelDto = new FileRelDto(); |
| | | fileRelDto.setObjId(paramIn.getString("repairId")); |
| | | List<FileRelDto> fileRelDtos = fileRelInnerServiceSMOImpl.queryFileRels(fileRelDto); |
| | | |
| | | if (fileRelDtos == null || fileRelDtos.size() < 1) { |
| | | return; |
| | | } |
| | | |
| | | rebootParam = JSONObject.parseObject(" {\n" + |
| | | " \"msgtype\":\"image\",\n" + |
| | | " \"image\":{\n" + |
| | | " }\n" + |
| | | " }"); |
| | | |
| | | |
| | | JSONObject image = rebootParam.getJSONObject("image"); |
| | | |
| | | String imageUrl = ""; |
| | | for (FileRelDto tmpFileRelDto : fileRelDtos) { |
| | | |
| | | if (!tmpFileRelDto.getRelTypeCd().equals(FileRelDto.REL_TYPE_CD_REPAIR)) { //维修图片 |
| | | continue; |
| | | } |
| | | imageUrl = imgUrl + tmpFileRelDto.getFileRealName(); |
| | | image.put("base64", ImageUtils.getBase64ByImgUrl(imageUrl)); |
| | | image.put("md5", ImageUtils.getMd5ByImgUrl(imageUrl)); |
| | | responseEntity = outRestTemplate.postForEntity(url, rebootParam.toJSONString(), String.class); |
| | | logger.debug("返回信息:" + responseEntity); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 派单(抢单)成功后给业主推送信息 |
| | |
| | | templateMessage.setData(data); |
| | | //获取业主公众号地址 |
| | | String wechatUrl = MappingCache.getValue("OWNER_WECHAT_URL"); |
| | | if (!StringUtil.isEmpty(wechatUrl) && wechatUrl.contains("?")) { |
| | | wechatUrl += ("&wAppId=" + weChatDto.getAppId()); |
| | | } else { |
| | | wechatUrl += ("?wAppId=" + weChatDto.getAppId()); |
| | | } |
| | | |
| | | templateMessage.setUrl(wechatUrl); |
| | | logger.info("发送模板消息内容:{}", JSON.toJSONString(templateMessage)); |
| | | ResponseEntity<String> responseEntity = outRestTemplate.postForEntity(url, JSON.toJSONString(templateMessage), String.class); |