he2802 2 年 前
コミット
6fdf545168

+ 3 - 0
zhongzheng-admin-saas/src/main/resources/application-dev.yml

@@ -166,3 +166,6 @@ oldOrder:
 
 oldSys:
     host: http://gdxypx.xy.com
+
+invoice:
+    host: http://192.168.1.222:7077/sys/common/openMplatform/log

+ 3 - 0
zhongzheng-admin/src/main/resources/application-dev.yml

@@ -168,3 +168,6 @@ oldOrder:
 
 oldSys:
     host: http://gdxypx.xy.com
+
+invoice:
+    host: http://192.168.1.222:7077/sys/common/openMplatform/log

+ 3 - 0
zhongzheng-api/src/main/resources/application-dev.yml

@@ -169,3 +169,6 @@ oldOrder:
 
 oldSys:
     host: http://gdxypx.xy.com
+
+invoice:
+    host: http://192.168.1.24:7077/sys/common/openMplatform/log

+ 10 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/DateUtils.java

@@ -331,6 +331,16 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         return "P"+getDateOrderSn();
     }
 
+    public static String getInvoiceOrderSn()
+    {
+        DateTimeFormatter ofPattern = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
+        String localDate = (LocalDateTime.now().format(ofPattern)).substring(2);
+        //随机数
+        String randomNumeric = RandomStringUtils.randomNumeric(4);
+        return "IN"+localDate+randomNumeric;
+
+    }
+
     public static String getTagOrderSn(String tag)
     {
         return tag+getDateOrderSn();

+ 3 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderInvoiceBo.java

@@ -1,7 +1,9 @@
 package com.zhongzheng.modules.order.bo;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.NotBlank;
 import java.io.Serializable;
 
 /**
@@ -29,7 +31,7 @@ public class OrderInvoiceBo implements Serializable {
 
     private String email;
 
-    private Integer invoiceType;
+    private Integer invoiceType = 1;
 
     private String invoiceLine;
 

+ 3 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderInvoiceDetailBo.java

@@ -18,9 +18,9 @@ public class OrderInvoiceDetailBo implements Serializable {
 
     private BigDecimal price;
 
-    private Integer num;
+    private Integer num = 1;
 
-    private String unit;
+    private String unit = "项";
 
     private String taxRate = "0.03";
 
@@ -36,7 +36,7 @@ public class OrderInvoiceDetailBo implements Serializable {
 
     private String goodsCode = "307020102";
 
-    private String favouredPolicyFlag;
+    private String favouredPolicyFlag = "01";
 
     private String favouredPolicyName = "简易征收";
 }

+ 15 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderInvoiceHostBo.java

@@ -0,0 +1,15 @@
+package com.zhongzheng.modules.order.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年05月23日 13:56
+ */
+@Data
+public class OrderInvoiceHostBo implements Serializable {
+
+    private OrderInvoiceBo order;
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderInvoice.java

@@ -86,4 +86,6 @@ private static final long serialVersionUID=1L;
     private String invoiceNum;
     /** 审核时间 */
     private Long periodTime;
+    /** 流水号 */
+    private String serialNumber;
 }

+ 78 - 7
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderInvoiceServiceImpl.java

@@ -3,21 +3,30 @@ package com.zhongzheng.modules.order.service.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
+import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.modules.course.bo.CourseChapterBusinessAddBo;
 import com.zhongzheng.modules.course.mapper.CourseChapterMapper;
-import com.zhongzheng.modules.order.bo.OrderInvoiceAddBo;
-import com.zhongzheng.modules.order.bo.OrderInvoiceEditBo;
-import com.zhongzheng.modules.order.bo.OrderInvoiceOrderAddBo;
-import com.zhongzheng.modules.order.bo.OrderInvoiceQueryBo;
+import com.zhongzheng.modules.order.bo.*;
 import com.zhongzheng.modules.order.domain.OrderInvoice;
 import com.zhongzheng.modules.order.mapper.OrderInvoiceMapper;
 import com.zhongzheng.modules.order.service.IOrderInvoiceOrderService;
 import com.zhongzheng.modules.order.service.IOrderInvoiceService;
 import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderInvoiceVo;
+import com.zhongzheng.modules.system.service.ISysUserService;
+import com.zhongzheng.modules.user.domain.User;
+import com.zhongzheng.modules.user.service.IUserService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -25,9 +34,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.pagehelper.Page;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
+import java.io.IOException;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -42,6 +50,12 @@ public class OrderInvoiceServiceImpl extends ServiceImpl<OrderInvoiceMapper, Ord
     @Autowired
     private IOrderInvoiceOrderService iOrderInvoiceOrderService;
 
+    @Autowired
+    private IUserService userService;
+
+    @Value("${invoice.host}")
+    private String INVOICE_PATH;
+
     @Override
     public OrderInvoiceVo queryById(Long invoiceId){
         OrderInvoice db = this.baseMapper.selectById(invoiceId);
@@ -128,6 +142,63 @@ public class OrderInvoiceServiceImpl extends ServiceImpl<OrderInvoiceMapper, Ord
                 iOrderInvoiceOrderService.insertByAddBo(item);
             }
         }
+
+        //开发票
+        OrderInvoiceBo invoiceBo = new OrderInvoiceBo();
+        Long nowTime = DateUtils.getNowTime();
+        String sign = ToolsUtils.EncoderByMd5( nowTime.toString() + "pubilc2022");
+        //流水号
+        String invoiceOrderSn = DateUtils.getInvoiceOrderSn();
+        invoiceBo.setOrderNo(invoiceOrderSn);
+        invoiceBo.setInvoiceDate(DateUtils.timestampToDateFormat(DateUtils.getNowTime(),"yyyy-MM-dd HH:mm:ss"));
+        if (bo.getSubject() == 1){
+            //个人
+            invoiceBo.setBuyerName(bo.getInvoiceTitle());
+            invoiceBo.setNaturalPersonFlag("1");
+            if (ObjectUtils.isNotNull(bo.getUserId())){
+                User user = userService.getById(bo.getUserId());
+                invoiceBo.setBuyerTaxNum(EncryptHandler.decrypt(user.getIdCard()));
+            }
+        }else {
+            //企业
+            invoiceBo.setBuyerName(bo.getInvoiceTitle());
+            invoiceBo.setNaturalPersonFlag("0");
+            invoiceBo.setBuyerTaxNum(bo.getTaxRegistryNumber());
+        }
+        invoiceBo.setEmail(bo.getEmail());
+        if (bo.getType() == 1){
+            //1普通发票
+            invoiceBo.setInvoiceLine("pc");
+        }else {
+            //增值税专用发票
+            invoiceBo.setInvoiceLine("bs");
+        }
+        OrderInvoiceDetailBo detailBo = new OrderInvoiceDetailBo();
+        detailBo.setPrice(bo.getAmount());
+        invoiceBo.setInvoiceDetail(detailBo);
+        OrderInvoiceHostBo hostBo = new OrderInvoiceHostBo();
+        hostBo.setOrder(invoiceBo);
+        Map<String, String> params = new HashMap<>();
+        params.put("stamp", nowTime.toString());
+        params.put("sign", sign);
+        params.put("content", JSONObject.toJSONString(hostBo));
+        params.put("orderNo", invoiceOrderSn);
+        params.put("tenantId", ServletUtils.getRequest().getHeader("TenantId"));
+        String respone = "";
+        try {
+            respone = HttpUtils.sendPost(INVOICE_PATH, JSONObject.parseObject(JSONObject.toJSONString(params)));
+            if (!respone.contains("\"code\":200")) {
+                throw new CustomException("开发票接口请求错误");
+            }
+            OrderInvoice invoice = getById(add.getInvoiceId());
+            invoice.setPeriodStatus(3);
+            invoice.setInvoiceStatus(3);//开票中
+            invoice.setSerialNumber(invoiceOrderSn);
+            updateById(invoice);
+        } catch (Exception e) {
+            log.error("开发票接口请求错误" + respone);
+            throw new CustomException("开发票接口请求错误");
+        }
         return rs;
     }
 

+ 19 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java

@@ -1321,7 +1321,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                 throw new CustomException("支付参数错误");
             }
             //旧系统B端网银退款处理
-            Integer sign = handleEnterpriseRefund(refundPrice, order, bo,orderRefundList.get(0).getType());
+            Integer sign = handleEnterpriseRefund(refundPrice, order, bo,orderRefundList.get(0).getType(),orderRefundList);
             orderRefundList.forEach(x -> x.setPeriodStatus(sign==2?4:3));//支付中
             topOldOrderRefundService.updateBatchById(orderRefundList.stream().map(x -> BeanUtil.toBean(x,TopOldOrderRefund.class)).collect(Collectors.toList()));
             update(new LambdaUpdateWrapper<TopOldOrder>()
@@ -1403,7 +1403,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
     }
 
 
-    private Integer handleEnterpriseRefund(BigDecimal refundPrice,TopOldOrder order,OrderRefundPayBo bo,Integer type) {
+    private Integer handleEnterpriseRefund(BigDecimal refundPrice,TopOldOrder order,OrderRefundPayBo bo,Integer type,List<TopOldOrderRefundVo> orderRefundList) {
         if (ObjectUtils.isNotNull(order.getOrderUncollected()) && order.getOrderUncollected().compareTo(BigDecimal.ZERO) !=0){
             //存在未收款金额
             BigDecimal orderUncollected = order.getOrderUncollected();
@@ -1462,6 +1462,10 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
 
         //未收金额大于退款金额
         checkInform(order.getOrderSn(),type,"",1,1,"已支付");
+        //处理新系统订单
+        if (ObjectUtils.isNotNull(order.getInputOrderSn()) && order.getOrderBase() == 1) {
+            handleRefundOrder(orderRefundList,order.getInputOrderSn(),order.getTenantId().toString());
+        }
         return 1;
     }
 
@@ -2226,7 +2230,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                                 update(new LambdaUpdateWrapper<TopOldOrder>()
                                         .set(TopOldOrder::getFinishStatus, bo.getFinishStatus())
                                         .set(TopOldOrder::getDivideStatus, -1)//取消
-                                        .eq(TopOldOrder::getOrderSn, bo.getOrderSnList())
+                                        .eq(TopOldOrder::getOrderSn, orderSn)
                                         .eq(TopOldOrder::getTenantId, order.getTenantId()));
                             }
                             break;
@@ -2262,7 +2266,18 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
     }
 
     private void calculateDivide(List<TopCostTpItemVo> itemList, TopOldOrder order, Integer divideModel) {
-        if (CollectionUtils.isEmpty(itemList)){return;}
+        if (CollectionUtils.isEmpty(itemList)){
+            if (order.getOrderFrom() == 1) {
+                Order orgOrder = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderSn, order.getOrderSn()));
+                orgOrder.setFinishStatus(1);//已完单
+                orgOrder.setDivideModel(divideModel);
+                orgOrder.setDivideStatus(2);//待审核
+                orgOrder.setAccomplishTime(DateUtils.getNowTime());
+
+            }
+
+            return;
+        }
         //佣金
         BigDecimal brokerage = order.getPretaxBrokerage();
         //平摊佣金