Browse Source

改动过的

huanglizhi 1 year ago
parent
commit
9c1899a5d3

+ 10 - 1
module-erp/pom.xml

@@ -23,6 +23,15 @@
             <version>RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.alipay.sdk</groupId>
+            <artifactId>alipay-sdk-java</artifactId>
+            <version>4.38.0.ALL</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.wechatpay-apiv3</groupId>
+            <artifactId>wechatpay-java</artifactId>
+            <version>0.2.12</version>
+        </dependency>
     </dependencies>
-
 </project>

+ 1 - 1
module-erp/src/main/java/com/hys/app/controller/erp/use/GoodsManagerController.java

@@ -56,7 +56,7 @@ public class GoodsManagerController {
     @Log(client = LogClient.admin, detail = "修改id为[${id}]的商品")
     public void status(@RequestBody @Valid GoodsUpdateDTO request) {
         GoodsDO goodsDO = goodsManager.getById(request.getId());
-        goodsDO.setMarketEnable(!request.getMarketEnable());
+        goodsDO.setMarketEnable(!goodsDO.getMarketEnable());
         goodsManager.updateById(goodsDO);
     }
 

+ 68 - 0
module-erp/src/main/java/com/hys/app/controller/erp/use/PayController.java

@@ -0,0 +1,68 @@
+package com.hys.app.controller.erp.use;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.hys.app.framework.exception.ServiceException;
+import com.hys.app.model.erp.dos.OrderDO;
+import com.hys.app.model.erp.dto.PayTypeUrl;
+import com.hys.app.pay.ali.AliPayService;
+import com.hys.app.pay.ali.PayOrder;
+import com.hys.app.pay.ali.WxService;
+import com.hys.app.service.erp.OrderManager;
+import com.wechat.pay.java.core.auth.WechatPay2Validator;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.time.LocalDateTime;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/admin/erp/pay")
+@Api(tags = "订单支付")
+@Validated
+@AllArgsConstructor
+public class PayController {
+    private OrderManager orderManager;
+    private AliPayService aliPayService;
+    private WxService wxService;
+
+    @ApiOperation(value = "扫描完获取拉起支付的url")
+    @PostMapping("/getPayUrl")
+    public Object getListByScan(@RequestBody @Validated PayTypeUrl payTypeUrl) {
+        OrderDO aDo = orderManager.getById(payTypeUrl.getOrderId());
+        if (ObjectUtil.isNull(aDo)) {
+            throw new ServiceException("未查询到订单信息");
+        }
+        PayOrder payOrder = new PayOrder();
+        payOrder.setTraceNo(aDo.getId().toString());
+        payOrder.setTotalAmount(aDo.getRealPrice());
+        payOrder.setSubject("租赁订单支付金额");
+        payOrder.setTimeExpire(LocalDateTime.now().plusMinutes(30));
+
+        switch (payTypeUrl.getPayType()) {
+            case "ali":
+                return aliPayService.pay(payOrder);
+            case "wx":
+                return wxService.pay(payOrder);
+            default:
+                return "不支持的支付方式";
+        }
+    }
+
+    @PostMapping("/aliReturnCall")
+    public void aliReturnCall(HttpServletRequest request, HttpServletResponse response, Map<String, String> map) {
+        if (aliPayService.checkReturnParam(map)) {
+            response.setContentType("type=text/html;charset=UTF-8");
+            OrderDO aDo = orderManager.getById(map.get("out_trade_no"));
+            aDo.setHasPayReturn(true);
+            orderManager.updateById(aDo);
+        }
+    }
+}

+ 4 - 9
module-erp/src/main/java/com/hys/app/controller/erp/use/WarehouseOutItemController.java

@@ -31,20 +31,15 @@ public class WarehouseOutItemController {
 
     @ApiOperation(value = "分页列表")
     @PostMapping("/query")
-    public WebPage<WarehouseOutItemV1> list( WarehouseOutItemQueryParams request) {
-        Long count=warehouseOutItemManager.selectCount(request);
-        List<WarehouseOutItemV1> list=warehouseOutItemManager.selectList(request);
-        WebPage<WarehouseOutItemV1> webPage=new WebPage<>();
+    public WebPage<WarehouseOutItemV1> list(WarehouseOutItemQueryParams request) {
+        Long count = warehouseOutItemManager.selectCount(request);
+        List<WarehouseOutItemV1> list = warehouseOutItemManager.selectList(request);
+        WebPage<WarehouseOutItemV1> webPage = new WebPage<>();
         webPage.setData(list);
         webPage.setPageNo(request.getPageNo());
         webPage.setPageSize(request.getPageSize());
         webPage.setDataTotal(count);
         return webPage;
     }
-
-
-
-
-
 }
 

+ 1 - 0
module-erp/src/main/java/com/hys/app/framework/security/AdminAccessDecisionManager.java

@@ -45,6 +45,7 @@ public class AdminAccessDecisionManager implements org.springframework.security.
         result = result || matcher.match("/import-tpl/**", url);
         result = result || matcher.match("/admin/erp/kdn/returnBack/**", url);
         result = result || matcher.match("/admin/erp/scancode/**", url);
+        result = result || matcher.match("/admin/erp/pay/**", url);
         if (result) {
             return;
         }

+ 4 - 0
module-erp/src/main/java/com/hys/app/model/erp/dos/GoodsDO.java

@@ -2,6 +2,7 @@ package com.hys.app.model.erp.dos;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.hys.app.framework.database.mybatisplus.base.BaseDO;
@@ -89,4 +90,7 @@ public class GoodsDO extends BaseDO {
 
     private Long  sort;
 
+    @TableLogic
+    private Boolean  deleted;
+
 }

+ 4 - 4
module-erp/src/main/java/com/hys/app/model/erp/dos/OrderDO.java

@@ -27,7 +27,7 @@ import java.util.Map;
  * @author 张崧
  * 2024-01-24 15:58:30
  */
-@TableName(value = "erp_order",autoResultMap = true)
+@TableName(value = "erp_order", autoResultMap = true)
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
@@ -182,7 +182,7 @@ public class OrderDO extends BaseDO {
 
 
     @ApiModelProperty(name = "extension", value = "延期次数")
-    private Integer  extension;
-
-
+    private Integer extension;
+    //是否已支付到账
+    private Boolean hasPayReturn = false;
 }

+ 30 - 0
module-erp/src/main/java/com/hys/app/model/erp/dto/PayTypeUrl.java

@@ -0,0 +1,30 @@
+package com.hys.app.model.erp.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 商品新增/编辑DTO
+ *
+ * @author 张崧
+ * 2023-12-26 15:56:58
+ */
+@Data
+public class PayTypeUrl {
+
+    @ApiModelProperty(name = "pay_type", value = "支付方式")
+    @NotBlank(message = "支付方式不能为空")
+    private String payType;
+
+    @ApiModelProperty(name = "order_id", value = "订单ID")
+    @NotNull(message = "订单ID不能为空")
+    private Long orderId;
+
+
+
+}
+

+ 44 - 0
module-erp/src/main/java/com/hys/app/pay/ali/AliConfig.java

@@ -0,0 +1,44 @@
+package com.hys.app.pay.ali;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+
+@Configuration
+@ConfigurationProperties(prefix = "alipay")
+@Data
+public class AliConfig {
+    /**
+     * APPID
+     */
+    private String appId;
+    /**
+     * 应用私钥
+     */
+    private String appPrivateKey;
+    /**
+     * 阿里公钥
+     */
+    private String alipayPublicKey;
+    /**
+     * 阿里调用我们的地址【内网穿透】
+     */
+    private String notifyUrl;
+    /**
+     * 网关地址
+     */
+    private String serverUrl;
+    /**
+     * 数据格式
+     */
+    private String format;
+    /**
+     * 编码格式
+     */
+    private String charset;
+    /**
+     * 签名方式,签名算法
+     */
+    private String signType;
+}

+ 66 - 0
module-erp/src/main/java/com/hys/app/pay/ali/AliPayService.java

@@ -0,0 +1,66 @@
+package com.hys.app.pay.ali;
+
+import com.alipay.api.AlipayClient;
+import com.alipay.api.AlipayConfig;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.domain.AlipayTradeWapPayModel;
+import com.alipay.api.internal.util.AlipaySignature;
+import com.alipay.api.request.AlipayTradeWapPayRequest;
+import com.alipay.api.response.AlipayTradeWapPayResponse;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+@Service
+public class AliPayService {
+    @Resource
+    private AliConfig alipayConfig1;
+
+    public String pay(PayOrder payOrder) {
+        try {
+            AlipayConfig alipayConfig = new AlipayConfig();
+            alipayConfig.setServerUrl(alipayConfig1.getServerUrl());
+            alipayConfig.setAppId(alipayConfig1.getAppId());
+            alipayConfig.setPrivateKey(alipayConfig1.getAppPrivateKey());
+            alipayConfig.setFormat(alipayConfig1.getFormat());
+            alipayConfig.setAlipayPublicKey(alipayConfig1.getAlipayPublicKey());
+            alipayConfig.setCharset(alipayConfig1.getCharset());
+            alipayConfig.setSignType(alipayConfig1.getSignType());
+
+            AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);
+            AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
+            AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
+            model.setOutTradeNo(payOrder.getTraceNo());
+            model.setTotalAmount(payOrder.getTotalAmount().toString());
+            model.setSubject(payOrder.getSubject());
+            request.setBizModel(model);
+            AlipayTradeWapPayResponse response = alipayClient.pageExecute(request, "POST");
+            // 如果需要返回GET请求,请使用
+            // AlipayTradeWapPayResponse response = alipayClient.pageExecute(request, "GET");
+            String pageRedirectionData = response.getBody();
+            System.out.println(pageRedirectionData);
+
+
+
+
+
+            if (response.isSuccess()) {
+                return response.getBody();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+        public Boolean checkReturnParam (Map < String, String > map){
+            try {
+                return AlipaySignature.verifyV1(map, alipayConfig1.getAlipayPublicKey(), alipayConfig1.getCharset(), alipayConfig1.getSignType());
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+            return false;
+        }
+
+}

+ 29 - 0
module-erp/src/main/java/com/hys/app/pay/ali/AliReturnPay.java

@@ -0,0 +1,29 @@
+package com.hys.app.pay.ali;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.io.Serializable;
+
+//支付宝的回调实体类
+@Data
+@ToString
+@AllArgsConstructor
+@NoArgsConstructor
+public class AliReturnPay implements Serializable {
+    private static final long serialVersionUID = 8683949075381016639L;
+    // 开发者的app_id
+    private String app_id;
+    // 商户订单号
+    private String out_trade_no;
+    // 签名
+    private String sign;
+    // 交易状态
+    private String trade_status;
+    // 支付宝交易号
+    private String trade_no;
+    // 交易的金额
+    private String total_amount;
+}

+ 22 - 0
module-erp/src/main/java/com/hys/app/pay/ali/PayOrder.java

@@ -0,0 +1,22 @@
+package com.hys.app.pay.ali;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+//与阿里交互的对象
+@Data
+public class PayOrder {
+    private String traceNo;//我们的订单号
+
+    private Double totalAmount;//总金额
+
+    private String subject;//标题
+
+    private String alipayTraceNo;//阿里的流水号
+
+    private String[] queryOptions;//指定需要返回的参数
+
+    private LocalDateTime timeExpire;//绝对超时时间
+
+}

+ 36 - 0
module-erp/src/main/java/com/hys/app/pay/ali/WxConfig.java

@@ -0,0 +1,36 @@
+package com.hys.app.pay.ali;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "wx")
+public class WxConfig {
+    /**
+     *  商户号
+     */
+    private String merchantId;
+    /**
+     * 商户API私钥路径
+     */
+    private String privateKeyPath;
+    /**
+     * 序列号
+     */
+    private String merchantSerialNumber;
+    /**
+     *  商户APIV3密钥
+     */
+    private String apiV3Key;
+    /**
+     *  APPID
+     */
+    private String appid;
+
+    /**
+     *  回调地址
+     */
+    private String notifyUrl;
+}

+ 47 - 0
module-erp/src/main/java/com/hys/app/pay/ali/WxService.java

@@ -0,0 +1,47 @@
+package com.hys.app.pay.ali;
+
+import com.hys.app.framework.exception.ServiceException;
+import com.wechat.pay.java.core.Config;
+import com.wechat.pay.java.core.RSAAutoCertificateConfig;
+import com.wechat.pay.java.core.auth.WechatPay2Validator;
+import com.wechat.pay.java.service.payments.h5.model.Amount;
+import com.wechat.pay.java.service.payments.h5.H5Service;
+import com.wechat.pay.java.service.payments.h5.model.PrepayRequest;
+import com.wechat.pay.java.service.payments.h5.model.PrepayResponse;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Service
+public class WxService {
+    @Resource
+    private WxConfig wxConfig;
+
+    public PrepayResponse pay(PayOrder payOrder) {
+
+        try {
+            // 初始化SDK
+            Config config = new RSAAutoCertificateConfig.Builder()
+                    .merchantId(wxConfig.getMerchantId())
+                    .privateKeyFromPath(wxConfig.getPrivateKeyPath())
+                    .merchantSerialNumber(wxConfig.getMerchantSerialNumber())
+                    .apiV3Key(wxConfig.getApiV3Key())
+                    .build();
+            // 构建service
+            H5Service service = new H5Service.Builder().config(config).build();
+            PrepayRequest request = new PrepayRequest();
+            request.setAppid(wxConfig.getAppid());
+            request.setMchid(wxConfig.getMerchantId());
+            request.setOutTradeNo(payOrder.getTraceNo());
+            request.setTimeExpire(payOrder.getTimeExpire().toString());
+            Amount amount = new Amount();
+            amount.setTotal(payOrder.getTotalAmount().intValue()*100);
+            request.setAmount(amount);
+            request.setDescription(payOrder.getSubject());
+            return service.prepay(request);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        throw new ServiceException("拉起微信异常");
+    }
+}

+ 31 - 0
server/src/main/resources/application.yml

@@ -59,5 +59,36 @@ kuaidianiao:
     key: 9dc8ced0-8079-4b01-9c16-32a6e8b46677
     apiUrl: https://api.kdniao.com/api/dist
 
+alipay:
+  #APPID
+  appId: 2021004108689494
+  #沙箱应用-->应用信息-->开发信息-->接口加签方式-->系统默认密钥-->公钥模式-->查看-->应用私钥
+  appPrivateKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwjbDKtCtW9OHHGfOfbDV0Jn5cVSjTZglJpbRqmVLnWs1U51QQuOoB1ilriqWJDpmd0YApslxw13eGCAgdIuSwo2fBJiDdG8fLYzHuopQVNxIENK1WNL8ispnBuo8z+HrwheR2sTfFPXxEqTYyMQdtkbNu1PJ9GJD1EuJRXlvCkieFFlNklulzCCmOtzR2gFRoDaccTqBddbI8E4fpTAK9vDkrinRAbQsoWs6vdfth0qfMZFyvQFQtSRiX8JPfsMVgNsqOErPu0HqFrKPvhf3ZLJylRkEiY5+AzRO91OxsmhmQcNsdz+fpFCz2hJ5igVhssG0hHWn3o6cH5nqw4E7MwIDAQAB
+  #沙箱应用-->应用信息-->开发信息-->接口加签方式-->系统默认密钥-->公钥模式-->查看-->支付宝公钥
+  alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwjbDKtCtW9OHHGfOfbDV0Jn5cVSjTZglJpbRqmVLnWs1U51QQuOoB1ilriqWJDpmd0YApslxw13eGCAgdIuSwo2fBJiDdG8fLYzHuopQVNxIENK1WNL8ispnBuo8z+HrwheR2sTfFPXxEqTYyMQdtkbNu1PJ9GJD1EuJRXlvCkieFFlNklulzCCmOtzR2gFRoDaccTqBddbI8E4fpTAK9vDkrinRAbQsoWs6vdfth0qfMZFyvQFQtSRiX8JPfsMVgNsqOErPu0HqFrKPvhf3ZLJylRkEiY5+AzRO91OxsmhmQcNsdz+fpFCz2hJ5igVhssG0hHWn3o6cH5nqw4E7MwIDAQAB
+  #回调地址
+  notifyUrl:
+  #网关地址
+  serverUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do
+  #数据格式,推荐:json
+  format: json
+  #编码格式 推荐:utf-8
+  charset: UTF8
+  #签名方式,签名算法,推荐:RSA2
+  signType: RSA2
+
+
+wx:
+  #商户APIV3密钥
+  merchantId: 1639044836
+  #商户APIV3密钥
+  privateKeyPath: D:\Users\admin\Downloads\WXCertUtil\cert\apiclient_key.pem
+  #商户APIV3密钥
+  merchantSerialNumber: 492C5167AAB33F606EB2397CBB0D2B8B62F90B05
+  #商户APIV3密钥
+  apiV3Key: jfijti4ngjrgier90t304rjrfierurti
+  #APPID
+  appid: wx51e98f2dee35237d
+  notifyUrl: www.baidu.com