| | |
| | | import com.java110.core.smo.IComputeFeeSMO; |
| | | import com.java110.dto.fee.FeeDetailDto; |
| | | import com.java110.dto.fee.FeeDto; |
| | | import com.java110.dto.log.LogSystemErrorDto; |
| | | import com.java110.dto.machine.MachinePrinterDto; |
| | | import com.java110.dto.owner.OwnerDto; |
| | | import com.java110.entity.order.Business; |
| | | import com.java110.intf.community.ICommunityInnerServiceSMO; |
| | | import com.java110.dto.printerRule.PrinterRuleDto; |
| | | import com.java110.dto.printerRule.PrinterRuleFeeDto; |
| | | import com.java110.dto.printerRule.PrinterRuleMachineDto; |
| | | import com.java110.dto.system.Business; |
| | | import com.java110.intf.common.IMachinePrinterV1InnerServiceSMO; |
| | | import com.java110.intf.common.IPrinterRuleFeeV1InnerServiceSMO; |
| | | import com.java110.intf.common.IPrinterRuleMachineV1InnerServiceSMO; |
| | | import com.java110.intf.common.IPrinterRuleV1InnerServiceSMO; |
| | | import com.java110.intf.fee.IFeeDetailInnerServiceSMO; |
| | | import com.java110.intf.fee.IFeeInnerServiceSMO; |
| | | import com.java110.intf.fee.IFeeReceiptDetailInnerServiceSMO; |
| | | import com.java110.intf.fee.IFeeReceiptInnerServiceSMO; |
| | | import com.java110.intf.user.IOwnerAppUserInnerServiceSMO; |
| | | import com.java110.intf.user.IOwnerCarInnerServiceSMO; |
| | | import com.java110.intf.user.IOwnerInnerServiceSMO; |
| | | import com.java110.intf.user.IOwnerRoomRelInnerServiceSMO; |
| | | import com.java110.job.adapt.DatabusAdaptImpl; |
| | | import com.java110.job.printer.IPrinter; |
| | | import com.java110.po.fee.PayFeeDetailPo; |
| | | import com.java110.po.feeReceipt.FeeReceiptPo; |
| | | import com.java110.po.feeReceiptDetail.FeeReceiptDetailPo; |
| | | import com.java110.po.fee.FeeReceiptPo; |
| | | import com.java110.po.fee.FeeReceiptDetailPo; |
| | | import com.java110.po.log.LogSystemErrorPo; |
| | | import com.java110.service.smo.ISaveSystemErrorSMO; |
| | | import com.java110.utils.cache.CommonCache; |
| | | import com.java110.utils.exception.CmdException; |
| | | import com.java110.utils.factory.ApplicationContextFactory; |
| | | import com.java110.utils.util.Assert; |
| | | import com.java110.utils.util.BeanConvertUtil; |
| | | import com.java110.utils.util.ExceptionUtil; |
| | | import com.java110.utils.util.StringUtil; |
| | | import org.slf4j.Logger; |
| | | import com.java110.core.log.LoggerFactory; |
| | |
| | | private static Logger logger = LoggerFactory.getLogger(PayFeeReceiptAdapt.class); |
| | | |
| | | @Autowired |
| | | private ICommunityInnerServiceSMO communityInnerServiceSMO; |
| | | |
| | | private ISaveSystemErrorSMO saveSystemErrorSMOImpl; |
| | | |
| | | @Autowired |
| | | private IFeeReceiptInnerServiceSMO feeReceiptInnerServiceSMOImpl; |
| | |
| | | @Autowired |
| | | private IComputeFeeSMO computeFeeSMOImpl; |
| | | |
| | | @Autowired |
| | | private IOwnerRoomRelInnerServiceSMO ownerRoomRelInnerServiceSMO; |
| | | |
| | | @Autowired |
| | | private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMO; |
| | | private IPrinterRuleFeeV1InnerServiceSMO printerRuleFeeV1InnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IOwnerInnerServiceSMO ownerInnerServiceSMO; |
| | | private IPrinterRuleV1InnerServiceSMO printerRuleV1InnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IOwnerAppUserInnerServiceSMO ownerAppUserInnerServiceSMO; |
| | | private IPrinterRuleMachineV1InnerServiceSMO printerRuleMachineV1InnerServiceSMOImpl; |
| | | |
| | | @Autowired |
| | | private IMachinePrinterV1InnerServiceSMO machinePrinterV1InnerServiceSMOImpl; |
| | | |
| | | |
| | | //模板信息推送地址 |
| | | 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(); |
| | | |
| | | if (data != null) { |
| | | logger.debug("请求日志:{}", data); |
| | | } |
| | | JSONArray businessPayFeeDetails = null; |
| | | if (data == null) { |
| | | FeeDetailDto feeDetailDto = new FeeDetailDto(); |
| | |
| | | businessPayFeeDetails = (JSONArray) bObj; |
| | | } |
| | | } else { |
| | | return; |
| | | if (data instanceof JSONObject) { |
| | | businessPayFeeDetails = new JSONArray(); |
| | | businessPayFeeDetails.add(data); |
| | | } |
| | | } |
| | | |
| | | if (businessPayFeeDetails == null) { |
| | | return; |
| | | } |
| | |
| | | } |
| | | |
| | | private void doPayFeeDetail(Business business, JSONObject businessPayFeeDetail) { |
| | | //查询缴费明细 |
| | | PayFeeDetailPo payFeeDetailPo = BeanConvertUtil.covertBean(businessPayFeeDetail, PayFeeDetailPo.class); |
| | | FeeDto feeDto = new FeeDto(); |
| | | feeDto.setFeeId(payFeeDetailPo.getFeeId()); |
| | | feeDto.setCommunityId(payFeeDetailPo.getCommunityId()); |
| | | List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto); |
| | | try { |
| | | //查询缴费明细 |
| | | PayFeeDetailPo payFeeDetailPo = BeanConvertUtil.covertBean(businessPayFeeDetail, PayFeeDetailPo.class); |
| | | FeeDto feeDto = new FeeDto(); |
| | | feeDto.setFeeId(payFeeDetailPo.getFeeId()); |
| | | feeDto.setCommunityId(payFeeDetailPo.getCommunityId()); |
| | | List<FeeDto> feeDtos = feeInnerServiceSMOImpl.queryFees(feeDto); |
| | | Assert.listOnlyOne(feeDtos, "未查询到费用信息"); |
| | | feeDto = feeDtos.get(0); |
| | | //查询业主信息 |
| | | OwnerDto ownerDto = computeFeeSMOImpl.getFeeOwnerDto(feeDto); |
| | | // if received amount lt zero |
| | | if (businessPayFeeDetail.containsKey("receivedAmount") |
| | | && businessPayFeeDetail.getDoubleValue("receivedAmount") < 0) { |
| | | return; |
| | | } |
| | | |
| | | Assert.listOnlyOne(feeDtos, "未查询到费用信息"); |
| | | String receiptCode = CommonCache.getValue(payFeeDetailPo.getDetailId()+CommonCache.RECEIPT_CODE); |
| | | //todo 如果为空重新生成收据编号 |
| | | if(StringUtil.isEmpty(receiptCode)){ |
| | | receiptCode = feeReceiptInnerServiceSMOImpl.generatorReceiptCode(payFeeDetailPo.getCommunityId()); |
| | | } |
| | | |
| | | feeDto = feeDtos.get(0); |
| | | //添加收据和收据详情 |
| | | FeeReceiptPo feeReceiptPo = new FeeReceiptPo(); |
| | | FeeReceiptDetailPo feeReceiptDetailPo = new FeeReceiptDetailPo(); |
| | | feeReceiptDetailPo.setAmount(businessPayFeeDetail.getString("receivedAmount")); |
| | | feeReceiptDetailPo.setCommunityId(feeDto.getCommunityId()); |
| | | feeReceiptDetailPo.setCycle(businessPayFeeDetail.getString("cycles")); |
| | | feeReceiptDetailPo.setDetailId(businessPayFeeDetail.getString("detailId")); |
| | | feeReceiptDetailPo.setEndTime(businessPayFeeDetail.getString("endTime")); |
| | | feeReceiptDetailPo.setFeeId(feeDto.getFeeId()); |
| | | feeReceiptDetailPo.setFeeName(StringUtil.isEmpty(feeDto.getImportFeeName()) ? feeDto.getFeeName() : feeDto.getImportFeeName()); |
| | | feeReceiptDetailPo.setStartTime(businessPayFeeDetail.getString("startTime")); |
| | | feeReceiptDetailPo.setReceiptId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_receiptId)); |
| | | feeReceiptDetailPo.setCreateTime(payFeeDetailPo.getCreateTime()); |
| | | //处理 小数点后 0 |
| | | feeDto.setSquarePrice(Double.parseDouble(feeDto.getSquarePrice()) + ""); |
| | | feeDto.setAdditionalAmount(Double.parseDouble(feeDto.getAdditionalAmount()) + ""); |
| | | computeFeeSMOImpl.freshFeeReceiptDetail(feeDto, feeReceiptDetailPo); |
| | | feeReceiptPo.setAmount(feeReceiptDetailPo.getAmount()); |
| | | feeReceiptPo.setCommunityId(feeReceiptDetailPo.getCommunityId()); |
| | | feeReceiptPo.setReceiptId(feeReceiptDetailPo.getReceiptId()); |
| | | feeReceiptPo.setObjType(feeDto.getPayerObjType()); |
| | | feeReceiptPo.setObjId(feeDto.getPayerObjId()); |
| | | feeReceiptPo.setObjName(computeFeeSMOImpl.getFeeObjName(feeDto)); |
| | | feeReceiptPo.setPayObjId(ownerDto.getOwnerId()); |
| | | feeReceiptPo.setPayObjName(ownerDto.getName()); |
| | | feeReceiptPo.setCreateTime(payFeeDetailPo.getCreateTime()); |
| | | feeReceiptPo.setReceiptCode(receiptCode); |
| | | //这里只是写入 收据表,暂不考虑 事务一致性问题,就算写入失败 也只是影响 收据打印,如果 贵公司对 收据要求 比较高,不能有失败的情况 请加入事务管理 |
| | | feeReceiptDetailInnerServiceSMOImpl.saveFeeReceiptDetail(feeReceiptDetailPo); |
| | | feeReceiptInnerServiceSMOImpl.saveFeeReceipt(feeReceiptPo); |
| | | |
| | | //查询业主信息 |
| | | OwnerDto ownerDto = computeFeeSMOImpl.getFeeOwnerDto(feeDto); |
| | | // 是否配置了自动打印功能 如果配置了自动打印功能 自动打印 |
| | | autoPrintReceipt(businessPayFeeDetail.getString("detailId"), feeDto.getCommunityId()); |
| | | } catch (Exception e) { |
| | | LogSystemErrorPo logSystemErrorPo = new LogSystemErrorPo(); |
| | | logSystemErrorPo.setErrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_errId)); |
| | | logSystemErrorPo.setErrType(LogSystemErrorDto.ERR_TYPE_NOTICE); |
| | | logSystemErrorPo.setMsg(ExceptionUtil.getStackTrace(e)); |
| | | saveSystemErrorSMOImpl.saveLog(logSystemErrorPo); |
| | | logger.error("通知异常", e); |
| | | } |
| | | } |
| | | |
| | | //添加单元信息 |
| | | FeeReceiptPo feeReceiptPo = new FeeReceiptPo(); |
| | | FeeReceiptDetailPo feeReceiptDetailPo = new FeeReceiptDetailPo(); |
| | | |
| | | feeReceiptDetailPo.setAmount(businessPayFeeDetail.getString("receivedAmount")); |
| | | feeReceiptDetailPo.setCommunityId(feeDto.getCommunityId()); |
| | | feeReceiptDetailPo.setCycle(businessPayFeeDetail.getString("cycles")); |
| | | feeReceiptDetailPo.setDetailId(businessPayFeeDetail.getString("detailId")); |
| | | feeReceiptDetailPo.setEndTime(businessPayFeeDetail.getString("endTime")); |
| | | feeReceiptDetailPo.setFeeId(feeDto.getFeeId()); |
| | | feeReceiptDetailPo.setFeeName(StringUtil.isEmpty(feeDto.getImportFeeName()) ? feeDto.getFeeName() : feeDto.getImportFeeName()); |
| | | feeReceiptDetailPo.setStartTime(businessPayFeeDetail.getString("startTime")); |
| | | feeReceiptDetailPo.setReceiptId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_receiptId)); |
| | | computeFeeSMOImpl.freshFeeReceiptDetail(feeDto, feeReceiptDetailPo); |
| | | feeReceiptPo.setAmount(feeReceiptDetailPo.getAmount()); |
| | | feeReceiptPo.setCommunityId(feeReceiptDetailPo.getCommunityId()); |
| | | feeReceiptPo.setReceiptId(feeReceiptDetailPo.getReceiptId()); |
| | | feeReceiptPo.setObjType(feeDto.getPayerObjType()); |
| | | feeReceiptPo.setObjId(feeDto.getPayerObjId()); |
| | | feeReceiptPo.setObjName(computeFeeSMOImpl.getFeeObjName(feeDto)); |
| | | feeReceiptPo.setPayObjId(ownerDto.getOwnerId()); |
| | | feeReceiptPo.setPayObjName(ownerDto.getName()); |
| | | |
| | | //这里只是写入 收据表,暂不考虑 事务一致性问题,就算写入失败 也只是影响 收据打印,如果 贵公司对 收据要求 比较高,不能有失败的情况 请加入事务管理 |
| | | feeReceiptDetailInnerServiceSMOImpl.saveFeeReceiptDetail(feeReceiptDetailPo); |
| | | feeReceiptInnerServiceSMOImpl.saveFeeReceipt(feeReceiptPo); |
| | | private void autoPrintReceipt(String detailId, String communityId) { |
| | | |
| | | FeeDetailDto feeDetailDto = new FeeDetailDto(); |
| | | feeDetailDto.setDetailId(detailId); |
| | | feeDetailDto.setCommunityId(communityId); |
| | | List<FeeDetailDto> feeDetailDtos = feeDetailInnerServiceSMOImpl.queryFeeDetails(feeDetailDto); |
| | | |
| | | if (feeDetailDtos == null || feeDetailDtos.size() < 1) { |
| | | return; |
| | | } |
| | | |
| | | PrinterRuleFeeDto printerRuleFeeDto = new PrinterRuleFeeDto(); |
| | | printerRuleFeeDto.setCommunityId(communityId); |
| | | printerRuleFeeDto.setFeeId(feeDetailDtos.get(0).getConfigId()); |
| | | List<PrinterRuleFeeDto> printerRuleFeeDtos = printerRuleFeeV1InnerServiceSMOImpl.queryPrinterRuleFees(printerRuleFeeDto); |
| | | |
| | | if (printerRuleFeeDtos == null || printerRuleFeeDtos.size() < 1) { |
| | | return; |
| | | } |
| | | |
| | | PrinterRuleDto printerRuleDto = new PrinterRuleDto(); |
| | | printerRuleDto.setRuleId(printerRuleFeeDtos.get(0).getRuleId()); |
| | | printerRuleDto.setCommunityId(communityId); |
| | | printerRuleDto.setState(PrinterRuleDto.STATE_NORMAL); |
| | | int count = printerRuleV1InnerServiceSMOImpl.queryPrinterRulesCount(printerRuleDto); |
| | | |
| | | if (count < 1) { |
| | | return; |
| | | } |
| | | |
| | | PrinterRuleMachineDto printerRuleMachineDto = new PrinterRuleMachineDto(); |
| | | printerRuleMachineDto.setCommunityId(communityId); |
| | | printerRuleMachineDto.setRuleId(printerRuleFeeDtos.get(0).getRuleId()); |
| | | List<PrinterRuleMachineDto> printerRuleMachineDtos = printerRuleMachineV1InnerServiceSMOImpl.queryPrinterRuleMachines(printerRuleMachineDto); |
| | | if (printerRuleMachineDtos == null || printerRuleMachineDtos.size() < 1) { |
| | | return; |
| | | } |
| | | |
| | | for (PrinterRuleMachineDto tmpPrinterRuleMachineDto : printerRuleMachineDtos) { |
| | | try { |
| | | doPrint(tmpPrinterRuleMachineDto, detailId); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | private void doPrint(PrinterRuleMachineDto tmpPrinterRuleMachineDto, String detailId) { |
| | | MachinePrinterDto machinePrinterDto = new MachinePrinterDto(); |
| | | machinePrinterDto.setCommunityId(tmpPrinterRuleMachineDto.getCommunityId()); |
| | | machinePrinterDto.setMachineId(tmpPrinterRuleMachineDto.getMachineId()); |
| | | List<MachinePrinterDto> machinePrinterDtos = machinePrinterV1InnerServiceSMOImpl.queryMachinePrinters(machinePrinterDto); |
| | | |
| | | Assert.listOnlyOne(machinePrinterDtos, "云打印机不存在"); |
| | | |
| | | IPrinter printer = ApplicationContextFactory.getBean(machinePrinterDtos.get(0).getImplBean(), IPrinter.class); |
| | | |
| | | if (printer == null) { |
| | | throw new CmdException("打印机异常,未包含适配器"); |
| | | } |
| | | |
| | | printer.printPayFeeDetail(new String[]{detailId}, tmpPrinterRuleMachineDto.getCommunityId(), Integer.parseInt(tmpPrinterRuleMachineDto.getQuantity()), machinePrinterDtos.get(0),""); |
| | | |
| | | } |
| | | |
| | | |