diff --git a/order-management-common/src/main/java/com/dxhy/order/model/OrderInfo.java b/order-management-common/src/main/java/com/dxhy/order/model/OrderInfo.java index 83c2006c..9a59a324 100644 --- a/order-management-common/src/main/java/com/dxhy/order/model/OrderInfo.java +++ b/order-management-common/src/main/java/com/dxhy/order/model/OrderInfo.java @@ -410,5 +410,9 @@ public class OrderInfo implements Serializable { * 公司代码 */ private String gsdm; + /** + * 用戶編號 + */ + private String yhbh; } diff --git a/order-management-common/src/main/java/com/dxhy/order/model/OrderProcessInfo.java b/order-management-common/src/main/java/com/dxhy/order/model/OrderProcessInfo.java index db6391b0..d3c604b2 100644 --- a/order-management-common/src/main/java/com/dxhy/order/model/OrderProcessInfo.java +++ b/order-management-common/src/main/java/com/dxhy/order/model/OrderProcessInfo.java @@ -242,7 +242,9 @@ public class OrderProcessInfo implements Serializable { */ private String kplx; - - + /** + * yhbh 用户编号 + */ + private String yhbh; } diff --git a/order-management-consumer/src/main/java/com/dxhy/order/consumer/model/PageOrderInfo.java b/order-management-consumer/src/main/java/com/dxhy/order/consumer/model/PageOrderInfo.java index 3a33bde0..b66ad1b1 100644 --- a/order-management-consumer/src/main/java/com/dxhy/order/consumer/model/PageOrderInfo.java +++ b/order-management-consumer/src/main/java/com/dxhy/order/consumer/model/PageOrderInfo.java @@ -248,4 +248,10 @@ public class PageOrderInfo { @ApiModelProperty private String gsdm; + /** + * 用户编号 + */ + @ApiModelProperty + private String yhbh; + } diff --git a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/model/OcrResultToyxVo.java b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/model/OcrResultToyxVo.java new file mode 100644 index 00000000..9e8bb45e --- /dev/null +++ b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/model/OcrResultToyxVo.java @@ -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; // 员工号 +} diff --git a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/model/SnpjInvoiceTypeEnum.java b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/model/SnpjInvoiceTypeEnum.java new file mode 100644 index 00000000..206a8ac7 --- /dev/null +++ b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/model/SnpjInvoiceTypeEnum.java @@ -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); + } +} diff --git a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/impl/PushInvoiceServiceImpl.java b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/impl/PushInvoiceServiceImpl.java index 56e27150..cee2b6e6 100644 --- a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/impl/PushInvoiceServiceImpl.java +++ b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/service/impl/PushInvoiceServiceImpl.java @@ -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 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 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 convertToOcrResult(CommonTsMqData commonTsMqData){ + List resultToyxVoList = Lists.newArrayList(); + Map hashMap = Maps.newHashMap(); + String batchId = String.valueOf(System.currentTimeMillis()); + hashMap.put("batchId",batchId); + FpTsMqData fpTsMqData = commonTsMqData.getFpTsMqData(); + List 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 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 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 shList) { String content = ""; diff --git a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/BeanTransServiceImpl.java b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/BeanTransServiceImpl.java index f3e4b6bf..51dd0ed8 100644 --- a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/BeanTransServiceImpl.java +++ b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/BeanTransServiceImpl.java @@ -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())){ diff --git a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/GenerateReadyOpenOrderServiceImpl.java b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/GenerateReadyOpenOrderServiceImpl.java index bc93abcd..d1a36dd7 100644 --- a/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/GenerateReadyOpenOrderServiceImpl.java +++ b/order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/order/service/impl/GenerateReadyOpenOrderServiceImpl.java @@ -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); diff --git a/order-management-consumer/src/main/java/com/dxhy/order/consumer/utils/MD5.java b/order-management-consumer/src/main/java/com/dxhy/order/consumer/utils/MD5.java new file mode 100644 index 00000000..e9ced099 --- /dev/null +++ b/order-management-consumer/src/main/java/com/dxhy/order/consumer/utils/MD5.java @@ -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'}; + +} diff --git a/order-management-consumer/src/main/resources/mybatis/mapper/OrderProcessInfoMapper.xml b/order-management-consumer/src/main/resources/mybatis/mapper/OrderProcessInfoMapper.xml index efae8c86..a93384e4 100644 --- a/order-management-consumer/src/main/resources/mybatis/mapper/OrderProcessInfoMapper.xml +++ b/order-management-consumer/src/main/resources/mybatis/mapper/OrderProcessInfoMapper.xml @@ -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}) @@ -324,6 +324,9 @@ kb = #{processInfo.kb,jdbcType=VARCHAR}, + + yhbh = #{processInfo.yhbh,jdbcType=VARCHAR}, +