feature 1.增加推送影像票夹功能

release
zhenghaiyang@ele-cloud.com 2 years ago
parent 210b52ab68
commit 8989940d1f
  1. 4
      order-management-common/src/main/java/com/dxhy/order/model/OrderInfo.java
  2. 6
      order-management-common/src/main/java/com/dxhy/order/model/OrderProcessInfo.java
  3. 6
      order-management-consumer/src/main/java/com/dxhy/order/consumer/model/PageOrderInfo.java
  4. 19
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/model/OcrResultToyxVo.java
  5. 63
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/model/SnpjInvoiceTypeEnum.java
  6. 78
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/impl/PushInvoiceServiceImpl.java
  7. 2
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/BeanTransServiceImpl.java
  8. 1
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/GenerateReadyOpenOrderServiceImpl.java
  9. 84
      order-management-consumer/src/main/java/com/dxhy/order/consumer/utils/MD5.java
  10. 7
      order-management-consumer/src/main/resources/mybatis/mapper/OrderProcessInfoMapper.xml

@ -410,5 +410,9 @@ public class OrderInfo implements Serializable {
* 公司代码
*/
private String gsdm;
/**
* 用戶編號
*/
private String yhbh;
}

@ -242,7 +242,9 @@ public class OrderProcessInfo implements Serializable {
*/
private String kplx;
/**
* yhbh 用户编号
*/
private String yhbh;
}

@ -248,4 +248,10 @@ public class PageOrderInfo {
@ApiModelProperty
private String gsdm;
/**
* 用户编号
*/
@ApiModelProperty
private String yhbh;
}

@ -0,0 +1,19 @@
package com.dxhy.order.consumer.modules.manager.model;
import lombok.Data;
@Data
public class OcrResultToyxVo {
private String companyId; // 公司代码
private String source; // 来源
private String InvoiceCode; // 发票代码
private String InvoiceNumber; // 发票号码
private String totalAmount; // 合计金额
private String buyerName; // 购买方名称
private String sellerName; // 销售方名称
private String fileName; // 文件名称
private String fileType; // 文件类型
private String fileByte; //Byte[]; 文件流
private String email; // 邮箱
private String employeeId; // 员工号
}

@ -0,0 +1,63 @@
package com.dxhy.order.consumer.modules.manager.model;
import lombok.AllArgsConstructor;
@AllArgsConstructor
public enum SnpjInvoiceTypeEnum {
ELECTRONIC_INVOICE("51","102","增值税电子普通发票"),
// ELECTRONIC_INVOICE_QUKUAILIAN("119","区块链发票", ""),
// PLACE_AIRCRAFT_INVOICE("120","浙江通用机打发票", ""),
ELECTRONIC_OFD_INVOICE("52","121","增值税电子专用发票"),
ELECTRONIC_TAX_SPECIAL_INVOICE("31","130","电子发票(增值税专用发票)"),
ELECTRONIC_TAX_INVOICE("32","131","电子发票(普通发票)"),
// FINAL_STATEMENT("200","结算单", ""),
// RECEIPT_OF_RECEIPT("201","验收单", ""),
;
private String key;
private String value;
private String msg;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public static String getVal(String key) {
for (SnpjInvoiceTypeEnum typeEnum : SnpjInvoiceTypeEnum.values()) {
if (typeEnum.key.equals(key)) {
return typeEnum.getValue();
}
}
return null;
}
public static void main(String[] args) {
String val = getVal("00");
System.out.println(val);
}
}

@ -3,6 +3,7 @@ package com.dxhy.order.consumer.modules.manager.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@ -17,7 +18,9 @@ import com.dxhy.order.consumer.model.protocol.CommonResponse;
import com.dxhy.order.consumer.model.protocol.ResponseData;
import com.dxhy.order.consumer.model.protocol.ResponseStatus;
import com.dxhy.order.consumer.modules.jdjos.service.PushInvoiceToJdJosService;
import com.dxhy.order.consumer.modules.manager.model.OcrResultToyxVo;
import com.dxhy.order.consumer.modules.manager.model.OpenTextResult;
import com.dxhy.order.consumer.modules.manager.model.SnpjInvoiceTypeEnum;
import com.dxhy.order.consumer.modules.manager.service.PushInvoiceService;
import com.dxhy.order.consumer.modules.manager.service.QuickCodeInfoService;
import com.dxhy.order.consumer.modules.order.model.GsClient;
@ -52,6 +55,7 @@ import com.dxhy.order.consumer.openapi.service.CommonDisposeService;
import com.dxhy.order.consumer.openapi.service.InterfaceServiceV5;
import com.dxhy.order.consumer.utils.BeanTransitionUtils;
import com.dxhy.order.consumer.utils.InterfaceBeanTransUtils;
import com.dxhy.order.consumer.utils.MD5;
import com.dxhy.order.consumer.utils.OpentextUtils;
import com.dxhy.order.exception.InterfaceException;
import com.dxhy.order.exception.OrderReceiveException;
@ -69,12 +73,16 @@ import com.dxhy.order.model.qd.OrderInfoQd;
import com.dxhy.order.model.queue.*;
import com.dxhy.order.model.queue.jdwj.JdwjMqData;
import com.dxhy.order.utils.*;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.*;
@ -161,6 +169,10 @@ public class PushInvoiceServiceImpl implements PushInvoiceService {
@Resource
private GsClientMapper gsClientMapper;
@Value("${snyx.salt:}")
private String snyxSalt;
@Value("${snyx.pjurl:}")
private String snyxPjurl;
private final static Map smMap = new HashMap() {{
put(new BigDecimal("0"), "X0");
@ -195,17 +207,16 @@ public class PushInvoiceServiceImpl implements PushInvoiceService {
return R.error("订单处理表信息不存在");
}
if (OrderInfoEnum.ORDER_STATUS_5.getKey().equals(orderProcessInfo.getDdzt()) || OrderInfoEnum.ORDER_STATUS_7.getKey().equals(orderProcessInfo.getDdzt())) {
//判断是否有员工编号 有的话就推送数据到票夹
if(StringUtils.isNotBlank(orderProcessInfo.getYhbh())){
convertToOcrResult(commonTsMqData);
}
//判断是否有报账单号,有则回推,没有不回推
boolean pushEnterprise = StrUtil.isNotBlank(orderProcessInfo.getBzdh());
if (pushEnterprise) {
commonPush(commonTsMqData);
} else {
log.warn("税号:{},当前数据报账单号为:{},不进行推送数据,直接更新为推送失败,失败原因为:无报账单号不进行推送", orderProcessInfo.getXhfNsrsbh(), orderProcessInfo.getBzdh());
@ -342,7 +353,6 @@ public class PushInvoiceServiceImpl implements PushInvoiceService {
return r;
}
private R commonPush(CommonTsMqData fpTsMqData) {
R r = new R();
List<String> shList = new ArrayList<>();
@ -375,7 +385,7 @@ public class PushInvoiceServiceImpl implements PushInvoiceService {
String fptsParam = "";
//opentext 推送图片
this.openTextUploadFile(fpTsMqData,shList);
// this.openTextUploadFile(fpTsMqData,shList);
//多个地址循环推送
for (PushInfo pushInfo : pushInfoList) {
@ -662,7 +672,6 @@ public class PushInvoiceServiceImpl implements PushInvoiceService {
return r;
}
private void sendPushDelayMessage(CommonTsMqData commonTsMqData, String errorMsg, List<String> shList) {
if (OrderInfoEnum.INTERFACE_TYPE_INVOICE_PUSH_STATUS_1.getKey().equals(commonTsMqData.getPushType())) {
log.warn("{}推送数据存入延时队列,数据为:{}", LOGGER_MSG, JsonUtils.getInstance().toJsonString(commonTsMqData));
@ -1255,7 +1264,6 @@ public class PushInvoiceServiceImpl implements PushInvoiceService {
}
//补全动态码
if (StringUtils.isNotBlank(ddfpxx.getTQM())) {
QuickResponseCodeInfo quickResponseCodeInfo = quickCodeInfoService.queryQrCodeDetailByTqm(ddfpxx.getTQM(), shList, null);
@ -1370,6 +1378,58 @@ public class PushInvoiceServiceImpl implements PushInvoiceService {
return content;
}
public Map<String, Object> convertToOcrResult(CommonTsMqData commonTsMqData){
List<OcrResultToyxVo> resultToyxVoList = Lists.newArrayList();
Map<String, Object> hashMap = Maps.newHashMap();
String batchId = String.valueOf(System.currentTimeMillis());
hashMap.put("batchId",batchId);
FpTsMqData fpTsMqData = commonTsMqData.getFpTsMqData();
List<String> shList = new ArrayList<>();
shList.add(fpTsMqData.getNsrsbh());
OrderProcessInfo orderProcessInfo = orderProcessService.queryOrderProcessInfoByFpqqlsh(fpTsMqData.getFpqqlsh(), shList);
OrderInvoiceInfo orderInvoiceInfo1 = new OrderInvoiceInfo();
orderInvoiceInfo1.setFpqqlsh(orderProcessInfo.getFpqqlsh());
OrderInvoiceInfo orderInvoiceInfo = orderInvoiceInfoService.selectOrderInvoiceInfo(orderInvoiceInfo1, shList);
OcrResultToyxVo resultToyxVo = new OcrResultToyxVo();
resultToyxVo.setCompanyId(orderProcessInfo.getGsdm());
resultToyxVo.setSource("00");
resultToyxVo.setInvoiceCode(orderInvoiceInfo.getFpdm());
resultToyxVo.setInvoiceNumber(orderInvoiceInfo.getFphm());
resultToyxVo.setTotalAmount(orderInvoiceInfo.getKphjje());
resultToyxVo.setBuyerName(orderInvoiceInfo.getGhfMc());
resultToyxVo.setSellerName(orderInvoiceInfo.getXhfMc());
String terminalCode = orderInvoiceInfo.getSksbdm();
if(OrderInfoEnum.ORDER_INVOICE_TYPE_51.getValue().equals(orderInvoiceInfo.getFpzlDm()) || OrderInfoEnum.ORDER_INVOICE_TYPE_52.getValue().equals(orderInvoiceInfo.getFpzlDm())){
OrderInfo orderInfo = orderInfoService.selectOrderInfoByOrderId(orderProcessInfo.getOrderInfoId(), shList);
List<FileDownLoad> fileDownLoadList = orderInvoiceInfoService.getInvoiceFile(orderInfo.getDdlx(), orderInvoiceInfo.getFpzlDm(), orderInvoiceInfo.getPdfUrl(), orderInvoiceInfo.getKplsh(), orderInvoiceInfo.getFpdm(), orderInvoiceInfo.getFphm(), orderInvoiceInfo.getXhfNsrsbh(), terminalCode,"");
if (ObjectUtil.isNotEmpty(fileDownLoadList)) {
resultToyxVo.setFileName(fileDownLoadList.get(0).getFileName());
resultToyxVo.setFileByte(fileDownLoadList.get(0).getFileContent());
}
}
resultToyxVo.setFileType(SnpjInvoiceTypeEnum.getVal(orderInvoiceInfo.getFpzlDm()));
resultToyxVo.setEmail("");
resultToyxVo.setEmployeeId(orderProcessInfo.getYhbh());
resultToyxVoList.add(resultToyxVo);
hashMap.put("list",resultToyxVoList);
try {
String md5Encode = MD5.getMd5Encode(batchId + snyxSalt);
Map<String, String> headerMap = Maps.newHashMap();
headerMap.put("Authorization",md5Encode);
log.info("调用影像票夹接口,调用地址:{},请求头:{},请求参数:{}",snyxPjurl,snyxPjurl,JSONObject.toJSONString(hashMap));
String body = HttpRequest.post(snyxPjurl).addHeaders(headerMap).body(JSONObject.toJSONString(hashMap)).timeout(300000).execute().body();
log.info("调用影像票夹接口返回参数:{}",body);
Map resultMap = JSONObject.parseObject(body, Map.class);
Object status = resultMap.get("status");
if(status != null && "200".equals(String.valueOf(status))) {
}
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
return hashMap;
}
private String getInvalidPushContent(ZfTsMqData zfTsMqData, PushInfo pushInfo, List<String> shList) {
String content = "";

@ -144,6 +144,8 @@ public class BeanTransServiceImpl implements BeanTransService {
orderInfo.setBzdh(pageOrderInfo.getBzdh());
orderInfo.setGsdm(pageOrderInfo.getGsdm());
orderInfo.setYhbh(pageOrderInfo.getYhbh());
//判断小数点后位数,默认为8位,如果为全电,为15位
int afterPointLength = ConfigureConstant.INT_8;
if(CommonUtils.judgeIsQdfp("",orderInfo.getFpzlDm())){

@ -709,6 +709,7 @@ public class GenerateReadyOpenOrderServiceImpl implements GenerateReadyOpenOrder
orderProcessInfo.setDdly(commonOrderInfo.getProcessInfo().getDdly());
orderProcessInfo.setDdzt(commonOrderInfo.getProcessInfo().getDdzt());
orderProcessInfo.setBzdh(commonOrderInfo.getOrderInfo().getBzdh());
orderProcessInfo.setYhbh(commonOrderInfo.getOrderInfo().getYhbh());
orderProcessInfo.setXtly("FPPAGE");
orderProcessInfo.setGsdm(commonOrderInfo.getOrderInfo().getGsdm());
orderProcessInfo.setBhzt(ConfigureConstant.STRING_0);

@ -0,0 +1,84 @@
package com.dxhy.order.consumer.utils;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5 {
/**
* 获得随机数字
*
* @param num
* 位数
* @return
*/
public static String getRandom(int num) {
double key = Math.random() * 100000;
StringBuilder result = new StringBuilder(Integer.toString((int)key));
if (result.length() > num) {
result = new StringBuilder(result.substring(result.length() - num));
} else {
for (int i = num - result.length(); i > 0; i--) {
result.insert(0, "0");
}
}
return result.toString();
}
/**
* 获取Md5码
*
* @param key
* @return String
* @throws NoSuchAlgorithmException
*/
public static String getEncode(String key) throws NoSuchAlgorithmException {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(key.getBytes(StandardCharsets.UTF_8));
byte[] digest = messageDigest.digest();
int j = digest.length;
char[] str = new char[j * 2];
int k = 0;
for (byte byte0 : digest) {
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
}
public static String getEncode(byte[] key) throws NoSuchAlgorithmException {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(key);
byte[] digest = messageDigest.digest();
int j = digest.length;
char[] str = new char[j * 2];
int k = 0;
for (byte byte0 : digest) {
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
}
public static String getMd5Encode(String key) throws NoSuchAlgorithmException {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(key.getBytes(StandardCharsets.UTF_8));
byte[] digest = messageDigest.digest();
int j = digest.length;
char[] str = new char[j * 2];
int k = 0;
for (byte byte0 : digest) {
str[k++] = hex[byte0 >>> 4 & 0xf];
str[k++] = hex[byte0 & 0xf];
}
return new String(str);
}
static final char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
static final char[] hex = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
}

@ -177,7 +177,7 @@
sbyy, order_status, create_time,
update_time, xhf_nsrsbh, xhf_mc,ent_id,sksbdm,
edit_status, num, check_status, check_time,
bzdh,xtly,gsdm,bhzt,ygxm,kppzh,pzgzrq,yzfp,origin_ddh,origin_order_id,kb)
bzdh,xtly,gsdm,bhzt,ygxm,kppzh,pzgzrq,yzfp,origin_ddh,origin_order_id,kb, yhbh)
values (#{id,jdbcType=VARCHAR}, #{orderInfoId,jdbcType=VARCHAR}, #{ddqqpch,jdbcType=VARCHAR},
#{fpqqlsh,jdbcType=VARCHAR},
#{ddh,jdbcType=VARCHAR}, #{tqm,jdbcType=VARCHAR}, #{kphjje,jdbcType=VARCHAR},
@ -195,7 +195,7 @@
#{editStatus,jdbcType=VARCHAR}, #{num,jdbcType=INTEGER}, #{checkStatus,jdbcType=VARCHAR},
#{checkTime,jdbcType=VARCHAR}, #{bzdh,jdbcType=VARCHAR}, #{xtly,jdbcType=VARCHAR}, #{gsdm,jdbcType=VARCHAR},
#{bhzt,jdbcType=VARCHAR}, #{ygxm,jdbcType=VARCHAR}, #{kppzh,jdbcType=VARCHAR}, #{pzgzrq,jdbcType=TIMESTAMP},
#{yzfp,jdbcType=VARCHAR}, #{originDdh,jdbcType=VARCHAR}, #{originOrderId,jdbcType=VARCHAR}, #{kb,jdbcType=VARCHAR})
#{yzfp,jdbcType=VARCHAR}, #{originDdh,jdbcType=VARCHAR}, #{originOrderId,jdbcType=VARCHAR}, #{kb,jdbcType=VARCHAR}, #{yhbh,jdbcType=VARCHAR})
</insert>
<update id="updateOrderProcessInfoByProcessId" parameterType="com.dxhy.order.model.OrderProcessInfo">
@ -324,6 +324,9 @@
<if test="processInfo.kb != null">
kb = #{processInfo.kb,jdbcType=VARCHAR},
</if>
<if test="processInfo.yhbh != null">
yhbh = #{processInfo.yhbh,jdbcType=VARCHAR},
</if>
</set>
<where>
<if test="processInfo.id != null and processInfo.id != '' ">

Loading…
Cancel
Save