| | |
| | | package com.java110.job.task.wechat; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.java110.core.factory.GenerateCodeFactory; |
| | | import com.java110.core.factory.SendSmsFactory; |
| | | import com.java110.core.factory.WechatFactory; |
| | | import com.java110.dto.community.CommunityDto; |
| | | import com.java110.dto.fee.FeeDto; |
| | | import com.java110.dto.feeCollectionOrder.FeeCollectionOrderDto; |
| | | import com.java110.dto.logSystemError.LogSystemErrorDto; |
| | | import com.java110.dto.owner.OwnerAppUserDto; |
| | | import com.java110.dto.owner.OwnerDto; |
| | | import com.java110.dto.reportOweFee.ReportOweFeeDto; |
| | | import com.java110.dto.reportOweFee.ReportOweFeeItemDto; |
| | | import com.java110.dto.smallWeChat.SmallWeChatDto; |
| | | import com.java110.dto.smallWechatAttr.SmallWechatAttrDto; |
| | | import com.java110.dto.smsConfig.SmsConfigDto; |
| | | import com.java110.dto.task.TaskDto; |
| | | import com.java110.entity.wechat.Content; |
| | | import com.java110.entity.wechat.Data; |
| | | import com.java110.entity.wechat.Miniprogram; |
| | | import com.java110.entity.wechat.PropertyFeeTemplateMessage; |
| | | import com.java110.intf.common.ISmsConfigInnerServiceSMO; |
| | | import com.java110.intf.fee.IFeeCollectionDetailInnerServiceSMO; |
| | | import com.java110.intf.fee.IFeeCollectionOrderInnerServiceSMO; |
| | | import com.java110.intf.fee.IFeeInnerServiceSMO; |
| | | import com.java110.intf.report.IReportOweFeeInnerServiceSMO; |
| | | import com.java110.intf.store.ISmallWeChatInnerServiceSMO; |
| | | import com.java110.intf.store.ISmallWechatAttrInnerServiceSMO; |
| | | import com.java110.intf.user.IOwnerAppUserInnerServiceSMO; |
| | | import com.java110.intf.user.IOwnerInnerServiceSMO; |
| | | import com.java110.job.quartz.TaskSystemQuartz; |
| | | import com.java110.po.feeCollectionDetail.FeeCollectionDetailPo; |
| | | import com.java110.po.feeCollectionOrder.FeeCollectionOrderPo; |
| | | import com.java110.po.logSystemError.LogSystemErrorPo; |
| | | import com.java110.service.smo.ISaveSystemErrorSMO; |
| | | import com.java110.utils.cache.MappingCache; |
| | | import com.java110.utils.constant.WechatConstant; |
| | | import com.java110.utils.util.BeanConvertUtil; |
| | | import com.java110.utils.util.DateUtil; |
| | | import com.java110.utils.util.ExceptionUtil; |
| | | import com.java110.utils.util.StringUtil; |
| | | import com.java110.vo.ResultVo; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | |
| | | /** |
| | |
| | | private IOwnerAppUserInnerServiceSMO ownerAppUserInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IOwnerInnerServiceSMO ownerInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IFeeCollectionOrderInnerServiceSMO feeCollectionOrderInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IFeeCollectionDetailInnerServiceSMO feeCollectionDetailInnerServiceSMOImpl; |
| | | |
| | | |
| | | @Autowired |
| | | private IReportOweFeeInnerServiceSMO reportOweFeeInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private ISmsConfigInnerServiceSMO smsConfigInnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private RestTemplate outRestTemplate; |
| | |
| | | |
| | | double maxPage = Math.ceil(oweCount / DEFAULT_FEE_COUNT); |
| | | |
| | | for (int roomIndex = 0; roomIndex < maxPage; roomIndex++) { |
| | | for (int roomIndex = 1; roomIndex <= maxPage; roomIndex++) { |
| | | try { |
| | | doReportOweFeePushMessage(roomIndex * DEFAULT_FEE_COUNT, (roomIndex + 1) * DEFAULT_FEE_COUNT, communityDto, feeCollectionOrderDtos.get(0)); |
| | | doReportOweFeePushMessage(roomIndex, DEFAULT_FEE_COUNT, communityDto, feeCollectionOrderDtos.get(0)); |
| | | FeeCollectionOrderPo feeCollectionOrderPo = BeanConvertUtil.covertBean(feeCollectionOrderDtos.get(0), FeeCollectionOrderPo.class); |
| | | feeCollectionOrderPo.setState("F"); |
| | | feeCollectionOrderInnerServiceSMOImpl.updateFeeCollectionOrder(feeCollectionOrderPo); |
| | | } catch (Exception e) { |
| | | LogSystemErrorPo logSystemErrorPo = new LogSystemErrorPo(); |
| | | logSystemErrorPo.setErrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_errId)); |
| | |
| | | logger.error("欠费推送失败" + communityDto.getCommunityId(), e); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | private void doReportOweFeePushMessage(int page, int row, CommunityDto communityDto, FeeCollectionOrderDto feeCollectionOrderDto) { |
| | |
| | | reportOweFeeDto.setRow(row); |
| | | List<ReportOweFeeDto> reportOweFeeDtos = reportOweFeeInnerServiceSMOImpl.queryReportOweFees(reportOweFeeDto); |
| | | refreshReportOwe(reportOweFeeDtos); |
| | | if (reportOweFeeDtos.size() > 0) { |
| | | pushMessage(reportOweFeeDtos, feeCollectionOrderDto); |
| | | } else { |
| | | logger.error("当前没有欠费信息" + communityDto.getCommunityId()); |
| | | } |
| | | |
| | | pushMessage(reportOweFeeDtos, feeCollectionOrderDto); |
| | | } |
| | | |
| | | private void pushMessage(List<ReportOweFeeDto> reportOweFeeDtos, FeeCollectionOrderDto feeCollectionOrderDto) { |
| | |
| | | * @param feeCollectionOrderDto |
| | | */ |
| | | private void doPushMessage(ReportOweFeeDto reportOweFeeDo, FeeCollectionOrderDto feeCollectionOrderDto) { |
| | | |
| | | FeeCollectionDetailPo feeCollectionDetailPo = new FeeCollectionDetailPo(); |
| | | ResultVo resultVo = null; |
| | | switch (feeCollectionOrderDto.getCollectionWay()) { |
| | | case FeeCollectionOrderDto.COLLECTION_WAY_SMS: |
| | | doSendSms(reportOweFeeDo, feeCollectionOrderDto); |
| | | resultVo = doSendSms(reportOweFeeDo, feeCollectionOrderDto);//短信 |
| | | feeCollectionDetailPo.setCollectionWay(FeeCollectionOrderDto.COLLECTION_WAY_SMS); |
| | | break; |
| | | case FeeCollectionOrderDto.COLLECTION_WAY_WECHAT: |
| | | doSendWechat(reportOweFeeDo, feeCollectionOrderDto); |
| | | if (!StringUtil.isEmpty(reportOweFeeDo.getOwnerId())) { |
| | | Map paramInfo = getOwnerAppUserDto(feeCollectionOrderDto.getCommunityId(), reportOweFeeDo.getOwnerId()); |
| | | resultVo = doSendWechat(reportOweFeeDo, feeCollectionOrderDto, paramInfo);//微信 |
| | | feeCollectionDetailPo.setCollectionWay(FeeCollectionOrderDto.COLLECTION_WAY_WECHAT); |
| | | } |
| | | break; |
| | | case FeeCollectionOrderDto.COLLECTION_WAY_WECHAT_SMS: |
| | | doSendWechatOrSms(reportOweFeeDo, feeCollectionOrderDto); |
| | | resultVo = doSendWechatOrSms(reportOweFeeDo, feeCollectionOrderDto, feeCollectionDetailPo);//短信或者微信 |
| | | break; |
| | | } |
| | | |
| | | logger.info("微信模板返回内容:{}", resultVo); |
| | | if (resultVo != null) { |
| | | feeCollectionDetailPo.setCollectionName(feeCollectionOrderDto.getCollectionName()); |
| | | feeCollectionDetailPo.setCommunityId(feeCollectionOrderDto.getCommunityId()); |
| | | feeCollectionDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId)); |
| | | feeCollectionDetailPo.setFeeName(feeCollectionOrderDto.getCollectionName() + "欠费"); |
| | | feeCollectionDetailPo.setOrderId(feeCollectionOrderDto.getOrderId()); |
| | | feeCollectionDetailPo.setOweAmount(reportOweFeeDo.getAmountOwed()); |
| | | feeCollectionDetailPo.setOwnerId(reportOweFeeDo.getOwnerId()); |
| | | feeCollectionDetailPo.setOwnerName(reportOweFeeDo.getOwnerName()); |
| | | feeCollectionDetailPo.setPayerObjId(reportOweFeeDo.getPayerObjId()); |
| | | feeCollectionDetailPo.setPayerObjName(reportOweFeeDo.getPayerObjName()); |
| | | feeCollectionDetailPo.setPayerObjType(reportOweFeeDo.getPayerObjType()); |
| | | feeCollectionDetailPo.setState(resultVo.getCode() == ResultVo.CODE_OK ? FeeCollectionOrderDto.STATE_FINISH : FeeCollectionOrderDto.STATE_ERROR); |
| | | feeCollectionDetailPo.setRemarks(resultVo.getMsg().length() > 512 ? resultVo.getMsg().substring(0, 450) : resultVo.getMsg()); |
| | | feeCollectionDetailInnerServiceSMOImpl.saveFeeCollectionDetail(feeCollectionDetailPo); |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param reportOweFeeDo |
| | | * @param feeCollectionOrderDto |
| | | */ |
| | | private void doSendWechatOrSms(ReportOweFeeDto reportOweFeeDo, FeeCollectionOrderDto feeCollectionOrderDto) { |
| | | Map paramInfo = getOwnerAppUserDto(feeCollectionOrderDto.getCommunityId(), reportOweFeeDo.getOwnerId()); |
| | | private ResultVo doSendWechatOrSms(ReportOweFeeDto reportOweFeeDo, FeeCollectionOrderDto feeCollectionOrderDto, FeeCollectionDetailPo feeCollectionDetailPo) { |
| | | Map paramInfo = getOwnerAppUserDto(feeCollectionOrderDto.getCommunityId(), reportOweFeeDo.getOweId()); |
| | | if (paramInfo == null) { |
| | | doSendSms(reportOweFeeDo, feeCollectionOrderDto); |
| | | return; |
| | | feeCollectionDetailPo.setCollectionWay(FeeCollectionOrderDto.COLLECTION_WAY_SMS); |
| | | return doSendSms(reportOweFeeDo, feeCollectionOrderDto);//短信推送 |
| | | } |
| | | doSendWechat(reportOweFeeDo, feeCollectionOrderDto, paramInfo); |
| | | feeCollectionDetailPo.setCollectionWay(FeeCollectionOrderDto.COLLECTION_WAY_WECHAT); |
| | | return doSendWechat(reportOweFeeDo, feeCollectionOrderDto, paramInfo);//微信推送 |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param reportOweFeeDo |
| | | * @param feeCollectionOrderDto |
| | | */ |
| | | private void doSendWechat(ReportOweFeeDto reportOweFeeDo, FeeCollectionOrderDto feeCollectionOrderDto) { |
| | | private ResultVo doSendWechat(ReportOweFeeDto reportOweFeeDo, FeeCollectionOrderDto feeCollectionOrderDto) { |
| | | Map paramInfo = getOwnerAppUserDto(feeCollectionOrderDto.getCommunityId(), reportOweFeeDo.getOwnerId()); |
| | | if (paramInfo == null) { |
| | | return; |
| | | return new ResultVo(ResultVo.CODE_ERROR, "业主未绑定"); |
| | | } |
| | | doSendWechat(reportOweFeeDo, feeCollectionOrderDto, paramInfo); |
| | | return doSendWechat(reportOweFeeDo, feeCollectionOrderDto, paramInfo); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param reportOweFeeDo |
| | | * @param feeCollectionOrderDto |
| | | */ |
| | | private void doSendWechat(ReportOweFeeDto reportOweFeeDo, FeeCollectionOrderDto feeCollectionOrderDto, Map paramInfo) { |
| | | private ResultVo doSendWechat(ReportOweFeeDto reportOweFeeDo, FeeCollectionOrderDto feeCollectionOrderDto, Map paramInfo) { |
| | | if (paramInfo == null) { |
| | | return; |
| | | return new ResultVo(ResultVo.CODE_ERROR, "业主未绑定"); |
| | | } |
| | | String templateId = paramInfo.get("templateId").toString(); |
| | | String accessToken = paramInfo.get("accessToken").toString(); |
| | | String url = paramInfo.get("url").toString(); |
| | | String oweRoomUrl = paramInfo.get("oweCarUrl").toString(); |
| | | String oweRoomUrl = paramInfo.get("oweRoomUrl").toString(); |
| | | String oweCarUrl = paramInfo.get("oweCarUrl").toString(); |
| | | SmallWeChatDto weChatDto = (SmallWeChatDto)paramInfo.get("weChatDto"); |
| | | Miniprogram miniprogram = paramInfo.get("oweCarUrl") == null ? null : (Miniprogram) paramInfo.get("oweCarUrl"); |
| | | SmallWeChatDto weChatDto = (SmallWeChatDto) paramInfo.get("weChatDto"); |
| | | Miniprogram miniprogram = paramInfo.get("miniprogram") == null ? null : (Miniprogram) paramInfo.get("miniprogram"); |
| | | List<OwnerAppUserDto> ownerAppUserDtos = (List<OwnerAppUserDto>) paramInfo.get("ownerAppUserDtos"); |
| | | |
| | | List<ReportOweFeeItemDto> itemDtos = reportOweFeeDo.getItems(); |
| | |
| | | oweUrl = FeeDto.PAYER_OBJ_TYPE_ROOM.equals(reportOweFeeDo.getPayerObjType()) ? oweRoomUrl : oweCarUrl; |
| | | for (OwnerAppUserDto appUserDto : ownerAppUserDtos) { |
| | | try { |
| | | //获取用户缴费到期时间 |
| | | Date endTime = itemDto.getEndTime(); |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(endTime); |
| | | calendar.add(Calendar.DATE, -1); |
| | | endTime = calendar.getTime(); |
| | | |
| | | Data data = new Data(); |
| | | PropertyFeeTemplateMessage templateMessage = new PropertyFeeTemplateMessage(); |
| | | templateMessage.setTemplate_id(templateId); |
| | | templateMessage.setTouser(appUserDto.getOpenId()); |
| | | /*data.setFirst(new Content("物业费缴费提醒"));*/ |
| | | data.setFirst(new Content(itemDto.getFeeName() + "提醒")); |
| | | data.setKeyword1(new Content(itemDto.getPayerObjName())); |
| | | data.setKeyword2(new Content(itemDto.getAmountOwed())); |
| | | data.setKeyword3(new Content( |
| | | DateUtil.getFormatTimeString(itemDto.getStartTime(), DateUtil.DATE_FORMATE_STRING_B) |
| | | + "至" |
| | | + DateUtil.getFormatTimeString(itemDto.getEndTime(), DateUtil.DATE_FORMATE_STRING_B))); |
| | | + DateUtil.getFormatTimeString(endTime, DateUtil.DATE_FORMATE_STRING_B))); |
| | | data.setRemark(new Content("请您及时缴费,如有疑问请联系相关物业人员")); |
| | | |
| | | if (!StringUtil.isEmpty(oweUrl)) { |
| | | if (miniprogram == null) { |
| | | templateMessage.setUrl(oweUrl + itemDto.getPayerObjId() + "&wAppId=" + weChatDto.getAppId()); |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | return new ResultVo(ResultVo.CODE_OK, ResultVo.MSG_OK); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @param reportOweFeeDo |
| | | * @param feeCollectionOrderDto |
| | | */ |
| | | private void doSendSms(ReportOweFeeDto reportOweFeeDo, FeeCollectionOrderDto feeCollectionOrderDto) { |
| | | private ResultVo doSendSms(ReportOweFeeDto reportOweFeeDo, FeeCollectionOrderDto feeCollectionOrderDto) { |
| | | |
| | | SmsConfigDto smsConfigDto = new SmsConfigDto(); |
| | | smsConfigDto.setObjId(feeCollectionOrderDto.getCommunityId()); |
| | | smsConfigDto.setSmsBusi(SmsConfigDto.SMS_BUSI_OWE); |
| | | List<SmsConfigDto> smsConfigDtos = smsConfigInnerServiceSMOImpl.querySmsConfigs(smsConfigDto); |
| | | |
| | | if (smsConfigDtos == null || smsConfigDtos.size() < 1) { |
| | | return new ResultVo(ResultVo.CODE_ERROR, "未配置短信信息"); |
| | | } |
| | | Object paramIn = null; |
| | | List<ReportOweFeeItemDto> itemDtos = reportOweFeeDo.getItems(); |
| | | //获取用户缴费到期时间 |
| | | Date endTime = itemDtos.get(0).getEndTime(); |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(endTime); |
| | | calendar.add(Calendar.DATE, -1); |
| | | endTime = calendar.getTime(); |
| | | SmsConfigDto smsConfigDto1 = BeanConvertUtil.covertBean(smsConfigDtos.get(0), SmsConfigDto.class); |
| | | // 尊敬的业主${user},您${house}的${feeType},账单日期${date}至${date2},缴费金额:${mount}元,请及时缴费 |
| | | if ("ALI".equals(smsConfigDto1.getSmsType())) { |
| | | JSONObject param = new JSONObject(); |
| | | param.put("user", reportOweFeeDo.getOwnerName()); |
| | | param.put("house", reportOweFeeDo.getPayerObjName()); |
| | | param.put("feeType", itemDtos.get(0).getFeeName()); |
| | | param.put("date", DateUtil.getFormatTimeString(itemDtos.get(0).getStartTime(), DateUtil.DATE_FORMATE_STRING_B)); |
| | | param.put("date2", DateUtil.getFormatTimeString(endTime, DateUtil.DATE_FORMATE_STRING_B)); |
| | | param.put("mount", reportOweFeeDo.getAmountOwed()); |
| | | paramIn = param; |
| | | } else { |
| | | paramIn = new String[]{ |
| | | reportOweFeeDo.getOwnerName(), |
| | | reportOweFeeDo.getPayerObjName(), |
| | | reportOweFeeDo.getAmountOwed() |
| | | }; |
| | | } |
| | | |
| | | OwnerDto ownerDto = new OwnerDto(); |
| | | ownerDto.setCommunityId(feeCollectionOrderDto.getCommunityId()); |
| | | ownerDto.setOwnerId(reportOweFeeDo.getOwnerId()); |
| | | List<OwnerDto> ownerDtos = ownerInnerServiceSMOImpl.queryOwners(ownerDto); |
| | | |
| | | if (ownerDtos == null || ownerDtos.size() < 1) { |
| | | return new ResultVo(ResultVo.CODE_ERROR, "业主不存在"); |
| | | } |
| | | ResultVo resultVo = null; |
| | | for (OwnerDto ownerDto1 : ownerDtos) { |
| | | resultVo = SendSmsFactory.sendOweFeeSms(ownerDto1.getLink(), smsConfigDto1, paramIn); |
| | | } |
| | | |
| | | return resultVo; |
| | | } |
| | | |
| | | private Map getOwnerAppUserDto(String communityId, String memberId) { |
| | |
| | | OwnerAppUserDto ownerAppUserDto = new OwnerAppUserDto(); |
| | | ownerAppUserDto.setCommunityId(weChatDto.getObjId()); |
| | | ownerAppUserDto.setAppType(OwnerAppUserDto.APP_TYPE_WECHAT); |
| | | ownerAppUserDto.setMemberId(memberId); |
| | | List<OwnerAppUserDto> ownerAppUserDtos = ownerAppUserInnerServiceSMOImpl.queryOwnerAppUsers(ownerAppUserDto); |
| | | |
| | | if (ownerAppUserDtos == null || ownerAppUserDtos.size() < 1) { |
| | |
| | | |
| | | Map paramInfo = new HashMap(); |
| | | paramInfo.put("templateId", templateId); |
| | | paramInfo.put("accessToken", accessToken); |
| | | paramInfo.put("url", url); |
| | | paramInfo.put("miniprogram", miniprogram); |
| | | paramInfo.put("oweCarUrl", oweCarUrl); |
| | |
| | | if (reportOweFee.getPayerObjType().equals("3333")) { |
| | | List<ReportOweFeeDto> reportOweFees = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFeesByRoom(reportOwe); |
| | | reportOweFee.setOweId(reportOweFees.get(0).getOweId()); |
| | | reportOweFee.setOwnerId(reportOweFees.get(0).getOwnerId()); |
| | | reportOweFee.setOwnerName(reportOweFees.get(0).getOwnerName()); |
| | | } else if (reportOweFee.getPayerObjType().equals("6666")) { |
| | | List<ReportOweFeeDto> reportOweFees = reportOweFeeInnerServiceSMOImpl.queryReportAllOweFeesByCar(reportOwe); |
| | | reportOweFee.setOweId(reportOweFees.get(0).getOweId()); |
| | | reportOweFee.setOwnerId(reportOweFees.get(0).getOwnerId()); |
| | | reportOweFee.setOwnerName(reportOweFees.get(0).getOwnerName()); |
| | | } |
| | | reportOweFeeDtos.add(reportOweFee); |
| | |
| | | if (!StringUtil.isEmpty(reportOweFeeDto.getOwnerName()) && StringUtil.isEmpty(oldReportOweFeeDto.getOwnerName())) { |
| | | oldReportOweFeeDto.setOwnerName(reportOweFeeDto.getOwnerName()); |
| | | } |
| | | if (!StringUtil.isEmpty(reportOweFeeDto.getOwnerId()) && StringUtil.isEmpty(oldReportOweFeeDto.getOwnerId())) { |
| | | oldReportOweFeeDto.setOwnerId(reportOweFeeDto.getOwnerId()); |
| | | } |
| | | if (!StringUtil.isEmpty(reportOweFeeDto.getPayerObjType()) && StringUtil.isEmpty(oldReportOweFeeDto.getPayerObjType())) { |
| | | oldReportOweFeeDto.setPayerObjType(reportOweFeeDto.getPayerObjType()); |
| | | } |
| | | oldReportOweFeeDto.setUpdateTime(reportOweFeeDto.getUpdateTime()); |
| | | oldReportOweFeeDto.setConfigName(reportOweFeeDto.getConfigName()); |
| | | } |