Browse Source

feat 0 支付工程

devlop
yang_shj 4 years ago
parent
commit
e11ddd3949
  1. 31
      payment-base-app/payment-base-app.iml
  2. 23
      payment-base-app/pom.xml
  3. 51
      payment-base-app/src/main/java/com/base/springcloud/aspect/config/RedisConfig.java
  4. 11
      payment-base-app/src/main/java/com/base/springcloud/bo/OrderBO.java
  5. 6
      payment-base-app/src/main/java/com/base/springcloud/client/PaymentClient.java
  6. 3
      payment-base-app/src/main/java/com/base/springcloud/constant/ErrorConstant.java
  7. 11
      payment-base-app/src/main/java/com/base/springcloud/controller/PaymentController.java
  8. 19
      payment-base-app/src/main/java/com/base/springcloud/dao/OrderBillMapper.java
  9. 6
      payment-base-app/src/main/java/com/base/springcloud/dao/SaleBillMapper.java
  10. 2
      payment-base-app/src/main/java/com/base/springcloud/entity/MerchantConfig.java
  11. 21
      payment-base-app/src/main/java/com/base/springcloud/entity/OrderBill.java
  12. 6
      payment-base-app/src/main/java/com/base/springcloud/service/BillService.java
  13. 13
      payment-base-app/src/main/java/com/base/springcloud/service/OrderBillService.java
  14. 46
      payment-base-app/src/main/java/com/base/springcloud/service/imp/BillServiceImp.java
  15. 21
      payment-base-app/src/main/java/com/base/springcloud/service/imp/MerchantServiceImp.java
  16. 46
      payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderBillServiceImp.java
  17. 2
      payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderServiceImp.java
  18. 7
      payment-base-app/src/main/java/com/base/springcloud/service/imp/PaymentServiceImp.java
  19. 4
      payment-base-app/src/main/java/com/base/springcloud/service/imp/WecPaymentServiceImp.java
  20. 6
      payment-base-app/src/main/java/com/base/springcloud/util/ParameterUtil.java
  21. 5
      payment-base-app/src/main/java/com/base/springcloud/util/TokenUtils.java
  22. 5
      payment-base-app/src/main/java/com/base/springcloud/wxsdk/WxpayUtils.java
  23. 4
      payment-base-app/src/main/resources/com/base/payment/mapper/MerchantConfigMapper.xml
  24. 106
      payment-base-app/src/main/resources/com/base/payment/mapper/OrderBillMapper.xml
  25. 18
      payment-base-app/src/main/resources/com/base/payment/mapper/SaleBillMapper.xml
  26. 13
      payment-base-app/src/main/resources/generatorConfig.xml

31
payment-base-app/payment-base-app.iml

@ -44,6 +44,7 @@
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-actuator:2.1.4.RELEASE" level="project" />
@ -64,6 +65,7 @@
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.2.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.6.RELEASE" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.springframework.boot:spring-boot-devtools:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.8" level="project" />
@ -113,14 +115,12 @@
<orderEntry type="library" name="Maven: com.github.wechatpay-apiv3:wechatpay-apache-httpclient:0.4.2" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.apache.httpcomponents:httpmime:4.5.8" level="project" />
<orderEntry type="library" name="Maven: commons-net:commons-net:3.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-redis:2.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-keyvalue:2.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:2.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-oxm:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-redis:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.lettuce:lettuce-core:5.1.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.34.Final" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.34.Final" level="project" />
@ -132,31 +132,6 @@
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.6.1" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.47" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-feign:1.4.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-openfeign:2.1.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:2.1.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-context:2.1.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.7.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.60" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.60" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-openfeign-core:2.1.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-ribbon:2.1.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-archaius:2.1.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-commons:2.1.1.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-crypto:5.1.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-core:10.1.0" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-slf4j:10.1.0" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign:feign-hystrix:10.1.0" level="project" />
<orderEntry type="library" name="Maven: com.netflix.archaius:archaius-core:0.7.6" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: com.google.code.findbugs:jsr305:3.0.1" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: commons-configuration:commons-configuration:1.8" level="project" />
<orderEntry type="library" name="Maven: com.netflix.hystrix:hystrix-core:1.5.18" level="project" />
<orderEntry type="library" name="Maven: io.reactivex:rxjava:1.2.0" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form-spring:3.2.2" level="project" />
<orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.3" level="project" />
<orderEntry type="library" name="Maven: io.github.openfeign.form:feign-form:3.2.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.12" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.11" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />

23
payment-base-app/pom.xml

@ -102,10 +102,6 @@
</dependency>-->
<!-- redis -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
@ -125,25 +121,6 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form-spring</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>io.github.openfeign.form</groupId>
<artifactId>feign-form</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>

51
payment-base-app/src/main/java/com/base/springcloud/aspect/config/RedisConfig.java

@ -0,0 +1,51 @@
package com.base.springcloud.aspect.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import javax.annotation.Resource;
@Configuration
@EnableCaching // 开启缓存支持
public class RedisConfig extends CachingConfigurerSupport {
@Resource
private LettuceConnectionFactory lettuceConnectionFactory;
/**
* RedisTemplate配置
*
* @param lettuceConnectionFactory
* @return
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
// 设置序列化
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, Visibility.ANY);
om.enableDefaultTyping(DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
// 配置redisTemplate
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(lettuceConnectionFactory);
RedisSerializer<?> stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);// key序列化
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);// value序列化
redisTemplate.setHashKeySerializer(stringSerializer);// Hash key序列化
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);// Hash value序列化
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}

11
payment-base-app/src/main/java/com/base/springcloud/bo/OrderBO.java

@ -12,17 +12,26 @@ import java.util.List;
@Data
public class OrderBO extends MchConfigEntity implements Serializable {
// 创建人ID
private String createId;
// 是否合并销售单据标志
private Boolean mergeFlag;
// 销售单据号:可用逗号分隔
private String billIds;
// 销售单据编号List
private List<String> billIdList;
// 子销售单据编号List
private List<String> childIdList;
// 订单金额
private BigDecimal amount;
// 销售单
private SaleBill saleBill;
private List<SaleBill> saleBillList;
// 支付订单
private Order order;

6
payment-base-app/src/main/java/com/base/springcloud/client/PaymentClient.java

@ -2,13 +2,11 @@ package com.base.springcloud.client;
import com.base.springcloud.base.CommonResult;
import com.base.springcloud.dto.MerchantConfigReqDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(value = "payment-service-client")
public interface PaymentClient {
@PostMapping(value = "/merchant/merchantConfig")
CommonResult paymentConfigure(@RequestBody MerchantConfigReqDTO merchantConfigDTO);
/*@PostMapping(value = "/merchant/merchantConfig")
CommonResult paymentConfigure(@RequestBody MerchantConfigReqDTO merchantConfigDTO);*/
}

3
payment-base-app/src/main/java/com/base/springcloud/constant/ErrorConstant.java

@ -16,7 +16,8 @@ public enum ErrorConstant {
MERCHANT_CONFIGURE_FAIL("RBS00011","商户支付信息配置失败!"),
USER_DEPART_RELATION_NEED("RBS00012","请用户先关联部门信息!"),
SAVE_PAY_DEPART_CONFIG_FAIL("RBS00013","添加部门商户支付配置信息失败!"),
SALE_BILL__INVALID("RBS00014","无有效销售单据!");
SALE_BILL__INVALID("RBS00014","无有效销售单据!"),
MERCHANT_PAY_CERT_READ_FAIL("RBS00015","支付证书读取失败!");
private String code;
private String message;

11
payment-base-app/src/main/java/com/base/springcloud/controller/PaymentController.java

@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@RestController
@ -38,8 +39,9 @@ public class PaymentController {
@ApiOperation(value = "native下单", notes = "微信native下单")
@LoginRequired(department=true)
@GetMapping("/nativePlaceOrder")
public ReportResult nativePlaceOrder(@RequestParam String salesBillId) {
OrderBO orderBO = parameterUtil.nativePlaceOrderBefore(salesBillId);
public ReportResult nativePlaceOrder(@RequestParam String salesBillId, HttpServletRequest request) {
String createId = (String)request.getAttribute("createId");
OrderBO orderBO = parameterUtil.nativePlaceOrderBefore(salesBillId,createId);
String codeUrl = paymentService.placeOrder(orderBO);
return new ReportResult(parameterUtil.nativePlaceOrderAfter(codeUrl));
}
@ -47,8 +49,9 @@ public class PaymentController {
@ApiOperation(value = "销售单合并native下单", notes = "销售单合并native下单")
@LoginRequired(department=true)
@GetMapping("/mergeNative")
public ReportResult mergeNative(@RequestParam String billIds) {
OrderBO orderBO = parameterUtil.mergeNativeBefore(billIds);
public ReportResult mergeNative(@RequestParam String billIds,HttpServletRequest request) {
String createId = (String)request.getAttribute("createId");
OrderBO orderBO = parameterUtil.mergeNativeBefore(billIds,createId);
String codeUrl = paymentService.placeOrder(orderBO);
return new ReportResult(parameterUtil.mergeNativeAfter(codeUrl));
}

19
payment-base-app/src/main/java/com/base/springcloud/dao/OrderBillMapper.java

@ -0,0 +1,19 @@
package com.base.springcloud.dao;
import com.base.springcloud.entity.OrderBill;
import org.springframework.stereotype.Repository;
@Repository
public interface OrderBillMapper {
int deleteByPrimaryKey(String id);
int insert(OrderBill record);
int insertSelective(OrderBill record);
OrderBill selectByPrimaryKey(String id);
int updateByPrimaryKeySelective(OrderBill record);
int updateByPrimaryKey(OrderBill record);
}

6
payment-base-app/src/main/java/com/base/springcloud/dao/SaleBillMapper.java

@ -4,7 +4,6 @@ import com.base.springcloud.entity.SaleBill;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.math.BigDecimal;
import java.util.List;
@Repository
@ -27,5 +26,8 @@ public interface SaleBillMapper {
int writeOffBill(SaleBill bill);
// 合并销售单据金额
List<BigDecimal> mergeBillAmount(@Param("ids") String[] billIdArray);
List<SaleBill> mergeBill(@Param("ids") String[] billIdArray);
// 获取子销售单据
List<SaleBill> childBill(@Param("ids") List<String> billIdList);
}

2
payment-base-app/src/main/java/com/base/springcloud/entity/MerchantConfig.java

@ -46,7 +46,7 @@ public class MerchantConfig extends BaseEntity {
private String createId;
/**
* 创建部门ID
* 创建公司ID
*/
private String createCompanyId;

21
payment-base-app/src/main/java/com/base/springcloud/entity/OrderBill.java

@ -0,0 +1,21 @@
package com.base.springcloud.entity;
import lombok.Data;
import java.util.Date;
@Data
public class OrderBill {
private String id;
private String orderId;
private String billId;
private String soureBillId;
private String createId;
private Date createTime;
}

6
payment-base-app/src/main/java/com/base/springcloud/service/BillService.java

@ -26,4 +26,10 @@ public interface BillService {
* @param orderBO
*/
void mergeBillAmount(OrderBO orderBO);
/**
* 获取子销售单据
* @param orderBO
*/
void childBill(OrderBO orderBO,Boolean rootFlag);
}

13
payment-base-app/src/main/java/com/base/springcloud/service/OrderBillService.java

@ -0,0 +1,13 @@
package com.base.springcloud.service;
import com.base.springcloud.bo.OrderBO;
public interface OrderBillService {
/**
* 登记销售单据和订单关联
* @param orderBO
*/
void registerOrderBill(OrderBO orderBO);
}

46
payment-base-app/src/main/java/com/base/springcloud/service/imp/BillServiceImp.java

@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@ -38,7 +39,9 @@ public class BillServiceImp implements BillService {
throw new BusinessException(ErrorConstant.BILL_INVALID);
}
orderBO.setAmount(queryResult.getTotalAmount());
orderBO.setSaleBill(queryResult);
List<SaleBill> saleBillList = new ArrayList<>();
saleBillList.add(queryResult);
orderBO.setSaleBillList(saleBillList);
}
/**
@ -67,11 +70,48 @@ public class BillServiceImp implements BillService {
throw new BusinessException(ErrorConstant.NULL_OBJ);
}
String[] billIdArray = billIds.split(",");
List<BigDecimal> billAmountList = saleBillMapper.mergeBillAmount(billIdArray);
List<SaleBill> billAmountList = saleBillMapper.mergeBill(billIdArray);
if(!Optional.ofNullable(billAmountList).isPresent())
throw new BusinessException(ErrorConstant.SALE_BILL__INVALID);
BigDecimal orderAmount = new BigDecimal(0);
billAmountList.forEach(amount-> orderAmount.add(amount));
List<String> billIdList = new ArrayList<>();
billAmountList.forEach(
bill-> {
billIdList.add(bill.getId());
orderAmount.add(bill.getTotalAmount());
});
orderBO.setAmount(orderAmount);
orderBO.setSaleBillList(billAmountList);
orderBO.setBillIdList(billIdList);
}
/**
* 获取子销售单据
* @param orderBO
*/
@Override
public void childBill(OrderBO orderBO,Boolean rootFlag) {
List<String> billIdList = orderBO.getBillIdList();
List<String> childBillIdList;
if(rootFlag)
childBillIdList = billIdList;
else
childBillIdList = orderBO.getChildIdList();
BigDecimal amount = orderBO.getAmount();
List<SaleBill> saleBillList = saleBillMapper.childBill(childBillIdList);
// 查询结果不存在结束流程
if(!Optional.ofNullable(saleBillList).isPresent()) return;
childBillIdList.clear();
saleBillList.forEach(saleBill -> {
amount.add(saleBill.getTotalAmount());
billIdList.add(saleBill.getId());
childBillIdList.add(saleBill.getId());
});
// 所有的子单据编号需要存储
orderBO.setBillIdList(billIdList);
// 重置需作为父节点查询的单据编号
orderBO.setChildIdList(childBillIdList);
// 递归
childBill(orderBO,false);
}
}

21
payment-base-app/src/main/java/com/base/springcloud/service/imp/MerchantServiceImp.java

@ -18,6 +18,9 @@ import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Date;
import java.util.List;
import java.util.Optional;
@ -132,7 +135,8 @@ public class MerchantServiceImp implements MerchantService {
}
orderBO.setAppId(merchantConfig.getAppId());
orderBO.setMchPrivateKey(merchantConfig.getMchPrivateKey());
orderBO.setCertificate(merchantConfig.getCertPath());
String certificate = readCert(merchantConfig.getCertPath());
orderBO.setCertificate(certificate);
orderBO.setSerialNo(merchantConfig.getSerialNo());
}
@ -157,6 +161,21 @@ public class MerchantServiceImp implements MerchantService {
return "文件上传失败!";
}
/**
* 文件读取
* @throws IOException
*/
public String readCert(String certPath) {
byte[] bytes;
try{
bytes = Files.readAllBytes(Paths.get(certPath));
}catch (IOException e) {
throw new BusinessException(ErrorConstant.MERCHANT_PAY_CERT_READ_FAIL);
}
return new String(bytes, StandardCharsets.UTF_8);
}
/**
* 测试文件删除
* @param filePath

46
payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderBillServiceImp.java

@ -0,0 +1,46 @@
package com.base.springcloud.service.imp;
import com.base.springcloud.bo.OrderBO;
import com.base.springcloud.dao.OrderBillMapper;
import com.base.springcloud.entity.Order;
import com.base.springcloud.entity.OrderBill;
import com.base.springcloud.entity.SaleBill;
import com.base.springcloud.service.OrderBillService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@Service
public class OrderBillServiceImp implements OrderBillService {
Logger logger = LoggerFactory.getLogger(OrderBillServiceImp.class);
@Autowired
private OrderBillMapper orderBillMapper;
/**
* 登记销售单据和订单关联
*
* @param orderBO
*/
@Override
public void registerOrderBill(OrderBO orderBO) {
Order order = orderBO.getOrder();
List<SaleBill> saleBillList = orderBO.getSaleBillList();
saleBillList.forEach(item -> {
OrderBill orderBill = new OrderBill();
orderBill.setId(UUID.randomUUID().toString().replace("-", ""));
orderBill.setCreateTime(new Date());
orderBill.setSoureBillId(item.getSourceId());
orderBill.setBillId(item.getId());
orderBill.setOrderId(order.getId());
orderBillMapper.insert(orderBill);
});
}
}

2
payment-base-app/src/main/java/com/base/springcloud/service/imp/OrderServiceImp.java

@ -27,7 +27,6 @@ public class OrderServiceImp implements OrderService {
@Override
public void registerOrder(OrderBO orderBO) {
SaleBill saleBill = orderBO.getSaleBill();
BigDecimal amount = orderBO.getAmount();
if(amount.compareTo(BigDecimal.ZERO) <= 0){
throw new BusinessException(ErrorConstant.BILL_AMOUNT_ERR);
@ -45,7 +44,6 @@ public class OrderServiceImp implements OrderService {
order.setTimeStamp(new Date());
order.setMchId(orderBO.getMchId());
order.setOrderState(PaymentConstant.WAIT);
order.setSourceBillId(Optional.ofNullable(saleBill.getSourceId()).orElse(saleBill.getId()));
order.setOrderAmount(DecimalUtil.multiply(amount,new BigDecimal(100)).setScale(0,BigDecimal.ROUND_DOWN));
orderMapper.insert(order);
orderBO.setOrder(order);

7
payment-base-app/src/main/java/com/base/springcloud/service/imp/PaymentServiceImp.java

@ -33,6 +33,9 @@ public class PaymentServiceImp implements PaymentService {
@Autowired
private WecPaymentService wecPaymentService;
@Autowired
private OrderBillService orderBillService;
@Override
public String placeOrder(OrderBO orderBO){
// 参数检查
@ -43,10 +46,14 @@ public class PaymentServiceImp implements PaymentService {
else
// 销售单据核查
billService.billCheck(orderBO);
// 获取子销售单据
billService.childBill(orderBO,true);
// 查询商户支付信息配置
merchantService.claimMerchantConfig(orderBO);
// 登记订单
orderService.registerOrder(orderBO);
// 登记销售单据和订单关联
orderBillService.registerOrderBill(orderBO);
// 请求微信生成二维码
return wecPaymentService.wecNativePay(orderBO);
}

4
payment-base-app/src/main/java/com/base/springcloud/service/imp/WecPaymentServiceImp.java

@ -94,7 +94,7 @@ public class WecPaymentServiceImp implements WecPaymentService {
return WxpayUtils.queryWxOrder(url,orderBO.getMchId(),orderBO.getMchPrivateKey(),orderBO.getCertificate(),orderBO.getSerialNo());
}
public static void main(String[] args) {
/*public static void main(String[] args) {
OrderBO orderBO = new OrderBO();
orderBO.setAppId("wxe61ee6c21345d74d");
orderBO.setMchId("1537100771");
@ -128,6 +128,6 @@ public class WecPaymentServiceImp implements WecPaymentService {
orderBO.getSerialNo());
System.out.println("Native支付订单 :{} " + order.getOrderNo() + " 接收响应数据 :{} "+ objectNode.toString());
System.out.println(objectNode.toString());
}
}*/
}

6
payment-base-app/src/main/java/com/base/springcloud/util/ParameterUtil.java

@ -18,9 +18,10 @@ public class ParameterUtil {
* @param billId
* @return
*/
public OrderBO nativePlaceOrderBefore(String billId){
public OrderBO nativePlaceOrderBefore(String billId,String createId){
OrderBO orderBO = new OrderBO();
orderBO.setBillIds(billId);
orderBO.setCreateId(createId);
orderBO.setMergeFlag(false);
orderBO.setMchId(PaymentConstant.DEFAULT_MCH_ID);
return orderBO;
@ -53,10 +54,11 @@ public class ParameterUtil {
return refundBO;
}
public OrderBO mergeNativeBefore(String billIds) {
public OrderBO mergeNativeBefore(String billIds,String createId) {
OrderBO orderBO = new OrderBO();
orderBO.setMergeFlag(true);
orderBO.setBillIds(billIds);
orderBO.setCreateId(createId);
return orderBO;
}

5
payment-base-app/src/main/java/com/base/springcloud/util/TokenUtils.java

@ -50,7 +50,7 @@ public class TokenUtils {
User user = userService.getUser(username);
// 校验token是否超时失效 & 或者账号密码是否错误
//this.TokenValidity(token,user);
TokenValidity(token,user);
return user;
}
@ -62,7 +62,8 @@ public class TokenUtils {
* @param user
*/
public void TokenValidity(String token, User user) {
String redisToken = String.valueOf(redisService.get(PaymentConstant.TOKEN_PREFIX + token));
String key = PaymentConstant.TOKEN_PREFIX + token;
String redisToken = String.valueOf(redisService.get(key));
if (StringUtils.isBlank(redisToken))
throw new BusinessException(ErrorConstant.TOKEN_EXPIRATION_DATE);
if (!JwtUtil.verify(redisToken, user.getUserName(), user.getPassword()))

5
payment-base-app/src/main/java/com/base/springcloud/wxsdk/WxpayUtils.java

@ -216,8 +216,9 @@ public class WxpayUtils {
* @throws UnsupportedEncodingException
*/
public static CloseableHttpClient getClient(String mchid, String serialNo, PrivateKey privateKey, String certificate) throws CertificateException, IOException {
//byte[] bytes = certificate.getBytes(StandardCharsets.UTF_8);
ByteArrayInputStream base = new ByteArrayInputStream(new BASE64Decoder().decodeBuffer(certificate));
byte[] bytes = certificate.getBytes(StandardCharsets.UTF_8);
// new BASE64Decoder().decodeBuffer(certificate)
ByteArrayInputStream base = new ByteArrayInputStream(bytes);
List<X509Certificate> certs = new ArrayList<>();
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
X509Certificate cert = null;

4
payment-base-app/src/main/resources/com/base/payment/mapper/MerchantConfigMapper.xml

@ -10,7 +10,7 @@
<result column="mch_id" jdbcType="VARCHAR" property="mchId"/>
<result column="mch_private_key" jdbcType="VARCHAR" property="mchPrivateKey"/>
<result column="create_id" jdbcType="VARCHAR" property="createId"/>
<result column="create_depart_id" jdbcType="VARCHAR" property="createDepartId"/>
<result column="create_company_id" jdbcType="VARCHAR" property="createCompanyId"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_id" jdbcType="VARCHAR" property="updateId"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
@ -19,7 +19,7 @@
<sql id="Base_Column_List">
id,app_id,api_key,cert_path,serial_no,mch_id,mch_private_key,
create_id,create_depart_id,create_time,update_id,update_time,time_stamp
create_id,create_company_id,create_time,update_id,update_time,time_stamp
</sql>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String">

106
payment-base-app/src/main/resources/com/base/payment/mapper/OrderBillMapper.xml

@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.base.springcloud.dao.OrderBillMapper">
<resultMap id="BaseResultMap" type="com.base.springcloud.entity.OrderBill">
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="order_id" jdbcType="VARCHAR" property="orderId" />
<result column="bill_id" jdbcType="VARCHAR" property="billId" />
<result column="soure_bill_id" jdbcType="VARCHAR" property="soureBillId" />
<result column="create_id" jdbcType="VARCHAR" property="createId" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
</resultMap>
<sql id="Base_Column_List">
id, order_id, bill_id, soure_bill_id, create_id, create_time
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from pay_order_bill
where id = #{id,jdbcType=VARCHAR}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String">
delete from pay_order_bill
where id = #{id,jdbcType=VARCHAR}
</delete>
<insert id="insert" parameterType="com.base.springcloud.entity.OrderBill">
insert into pay_order_bill (id, order_id, bill_id,
soure_bill_id, create_id, create_time
)
values (#{id,jdbcType=VARCHAR}, #{orderId,jdbcType=VARCHAR}, #{billId,jdbcType=VARCHAR},
#{soureBillId,jdbcType=VARCHAR}, #{createId,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}
)
</insert>
<insert id="insertSelective" parameterType="com.base.springcloud.entity.OrderBill">
insert into pay_order_bill
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="orderId != null">
order_id,
</if>
<if test="billId != null">
bill_id,
</if>
<if test="soureBillId != null">
soure_bill_id,
</if>
<if test="createId != null">
create_id,
</if>
<if test="createTime != null">
create_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=VARCHAR},
</if>
<if test="orderId != null">
#{orderId,jdbcType=VARCHAR},
</if>
<if test="billId != null">
#{billId,jdbcType=VARCHAR},
</if>
<if test="soureBillId != null">
#{soureBillId,jdbcType=VARCHAR},
</if>
<if test="createId != null">
#{createId,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
#{createTime,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.base.springcloud.entity.OrderBill">
update pay_order_bill
<set>
<if test="orderId != null">
order_id = #{orderId,jdbcType=VARCHAR},
</if>
<if test="billId != null">
bill_id = #{billId,jdbcType=VARCHAR},
</if>
<if test="soureBillId != null">
soure_bill_id = #{soureBillId,jdbcType=VARCHAR},
</if>
<if test="createId != null">
create_id = #{createId,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=TIMESTAMP},
</if>
</set>
where id = #{id,jdbcType=VARCHAR}
</update>
<update id="updateByPrimaryKey" parameterType="com.base.springcloud.entity.OrderBill">
update pay_order_bill
set order_id = #{orderId,jdbcType=VARCHAR},
bill_id = #{billId,jdbcType=VARCHAR},
soure_bill_id = #{soureBillId,jdbcType=VARCHAR},
create_id = #{createId,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=VARCHAR}
</update>
</mapper>

18
payment-base-app/src/main/resources/com/base/payment/mapper/SaleBillMapper.xml

@ -53,6 +53,9 @@
lock_amount, source_no, is_same_settle, is_turn_sale, logistics_no, is_platform_supplier,
sale_no, is_delivery, is_auto, attachment, bill_proc_status, is_ref_stk
</sql>
<sql id="Merge_Column_List">
id,total_amount,source_id
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
@ -544,12 +547,23 @@
where id = #{id,jdbcType=VARCHAR}
</update>
<select id="mergeBillAmount" resultType="java.math.BigDecimal">
select total_amount
<select id="mergeBill" resultType="java.math.BigDecimal">
select
<include refid="Merge_Column_List" />
from stk_io_bill
where id in
<foreach collection="ids" item="item" open="(" separator="," close=")">
#{item,jdbcType=VARCHAR}
</foreach>
</select>
<select id="childBill" resultType="java.math.BigDecimal">
select
<include refid="Merge_Column_List" />
from stk_io_bill
where source_id in
<foreach collection="ids" item="item" open="(" separator="," close=")">
#{item,jdbcType=VARCHAR}
</foreach>
</select>
</mapper>

13
payment-base-app/src/main/resources/generatorConfig.xml

@ -60,23 +60,18 @@
<!-- tableName为对应的数据库表 -->
<!-- domainObjectName是要生成的实体类 -->
<!-- enable*ByExample是否生成 example类 -->
<table tableName="pay_refund" domainObjectName="Refund"
<table tableName="pay_order_bill" domainObjectName="OrderBill"
enableCountByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" enableUpdateByExample="false">
<!-- 忽略列,不生成bean 字段 -->
<!-- <ignoreColumn column="FRED" /> -->
<!-- 指定列的java数据类型 -->
<columnOverride column="id" property="id" jdbcType="VARCHAR" />
<columnOverride column="refund_order_no" property="refundOrderNo" jdbcType="VARCHAR" />
<columnOverride column="refund_time" property="refundTime" jdbcType="TIMESTAMP" />
<columnOverride column="order_id" property="orderId" jdbcType="VARCHAR" />
<columnOverride column="bill_id" property="billId" jdbcType="VARCHAR" />
<columnOverride column="soure_bill_id" property="soureBillId" jdbcType="VARCHAR" />
<columnOverride column="create_id" property="createId" jdbcType="VARCHAR" />
<columnOverride column="create_time" property="createTime" jdbcType="TIMESTAMP" />
<columnOverride column="orig_order_no" property="origOrderNo" jdbcType="VARCHAR" />
<columnOverride column="orig_order_time" property="origOrderTime" jdbcType="TIMESTAMP" />
<columnOverride column="source_bill_id" property="sourceBillId" jdbcType="VARCHAR" />
<columnOverride column="reason" property="reason" jdbcType="VARCHAR" />
<columnOverride column="refund_state" property="refundState" jdbcType="INTEGER" />
<columnOverride column="refund_retry_count" property="refundRetryCount" jdbcType="INTEGER" />
</table>
</context>
</generatorConfiguration>
Loading…
Cancel
Save