package com.zteits.pay.job; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import com.alibaba.fastjson.JSONObject; import com.clouds.common.cache.park.MessageTempletCacheUtil; import com.clouds.common.utils.MsgTemplateUtil; import com.xiaoleilu.hutool.date.DateTime; import com.xiaoleilu.hutool.date.DateUtil; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.context.XxlJobHelper; import com.xxl.job.core.handler.annotation.XxlJob; import com.zteits.clouds.api.apibase.bean.BaseInfo; import com.zteits.clouds.api.apibase.bean.BizResult; import com.zteits.clouds.api.apibase.bean.PageBean; import com.zteits.clouds.api.apibase.constants.BasicEnum; import com.zteits.clouds.api.apibase.constants.InvoiceStateEnum; import com.zteits.clouds.api.dto.pay.TdCCustInvoiceHisDTO; import com.zteits.clouds.api.dto.pay.dto.TdCCustInvoiceMailDTO; import com.zteits.clouds.api.dto.pay.dto.TdCCustInvoiceSaleDTO; import com.zteits.clouds.api.dto.pay.param.TdCCustInvoiceHisQueryRequest; import com.zteits.clouds.api.dto.pay.param.TdCCustInvoiceHisRequest; import com.zteits.clouds.api.dto.pay.param.TdCCustInvoiceSaleQueryRequest; import com.zteits.clouds.api.service.pay.invoice.InvoiceHelperService; import com.zteits.pay.configuration.mail.MailService; import com.zteits.pay.dao.TdCCustInvoiceHisDao; import com.zteits.pay.dao.TdCCustInvoiceMailDao; import com.zteits.pay.dao.TdCCustInvoiceSaleDao; import com.zteits.pay.domain.TdCCustInvoiceHis; import com.zteits.pay.domain.TdCCustInvoiceMail; import com.zteits.pay.domain.TdCCustInvoiceSale; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.List; /** * 电子发票下载-邮寄 * Copyright: Copyright (c) 2017 zteits * * @ClassName: InvoiceDownAndMailJob.java * @Description: * @version: v1.0.0 * @author: wangfei * @date: 2019年9月4日 下午2:53:38 * Modification History: * Date Author Version Description * ---------------------------------------------------------* * 2019年9月4日 wangfei v1.0.0 创建 */ @Component public class InvoiceDownAndMailJob { private static final Logger logger = LoggerFactory.getLogger(InvoiceDownAndMailJob.class); @Autowired private InvoiceHelperService invoiceHelperService; @Autowired private MailService mailService; @Autowired private TdCCustInvoiceHisDao custInvoiceHisDao; @Autowired private TdCCustInvoiceSaleDao tdCCustInvoiceSaleDao; @Autowired private TdCCustInvoiceMailDao tdCCustInvoiceMailDao; @XxlJob(value="InvoiceDownAndMailJob") public ReturnT execute(String... params) throws Exception { String param = XxlJobHelper.getJobParam(); if (StringUtils.isNotEmpty(param) && params == null) { params = param.split(","); } DateTime endTime = DateUtil.endOfDay(new Date()); DateTime beginTime = DateUtil.beginOfDay(new Date()); if (null != params && params.length == 1) { beginTime = DateUtil.beginOfDay(DateUtil.parse(params[0], "yyyy-MM-dd")); endTime = DateUtil.endOfDay(DateUtil.parse(params[0], "yyyy-MM-dd")); } if (null != params && params.length > 1) { beginTime = DateUtil.beginOfDay(DateUtil.parse(params[0], "yyyy-MM-dd")); endTime = DateUtil.endOfDay(DateUtil.parse(params[1], "yyyy-MM-dd")); } int updateCount =0; this.logger("---begin查询已开票未下载、邮寄的电子发票信息,统计时间:"+beginTime+"----"+endTime); TdCCustInvoiceHisQueryRequest request = new TdCCustInvoiceHisQueryRequest(); request.setInvoiceBeginTime(beginTime); request.setInvoiceEndTime(endTime); request.setSysCode(BasicEnum.SYS_CODE.getValue()); request.setBaseRequest(new BaseInfo(1, 100)); request.setInvoiceStates(Arrays.asList(InvoiceStateEnum.ALREADY_OPEN_INVOICE.getValue()+"" ,InvoiceStateEnum.DOWN_FAILD.getValue()+"",InvoiceStateEnum.ALREADY_DOWNLOAD.getValue()+"")); BizResult> rsList = invoiceHelperService.queryCustInvoiceHisForPage(request); this.logger("本次查询已开票未下载、邮寄的电子发票条数=" +(CollectionUtils.isNotEmpty(rsList.getData().getDataList()) ? rsList.getData().getDataList().size() :0)); if(rsList.isSuccess() && rsList.getData()!=null && CollectionUtils.isNotEmpty(rsList.getData().getDataList())) { int index = 1; for(TdCCustInvoiceHisDTO dto :rsList.getData().getDataList()) { this.logger("begin开始下载、邮寄第"+(index++)+"条,获取到的发票信息="+JSONObject.toJSON(dto)); if(dto == null || StringUtils.isEmpty(dto.getInvoiceId()) || StringUtils.isEmpty(dto.getSaleTaxid())){ this.logger("发票参数为空!"); continue; } String mailTemplet = MessageTempletCacheUtil.getTempletByTempletId("email_"+dto.getOrgId()); if(StringUtils.isBlank(mailTemplet)){ //按组织没有获取到email模板,则取默认的 mailTemplet = MessageTempletCacheUtil.getTempletByTempletId("email"); } if(StringUtils.isBlank(mailTemplet)){ this.logger("没有获取到电子邮件模板!!!"); continue; } //下载发票 TdCCustInvoiceHisRequest downRequest = new TdCCustInvoiceHisRequest(); downRequest.setSysCode(BasicEnum.SYS_CODE.getValue()); downRequest.setOrderIds(Arrays.asList(dto.getInvoiceId())); downRequest.setSaleTaxid(dto.getSaleTaxid()); downRequest.setOrgId(dto.getOrgId()); BizResult downResult = invoiceHelperService.downTheInvoice(downRequest); if(!downResult.isSuccess() || !downResult.getData()){ this.logger("下载电子发票失败!:"+JSONObject.toJSONString(downResult)); continue; } TdCCustInvoiceHisDTO invoice = custInvoiceHisDao.queryCustInvoiceHisByInvoiceId(dto.getInvoiceId()); if(invoice == null || StringUtils.isBlank(invoice.getInvoiceUrl())){ logger.error("开票信息为空!请先开票"); continue; } //查询开票服务器信息 TdCCustInvoiceSaleQueryRequest saleRequest = new TdCCustInvoiceSaleQueryRequest(); saleRequest.setOrgId(dto.getOrgId()); // 补充税号 , 根据税号查询对应销方信息 saleRequest.setSaleTaxids(Collections.singletonList(invoice.getSaleTaxid())); saleRequest.setSysCode(BasicEnum.SYS_CODE.getValue()); List sales = tdCCustInvoiceSaleDao.queryTdCCustInvoiceSale(saleRequest); if(CollectionUtils.isEmpty(sales)){ logger.error("根据当前orgId["+dto.getOrgId()+"]没有查询到相应的开票服务器信息,请及时添加!"); continue; } TdCCustInvoiceSaleDTO saleDTO = new TdCCustInvoiceSaleDTO(); BeanUtils.copyProperties(sales.get(0), saleDTO); //发邮件 if(saleDTO.getMessagePushSwitch() == null || 0 == (saleDTO.getMessagePushSwitch())){ logger.error("销方邮箱推送开关未开启,请联系工作人员!"); this.logger("销方邮箱推送开关未开启,请联系工作人员!"); continue; } //查询开发件箱 TdCCustInvoiceMail mail = tdCCustInvoiceMailDao.queryTheLessMailByOrgId(dto.getOrgId()); if(mail == null || mail.getId() == null){ logger.error("销方邮箱信息未查询到,请联系工作人员!"); this.logger("销方邮箱信息未查询到,请联系工作人员!"); continue; } TdCCustInvoiceMailDTO mailDTO = new TdCCustInvoiceMailDTO(); BeanUtils.copyProperties(mail,mailDTO); invoice.setInvoiceTotalYuan(invoice.getInvoiceTotalFee() == null ? "0" : "" + ((invoice.getInvoiceTotalFee()).divide(new BigDecimal(100)))); String[] str = mailTemplet.split("&&"); String subject = str[0]; String content = MsgTemplateUtil.render(str[1], invoice); this.logger("开始发送电子邮件!:"+invoice.getCustEmail()+subject+ content); mailService.sendHtmlMail(invoice.getCustEmail(), subject, content,mailDTO); //已邮寄 TdCCustInvoiceHis record = new TdCCustInvoiceHis(); record.setInvoiceId(invoice.getInvoiceId()); record.setInvoiceState(InvoiceStateEnum.ALREADY_POST_INVOICE.getValue()+""); record.setModfiyDate(new Date()); record.setPostDate(new Date()); custInvoiceHisDao.updateInvioceByInvoiceId(record); } }else{ this.logger("---本次没有要下载、邮寄的电子发票.."); updateCount =1; } return updateCount > 0 ? ReturnT.SUCCESS :ReturnT.FAIL; } private void logger(String msg){ XxlJobHelper.log(msg); logger.info(msg); } public static void main(String[] args) { BigDecimal a = new BigDecimal("1234"); System.out.println(""+(a.divide(new BigDecimal("100")))); } }