package com.java110.job.msgNotify.ali; import com.alibaba.fastjson.JSONObject; import com.aliyuncs.CommonRequest; import com.aliyuncs.CommonResponse; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.http.MethodType; import com.aliyuncs.profile.DefaultProfile; import com.java110.core.factory.AliSendMessageFactory; import com.java110.core.factory.CommunitySettingFactory; import com.java110.core.factory.LogFactory; import com.java110.core.log.LoggerFactory; import com.java110.dto.owner.OwnerDto; import com.java110.dto.user.StaffAppAuthDto; import com.java110.dto.user.UserDto; import com.java110.intf.user.IOwnerV1InnerServiceSMO; import com.java110.intf.user.IStaffAppAuthInnerServiceSMO; import com.java110.intf.user.IUserV1InnerServiceSMO; import com.java110.job.msgNotify.IMsgNotify; import com.java110.utils.cache.MappingCache; import com.java110.utils.util.Assert; import com.java110.utils.util.DateUtil; import com.java110.utils.util.StringUtil; import com.java110.vo.ResultVo; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.Date; import java.util.List; @Service("aliMsgNotifyImpl") public class AliMsgNotifyImpl implements IMsgNotify { private final static Logger logger = LoggerFactory.getLogger(AliMsgNotifyImpl.class); @Autowired private IOwnerV1InnerServiceSMO ownerV1InnerServiceSMOImpl; @Autowired private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl; @Override public ResultVo sendApplyReturnFeeMsg(String communityId, String userId, JSONObject content) { return null; } /** * 发送欠费 账单信息 *

* 需要在阿里云 申请短信模板为 * 尊敬的业主,您${house}的账单已生成,缴费金额:${mount}元,请及时缴费 * * @param communityId 小区 * @param userId 用户 * @param contents [{ * "feeTypeName", * "payerObjName", * "billAmountOwed", * "date", * url * }] * @return */ @Override public ResultVo sendOweFeeMsg(String communityId, String userId, String ownerId, List contents) { if (StringUtil.isEmpty(ownerId) || ownerId.startsWith("-")) { throw new IllegalArgumentException("业主不存在,ownerId = " + ownerId); } OwnerDto ownerDto = new OwnerDto(); ownerDto.setMemberId(ownerId); ownerDto.setCommunityId(communityId); List ownerDtos = ownerV1InnerServiceSMOImpl.queryOwners(ownerDto); Assert.listOnlyOne(ownerDtos, "业主不存在,ownerId = " + ownerId); String accessKeyId = CommunitySettingFactory.getValue(communityId, "ALI_ACCESS_KEY_ID"); String accessSecret = CommunitySettingFactory.getValue(communityId, "ALI_ACCESS_SECRET"); String region = CommunitySettingFactory.getValue(communityId, "ALI_REGION"); String signName = CommunitySettingFactory.getValue(communityId, "ALI_SIGN_NAME"); String templateCode = CommunitySettingFactory.getValue(communityId, "ALI_OWE_TEMPLATE_CODE"); DefaultProfile profile = DefaultProfile.getProfile(region, accessKeyId, accessSecret); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setSysMethod(MethodType.POST); request.setSysDomain("dysmsapi.aliyuncs.com"); request.setSysVersion("2017-05-25"); request.setSysAction("SendSms"); request.putQueryParameter("RegionId", region); request.putQueryParameter("PhoneNumbers", ownerDtos.get(0).getLink()); request.putQueryParameter("SignName", signName); request.putQueryParameter("TemplateCode", templateCode); BigDecimal oweFee = new BigDecimal(0); Date startDate = null; Date endDate = null; Date tmpStartDate = null; Date tmpEndDate = null; for (JSONObject content : contents) { oweFee = oweFee.add(new BigDecimal(content.getDouble("billAmountOwed"))).setScale(2, BigDecimal.ROUND_HALF_UP); tmpStartDate = DateUtil.getDateFromStringB(content.getString("date").split("~")[0]); tmpEndDate = DateUtil.getDateFromStringB(content.getString("date").split("~")[1]); if (startDate == null) { startDate = tmpStartDate; endDate = tmpEndDate; continue; } if (startDate.getTime() > tmpStartDate.getTime()) { startDate = tmpStartDate; } if (endDate.getTime() < tmpEndDate.getTime()) { endDate = tmpEndDate; } } JSONObject param = new JSONObject(); param.put("house", contents.get(0).getString("payerObjName")); // param.put("feeType", content.getString("feeTypeName")); param.put("date", DateUtil.getFormatTimeStringB(startDate)); param.put("date2", DateUtil.getFormatTimeStringB(endDate)); param.put("mount", oweFee.doubleValue()); request.putQueryParameter("TemplateParam", param.toString()); String resParam = ""; try { CommonResponse response = client.getCommonResponse(request); logger.debug("发送验证码信息:{}", response.getData()); resParam = response.getData(); } catch (Exception e) { e.printStackTrace(); resParam = e.getMessage(); throw new IllegalArgumentException("短信催缴失败" + e.getMessage()); } finally { LogFactory.saveOutLog("SMS", param.toString(), new ResponseEntity(resParam, HttpStatus.OK)); } return new ResultVo(ResultVo.CODE_OK, "成功"); } @Override public ResultVo sendPayFeeMsg(String communityId, String userId, JSONObject content, String role) { return null; } /** * 发送内容 尊敬的员工,您有一个报修单需要处理,单号为{repairId},请您及时处理 * * @param communityId 小区 * @param userId 用户 * @param content { * repairId, * repairTypeName, * repairObjName, * repairName, * url * } * @return */ @Override public ResultVo sendAddOwnerRepairMsg(String communityId, String userId, JSONObject content) { if (StringUtil.isEmpty(userId) || userId.startsWith("-")) { throw new IllegalArgumentException("员工不存在,userId = " + userId); } UserDto userDto = new UserDto(); userDto.setUserId(userId); List userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto); if (userDtos == null || userDtos.size() < 1) { throw new IllegalArgumentException("员工不存在"); } String accessKeyId = CommunitySettingFactory.getValue(communityId, "ALI_ACCESS_KEY_ID"); String accessSecret = CommunitySettingFactory.getValue(communityId, "ALI_ACCESS_SECRET"); String region = CommunitySettingFactory.getValue(communityId, "ALI_REGION"); String signName = CommunitySettingFactory.getValue(communityId, "ALI_SIGN_NAME"); String templateCode = CommunitySettingFactory.getValue(communityId, "ALI_REPAIR_TEMPLATE_CODE"); DefaultProfile profile = DefaultProfile.getProfile(region, accessKeyId, accessSecret); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setSysMethod(MethodType.POST); request.setSysDomain("dysmsapi.aliyuncs.com"); request.setSysVersion("2017-05-25"); request.setSysAction("SendSms"); request.putQueryParameter("RegionId", region); request.putQueryParameter("PhoneNumbers", userDtos.get(0).getTel()); request.putQueryParameter("SignName", signName); request.putQueryParameter("TemplateCode", templateCode); JSONObject param = new JSONObject(); param.put("repairId", content.getString("repairId")); request.putQueryParameter("TemplateParam", param.toString()); String resParam = ""; try { CommonResponse response = client.getCommonResponse(request); logger.debug("发送验证码信息:{}", response.getData()); resParam = response.getData(); } catch (Exception e) { e.printStackTrace(); resParam = e.getMessage(); throw new IllegalArgumentException("短信工单失败" + e.getMessage()); } finally { LogFactory.saveOutLog("SMS", param.toString(), new ResponseEntity(resParam, HttpStatus.OK)); } return new ResultVo(ResultVo.CODE_OK, "成功"); } /** * 发送内容 尊敬的员工,您有一个报修单需要处理,单号为{repairId},请您及时处理 * @param communityId 小区 * @param userId 用户 * @param content { * repairId, * repairName, * tel, * time, * address * } * @return */ @Override public ResultVo sendDistributeRepairStaffMsg(String communityId, String userId, JSONObject content) { if (StringUtil.isEmpty(userId) || userId.startsWith("-")) { throw new IllegalArgumentException("员工不存在,userId = " + userId); } UserDto userDto = new UserDto(); userDto.setUserId(userId); List userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto); if (userDtos == null || userDtos.size() < 1) { throw new IllegalArgumentException("员工不存在"); } String accessKeyId = CommunitySettingFactory.getValue(communityId, "ALI_ACCESS_KEY_ID"); String accessSecret = CommunitySettingFactory.getValue(communityId, "ALI_ACCESS_SECRET"); String region = CommunitySettingFactory.getValue(communityId, "ALI_REGION"); String signName = CommunitySettingFactory.getValue(communityId, "ALI_SIGN_NAME"); String templateCode = CommunitySettingFactory.getValue(communityId, "ALI_REPAIR_TEMPLATE_CODE"); DefaultProfile profile = DefaultProfile.getProfile(region, accessKeyId, accessSecret); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setSysMethod(MethodType.POST); request.setSysDomain("dysmsapi.aliyuncs.com"); request.setSysVersion("2017-05-25"); request.setSysAction("SendSms"); request.putQueryParameter("RegionId", region); request.putQueryParameter("PhoneNumbers", userDtos.get(0).getTel()); request.putQueryParameter("SignName", signName); request.putQueryParameter("TemplateCode", templateCode); JSONObject param = new JSONObject(); param.put("repairId", content.getString("repairId")); request.putQueryParameter("TemplateParam", param.toString()); String resParam = ""; try { CommonResponse response = client.getCommonResponse(request); logger.debug("发送验证码信息:{}", response.getData()); resParam = response.getData(); } catch (Exception e) { e.printStackTrace(); resParam = e.getMessage(); throw new IllegalArgumentException("短信工单失败" + e.getMessage()); } finally { LogFactory.saveOutLog("SMS", param.toString(), new ResponseEntity(resParam, HttpStatus.OK)); } return new ResultVo(ResultVo.CODE_OK, "成功"); } @Override public ResultVo sendDistributeRepairOwnerMsg(String communityId, String userId, JSONObject content) { return new ResultVo(ResultVo.CODE_OK,"成功"); } @Override public ResultVo sendFinishRepairOwnerMsg(String communityId, String userId, JSONObject content) { return new ResultVo(ResultVo.CODE_OK,"成功"); } /** * * @param communityId 小区 * @param userId 用户 * @param content { * repairTypeName, * repairObjName, * repairName, * url * } * @return */ @Override public ResultVo sendReturnRepairMsg(String communityId, String userId, JSONObject content) { if (StringUtil.isEmpty(userId) || userId.startsWith("-")) { throw new IllegalArgumentException("员工不存在,userId = " + userId); } UserDto userDto = new UserDto(); userDto.setUserId(userId); List userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto); if (userDtos == null || userDtos.size() < 1) { throw new IllegalArgumentException("员工不存在"); } String accessKeyId = CommunitySettingFactory.getValue(communityId, "ALI_ACCESS_KEY_ID"); String accessSecret = CommunitySettingFactory.getValue(communityId, "ALI_ACCESS_SECRET"); String region = CommunitySettingFactory.getValue(communityId, "ALI_REGION"); String signName = CommunitySettingFactory.getValue(communityId, "ALI_SIGN_NAME"); String templateCode = CommunitySettingFactory.getValue(communityId, "ALI_REPAIR_TEMPLATE_CODE"); DefaultProfile profile = DefaultProfile.getProfile(region, accessKeyId, accessSecret); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setSysMethod(MethodType.POST); request.setSysDomain("dysmsapi.aliyuncs.com"); request.setSysVersion("2017-05-25"); request.setSysAction("SendSms"); request.putQueryParameter("RegionId", region); request.putQueryParameter("PhoneNumbers", userDtos.get(0).getTel()); request.putQueryParameter("SignName", signName); request.putQueryParameter("TemplateCode", templateCode); JSONObject param = new JSONObject(); param.put("repairId", content.getString("repairId")); request.putQueryParameter("TemplateParam", param.toString()); String resParam = ""; try { CommonResponse response = client.getCommonResponse(request); logger.debug("发送验证码信息:{}", response.getData()); resParam = response.getData(); } catch (Exception e) { e.printStackTrace(); resParam = e.getMessage(); throw new IllegalArgumentException("短信工单失败" + e.getMessage()); } finally { LogFactory.saveOutLog("SMS", param.toString(), new ResponseEntity(resParam, HttpStatus.OK)); } return new ResultVo(ResultVo.CODE_OK, "成功"); } /** * 待处理 * @param communityId 小区 * @param userId 用户 * @param content { * flowName, * create_user_name, * create_time, * url * } * @return */ @Override public ResultVo sendOaDistributeMsg(String communityId, String userId, JSONObject content) { if (StringUtil.isEmpty(userId) || userId.startsWith("-")) { throw new IllegalArgumentException("员工不存在,userId = " + userId); } UserDto userDto = new UserDto(); userDto.setUserId(userId); List userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto); if (userDtos == null || userDtos.size() < 1) { throw new IllegalArgumentException("员工不存在"); } String accessKeyId = CommunitySettingFactory.getValue(communityId, "ALI_ACCESS_KEY_ID"); String accessSecret = CommunitySettingFactory.getValue(communityId, "ALI_ACCESS_SECRET"); String region = CommunitySettingFactory.getValue(communityId, "ALI_REGION"); String signName = CommunitySettingFactory.getValue(communityId, "ALI_SIGN_NAME"); String templateCode = CommunitySettingFactory.getValue(communityId, "ALI_OA_UNDO_TEMPLATE_CODE"); DefaultProfile profile = DefaultProfile.getProfile(region, accessKeyId, accessSecret); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setSysMethod(MethodType.POST); request.setSysDomain("dysmsapi.aliyuncs.com"); request.setSysVersion("2017-05-25"); request.setSysAction("SendSms"); request.putQueryParameter("RegionId", region); request.putQueryParameter("PhoneNumbers", userDtos.get(0).getTel()); request.putQueryParameter("SignName", signName); request.putQueryParameter("TemplateCode", templateCode); JSONObject param = new JSONObject(); param.put("orderId", content.getString("orderId")); request.putQueryParameter("TemplateParam", param.toString()); String resParam = ""; try { CommonResponse response = client.getCommonResponse(request); logger.debug("发送验证码信息:{}", response.getData()); resParam = response.getData(); } catch (Exception e) { e.printStackTrace(); resParam = e.getMessage(); throw new IllegalArgumentException("短信工单失败" + e.getMessage()); } finally { LogFactory.saveOutLog("SMS", param.toString(), new ResponseEntity(resParam, HttpStatus.OK)); } return new ResultVo(ResultVo.CODE_OK, "成功"); } @Override public ResultVo sendOaCreateStaffMsg(String communityId, String userId, JSONObject content) { if (StringUtil.isEmpty(userId) || userId.startsWith("-")) { throw new IllegalArgumentException("员工不存在,userId = " + userId); } UserDto userDto = new UserDto(); userDto.setUserId(userId); List userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto); if (userDtos == null || userDtos.size() < 1) { throw new IllegalArgumentException("员工不存在"); } String accessKeyId = CommunitySettingFactory.getValue(communityId, "ALI_ACCESS_KEY_ID"); String accessSecret = CommunitySettingFactory.getValue(communityId, "ALI_ACCESS_SECRET"); String region = CommunitySettingFactory.getValue(communityId, "ALI_REGION"); String signName = CommunitySettingFactory.getValue(communityId, "ALI_SIGN_NAME"); String templateCode = CommunitySettingFactory.getValue(communityId, "ALI_OA_FINISH_TEMPLATE_CODE"); DefaultProfile profile = DefaultProfile.getProfile(region, accessKeyId, accessSecret); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setSysMethod(MethodType.POST); request.setSysDomain("dysmsapi.aliyuncs.com"); request.setSysVersion("2017-05-25"); request.setSysAction("SendSms"); request.putQueryParameter("RegionId", region); request.putQueryParameter("PhoneNumbers", userDtos.get(0).getTel()); request.putQueryParameter("SignName", signName); request.putQueryParameter("TemplateCode", templateCode); JSONObject param = new JSONObject(); param.put("orderId", content.getString("orderId")); request.putQueryParameter("TemplateParam", param.toString()); String resParam = ""; try { CommonResponse response = client.getCommonResponse(request); logger.debug("发送验证码信息:{}", response.getData()); resParam = response.getData(); } catch (Exception e) { e.printStackTrace(); resParam = e.getMessage(); throw new IllegalArgumentException("短信工单失败" + e.getMessage()); } finally { LogFactory.saveOutLog("SMS", param.toString(), new ResponseEntity(resParam, HttpStatus.OK)); } return new ResultVo(ResultVo.CODE_OK, "成功"); } }