添加新版收银系统支付

This commit is contained in:
韩鹏辉
2024-05-17 10:51:30 +08:00
parent 09e9b172ee
commit e64bce5e93
5 changed files with 238 additions and 198 deletions

11
pom.xml
View File

@@ -12,6 +12,7 @@
<groupId>com.chaozhangui.system.cashservice</groupId> <groupId>com.chaozhangui.system.cashservice</groupId>
<artifactId>cashier-client</artifactId> <artifactId>cashier-client</artifactId>
<version>1.0.0</version> <version>1.0.0</version>
<packaging>pom</packaging>
<properties> <properties>
<maven.compiler.source>8</maven.compiler.source> <maven.compiler.source>8</maven.compiler.source>
@@ -48,11 +49,11 @@
<artifactId>hutool-all</artifactId> <artifactId>hutool-all</artifactId>
<version>4.5.18</version> <version>4.5.18</version>
</dependency> </dependency>
<dependency> <!-- <dependency>-->
<groupId>com.alibaba</groupId> <!-- <groupId>com.alibaba</groupId>-->
<artifactId>fastjson</artifactId> <!-- <artifactId>fastjson</artifactId>-->
<version>1.2.9</version> <!-- <version>1.2.9</version>-->
</dependency> <!-- </dependency>-->
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>

View File

@@ -23,6 +23,10 @@ public class TbMerchantThirdApply implements Serializable {
private String appToken; private String appToken;
private String smallAppid;
private String storeId;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public Integer getId() { public Integer getId() {
@@ -104,4 +108,20 @@ public class TbMerchantThirdApply implements Serializable {
public void setAppToken(String appToken) { public void setAppToken(String appToken) {
this.appToken = appToken == null ? null : appToken.trim(); this.appToken = appToken == null ? null : appToken.trim();
} }
public String getSmallAppid() {
return smallAppid;
}
public void setSmallAppid(String smallAppid) {
this.smallAppid = smallAppid;
}
public String getStoreId() {
return storeId;
}
public void setStoreId(String storeId) {
this.storeId = storeId;
}
} }

View File

@@ -8,13 +8,13 @@ import com.chaozhanggui.system.cashierservice.entity.*;
import com.chaozhanggui.system.cashierservice.entity.po.OrderDetailPo; import com.chaozhanggui.system.cashierservice.entity.po.OrderDetailPo;
import com.chaozhanggui.system.cashierservice.exception.MsgException; import com.chaozhanggui.system.cashierservice.exception.MsgException;
import com.chaozhanggui.system.cashierservice.model.ReturnOrderReq; import com.chaozhanggui.system.cashierservice.model.ReturnOrderReq;
import com.chaozhanggui.system.cashierservice.model.ReturnWTZInfo;
import com.chaozhanggui.system.cashierservice.model.ScanPayReq; import com.chaozhanggui.system.cashierservice.model.ScanPayReq;
import com.chaozhanggui.system.cashierservice.model.TradeQueryReq; import com.chaozhanggui.system.cashierservice.model.TradeQueryReq;
import com.chaozhanggui.system.cashierservice.rabbit.RabbitProducer; import com.chaozhanggui.system.cashierservice.rabbit.RabbitProducer;
import com.chaozhanggui.system.cashierservice.sign.CodeEnum; import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
import com.chaozhanggui.system.cashierservice.sign.Result; import com.chaozhanggui.system.cashierservice.sign.Result;
import com.chaozhanggui.system.cashierservice.thirdpay.resp.MainScanResp; import com.chaozhanggui.system.cashierservice.thirdpay.resp.MainScanResp;
import com.chaozhanggui.system.cashierservice.thirdpay.resp.OrderReturnResp;
import com.chaozhanggui.system.cashierservice.thirdpay.resp.OrderStatusQueryResp; import com.chaozhanggui.system.cashierservice.thirdpay.resp.OrderStatusQueryResp;
import com.chaozhanggui.system.cashierservice.thirdpay.resp.PublicResp; import com.chaozhanggui.system.cashierservice.thirdpay.resp.PublicResp;
import com.chaozhanggui.system.cashierservice.thirdpay.service.ThirdPayService; import com.chaozhanggui.system.cashierservice.thirdpay.service.ThirdPayService;
@@ -30,8 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.DecimalFormat; import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.*; import java.util.*;
@Service @Service
@@ -74,37 +73,33 @@ public class PayService {
@Autowired @Autowired
TbUserInfoMapper tbUserInfoMapper; TbUserInfoMapper tbUserInfoMapper;
@Autowired
ThirdPayService thirdPayService;
@Autowired
TbShopInfoMapper tbShopInfoMapper;
@Autowired
TbQuickPayMapper tbQuickPayMapper;
@Value("${gateway.url}") @Value("${gateway.url}")
private String gateWayUrl; private String gateWayUrl;
@Value("${client.backUrl}") @Value("${client.backUrl}")
private String backUrl; private String backUrl;
@Value("${thirdPay.payType}") @Value("${thirdPay.payType}")
private String thirdPayType; private String thirdPayType;
@Value("${thirdPay.url}") @Value("${thirdPay.url}")
private String url; private String url;
@Value("${thirdPay.callBack}") @Value("${thirdPay.callBack}")
private String callBack; private String callBack;
public static void main(String[] args) {
@Autowired System.out.printf("%.2f%n", new BigDecimal(1).setScale(2, RoundingMode.DOWN));
ThirdPayService thirdPayService;
}
public Result queryPayType(String shopId) { public Result queryPayType(String shopId) {
return Result.success(CodeEnum.SUCCESS, tbShopPayTypeMapper.selectByShopId(shopId)); return Result.success(CodeEnum.SUCCESS, tbShopPayTypeMapper.selectByShopId(shopId));
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result scanPay(String orderId, String authCode, String ip, String token) { public Result scanPay(String orderId, String authCode, String ip, String token) {
if (ObjectUtil.isEmpty(orderId) || ObjectUtil.isEmpty(authCode) || ObjectUtil.isEmpty(ip)) { if (ObjectUtil.isEmpty(orderId) || ObjectUtil.isEmpty(authCode) || ObjectUtil.isEmpty(ip)) {
@@ -123,12 +118,12 @@ public class PayService {
} }
List<TbCashierCart> cashierCarts= tbCashierCartMapper.selectByOrderId(orderId,"create"); List<TbCashierCart> cashierCarts = tbCashierCartMapper.selectByOrderId(orderId, "create");
if(ObjectUtil.isEmpty(cashierCarts)||ObjectUtil.isNull(cashierCarts)){ if (ObjectUtil.isEmpty(cashierCarts) || ObjectUtil.isNull(cashierCarts)) {
return Result.fail(CodeEnum.CARTEXIST); return Result.fail(CodeEnum.CARTEXIST);
} }
StringBuffer body=new StringBuffer(); StringBuffer body = new StringBuffer();
for (TbCashierCart cashierCart : cashierCarts) { for (TbCashierCart cashierCart : cashierCarts) {
body.append(cashierCart.getName()); body.append(cashierCart.getName());
} }
@@ -195,14 +190,14 @@ public class PayService {
orderInfo.setUpdatedAt(System.currentTimeMillis()); orderInfo.setUpdatedAt(System.currentTimeMillis());
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
if("ysk".equals(thirdPayType)){ if ("ysk".equals(thirdPayType)) {
ScanPayReq scanPayReq = new ScanPayReq(); ScanPayReq scanPayReq = new ScanPayReq();
scanPayReq.setAppId(thirdApply.getAppId()); scanPayReq.setAppId(thirdApply.getAppId());
scanPayReq.setTimestamp(System.currentTimeMillis()); scanPayReq.setTimestamp(System.currentTimeMillis());
scanPayReq.setAuthCode(authCode); scanPayReq.setAuthCode(authCode);
scanPayReq.setNotifyUrl(backUrl); scanPayReq.setNotifyUrl(backUrl);
scanPayReq.setConsumeFee(payment.getAmount().setScale(2, BigDecimal.ROUND_DOWN).toPlainString()); scanPayReq.setConsumeFee(payment.getAmount().setScale(2, RoundingMode.DOWN).toPlainString());
Map<String, Object> map = BeanUtil.transBean2Map(scanPayReq); Map<String, Object> map = BeanUtil.transBean2Map(scanPayReq);
scanPayReq.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true)); scanPayReq.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true));
@@ -258,21 +253,21 @@ public class PayService {
return Result.fail(object.getString("msg")); return Result.fail(object.getString("msg"));
} }
} }
}else { } else {
String reqbody=""; String reqbody = "";
if(body.length()>15){ if (body.length() > 15) {
reqbody=body.substring(0,6).concat("....").concat(body.substring(body.length()-6,body.length())).toString(); reqbody = body.substring(0, 6).concat("....").concat(body.substring(body.length() - 6, body.length()));
}else { } else {
reqbody=body.toString(); reqbody = body.toString();
} }
PublicResp<MainScanResp> publicResp= thirdPayService.mainScan(url,thirdApply.getAppId(),reqbody,reqbody,payment.getAmount().setScale(2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(100)).longValue(),payType.equals("wechatPay")?"wx212769170d2c6b2a":null,authCode,orderInfo.getOrderNo(),"S2405103298",callBack,thirdApply.getAppToken()); PublicResp<MainScanResp> publicResp = thirdPayService.mainScan(url, thirdApply.getAppId(), reqbody, reqbody, payment.getAmount().setScale(2, RoundingMode.DOWN).multiply(new BigDecimal(100)).longValue(), payType.equals("wechatPay") ? thirdApply.getSmallAppid() : null, authCode, orderInfo.getOrderNo(), thirdApply.getStoreId(), callBack, thirdApply.getAppToken());
if(ObjectUtil.isNotNull(publicResp)&&ObjectUtil.isNotEmpty(publicResp)){ if (ObjectUtil.isNotNull(publicResp) && ObjectUtil.isNotEmpty(publicResp)) {
if("000000".equals(publicResp.getCode())){ if ("000000".equals(publicResp.getCode())) {
MainScanResp mainScanResp= publicResp.getObjData(); MainScanResp mainScanResp = publicResp.getObjData();
if("TRADE_SUCCESS".equals(mainScanResp.getState())){ if ("TRADE_SUCCESS".equals(mainScanResp.getState())) {
payment.setTradeNumber(mainScanResp.getPayOrderId()); payment.setTradeNumber(mainScanResp.getPayOrderId());
payment.setUpdatedAt(System.currentTimeMillis()); payment.setUpdatedAt(System.currentTimeMillis());
tbOrderPaymentMapper.updateByPrimaryKeySelective(payment); tbOrderPaymentMapper.updateByPrimaryKeySelective(payment);
@@ -299,7 +294,7 @@ public class PayService {
producer.printMechine(orderId); producer.printMechine(orderId);
return Result.success(CodeEnum.SUCCESS, mainScanResp); return Result.success(CodeEnum.SUCCESS, mainScanResp);
}else if("TRADE_AWAIT".equals(mainScanResp.getState())){ } else if ("TRADE_AWAIT".equals(mainScanResp.getState())) {
orderInfo.setStatus("paying"); orderInfo.setStatus("paying");
orderInfo.setPayOrderNo(payment.getTradeNumber()); orderInfo.setPayOrderNo(payment.getTradeNumber());
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
@@ -318,7 +313,6 @@ public class PayService {
return Result.fail("失败"); return Result.fail("失败");
} }
public Result queryOrder(String orderId, String token) { public Result queryOrder(String orderId, String token) {
if (ObjectUtil.isEmpty(orderId)) { if (ObjectUtil.isEmpty(orderId)) {
return Result.fail(CodeEnum.PARAM); return Result.fail(CodeEnum.PARAM);
@@ -339,46 +333,46 @@ public class PayService {
TbOrderPayment tbOrderPayment = tbOrderPaymentMapper.selectByOrderId(orderId); TbOrderPayment tbOrderPayment = tbOrderPaymentMapper.selectByOrderId(orderId);
if (ObjectUtil.isNotEmpty(tbOrderPayment)) { if (ObjectUtil.isNotEmpty(tbOrderPayment)) {
if("ysk".equals(thirdPayType)){ if ("ysk".equals(thirdPayType)) {
TradeQueryReq tradeQueryReq = new TradeQueryReq(); TradeQueryReq tradeQueryReq = new TradeQueryReq();
tradeQueryReq.setAppId(thirdApply.getAppId()); tradeQueryReq.setAppId(thirdApply.getAppId());
tradeQueryReq.setTimestamp(System.currentTimeMillis()); tradeQueryReq.setTimestamp(System.currentTimeMillis());
tradeQueryReq.setOrderNumber(tbOrderPayment.getTradeNumber()); tradeQueryReq.setOrderNumber(tbOrderPayment.getTradeNumber());
Map<String, Object> map = BeanUtil.transBean2Map(tradeQueryReq); Map<String, Object> map = BeanUtil.transBean2Map(tradeQueryReq);
tradeQueryReq.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true)); tradeQueryReq.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true));
ResponseEntity<String> response = restTemplate.postForEntity(gateWayUrl.concat("merchantOrder/tradeQuery"), tradeQueryReq, String.class); ResponseEntity<String> response = restTemplate.postForEntity(gateWayUrl.concat("merchantOrder/tradeQuery"), tradeQueryReq, String.class);
if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) { if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) {
JSONObject object = JSONObject.parseObject(response.getBody()); JSONObject object = JSONObject.parseObject(response.getBody());
if (object.get("code").equals("0")) { if (object.get("code").equals("0")) {
JSONObject data = object.getJSONObject("data"); JSONObject data = object.getJSONObject("data");
if ("1".equals(data.getString("status"))) { if ("1".equals(data.getString("status"))) {
orderInfo.setStatus("closed"); orderInfo.setStatus("closed");
orderInfo.setPayOrderNo(tbOrderPayment.getTradeNumber()); orderInfo.setPayOrderNo(tbOrderPayment.getTradeNumber());
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
//更新购物车状态 //更新购物车状态
int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final"); int cartCount = tbCashierCartMapper.updateByOrderId(orderId, "final");
log.info("更新购物车:{}", cartCount); log.info("更新购物车:{}", cartCount);
tbOrderDetailMapper.updateStatusByOrderIdAndStatus(Integer.valueOf(orderId), "closed"); tbOrderDetailMapper.updateStatusByOrderIdAndStatus(Integer.valueOf(orderId), "closed");
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("token", token); jsonObject.put("token", token);
jsonObject.put("type", "create"); jsonObject.put("type", "create");
jsonObject.put("orderId", orderId); jsonObject.put("orderId", orderId);
producer.putOrderCollect(jsonObject.toJSONString()); producer.putOrderCollect(jsonObject.toJSONString());
producer.printMechine(orderId); producer.printMechine(orderId);
}
} }
} }
} } else {
}else { PublicResp<OrderStatusQueryResp> orderstatus = thirdPayService.queryOrder(url, thirdApply.getAppId(), null, orderInfo.getOrderNo(), thirdApply.getAppToken());
PublicResp<OrderStatusQueryResp> orderstatus=thirdPayService.queryOrder(url,thirdApply.getAppId(),orderInfo.getOrderNo(),null,thirdApply.getAppToken()); if (ObjectUtil.isNotNull(orderstatus) && ObjectUtil.isNotEmpty(orderstatus)) {
if(ObjectUtil.isNotNull(orderstatus)&&ObjectUtil.isNotEmpty(orderstatus)){ if ("000000".equals(orderstatus.getCode())) {
if("000000".equals(orderstatus.getCode())){ if ("TRADE_SUCCESS".equals(orderstatus.getObjData().getState())) {
if("TRADE_SUCCESS".equals(orderstatus.getObjData().getState())){
orderInfo.setStatus("closed"); orderInfo.setStatus("closed");
orderInfo.setPayOrderNo(tbOrderPayment.getTradeNumber()); orderInfo.setPayOrderNo(tbOrderPayment.getTradeNumber());
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo); tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
@@ -408,7 +402,6 @@ public class PayService {
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result accountPay(String orderId, String memberId, String token) { public Result accountPay(String orderId, String memberId, String token) {
if (ObjectUtil.isEmpty(orderId) || ObjectUtil.isEmpty(memberId)) { if (ObjectUtil.isEmpty(orderId) || ObjectUtil.isEmpty(memberId)) {
@@ -432,7 +425,6 @@ public class PayService {
} }
TbShopUser user = tbShopUserMapper.selectByPrimaryKey(Integer.valueOf(memberId)); TbShopUser user = tbShopUserMapper.selectByPrimaryKey(Integer.valueOf(memberId));
if (ObjectUtil.isEmpty(user) || !"1".equals(user.getIsVip().toString())) { if (ObjectUtil.isEmpty(user) || !"1".equals(user.getIsVip().toString())) {
return Result.fail(CodeEnum.MEMBERNOEXIST); return Result.fail(CodeEnum.MEMBERNOEXIST);
@@ -487,7 +479,6 @@ public class PayService {
return Result.success(CodeEnum.SUCCESS); return Result.success(CodeEnum.SUCCESS);
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result memberScanPay(String orderId, String memberCode, String token) { public Result memberScanPay(String orderId, String memberCode, String token) {
if (ObjectUtil.isEmpty(orderId) || ObjectUtil.isEmpty(memberCode)) { if (ObjectUtil.isEmpty(orderId) || ObjectUtil.isEmpty(memberCode)) {
@@ -512,13 +503,13 @@ public class PayService {
} }
TbUserInfo tbUserInfo=tbUserInfoMapper.selectByCardNo(memberCode); TbUserInfo tbUserInfo = tbUserInfoMapper.selectByCardNo(memberCode);
if(ObjectUtil.isEmpty(tbUserInfo)){ if (ObjectUtil.isEmpty(tbUserInfo)) {
return Result.fail(CodeEnum.ACCOUNTEIXST); return Result.fail(CodeEnum.ACCOUNTEIXST);
} }
TbShopUser user = tbShopUserMapper.selectByShopId(orderInfo.getShopId(),tbUserInfo.getId().toString()).get(0); TbShopUser user = tbShopUserMapper.selectByShopId(orderInfo.getShopId(), tbUserInfo.getId().toString()).get(0);
if (ObjectUtil.isEmpty(user) || !"1".equals(user.getIsVip().toString())) { if (ObjectUtil.isEmpty(user) || !"1".equals(user.getIsVip().toString())) {
return Result.fail(CodeEnum.MEMBERNOEXIST); return Result.fail(CodeEnum.MEMBERNOEXIST);
} }
@@ -545,7 +536,7 @@ public class PayService {
orderInfo.setPayAmount(orderInfo.getOrderAmount()); orderInfo.setPayAmount(orderInfo.getOrderAmount());
orderInfo.setMemberId(user.getUserId().toString()); orderInfo.setMemberId(user.getUserId());
orderInfo.setPayType("deposit"); orderInfo.setPayType("deposit");
orderInfo.setStatus("closed"); orderInfo.setStatus("closed");
orderInfo.setPayOrderNo("deposit".concat(SnowFlakeUtil.generateOrderNo())); orderInfo.setPayOrderNo("deposit".concat(SnowFlakeUtil.generateOrderNo()));
@@ -572,7 +563,6 @@ public class PayService {
return Result.success(CodeEnum.SUCCESS); return Result.success(CodeEnum.SUCCESS);
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result cashPay(String orderId, String token) { public Result cashPay(String orderId, String token) {
if (ObjectUtil.isEmpty(orderId)) { if (ObjectUtil.isEmpty(orderId)) {
@@ -621,7 +611,6 @@ public class PayService {
return Result.success(CodeEnum.SUCCESS); return Result.success(CodeEnum.SUCCESS);
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result bankPay(String orderId, String token) { public Result bankPay(String orderId, String token) {
if (ObjectUtil.isEmpty(orderId)) { if (ObjectUtil.isEmpty(orderId)) {
@@ -669,7 +658,6 @@ public class PayService {
return Result.success(CodeEnum.SUCCESS); return Result.success(CodeEnum.SUCCESS);
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result returnOrder(List<TbOrderDetail> list, String token) { public Result returnOrder(List<TbOrderDetail> list, String token) {
if (ObjectUtil.isEmpty(list) || list.size() <= 0) { if (ObjectUtil.isEmpty(list) || list.size() <= 0) {
@@ -738,11 +726,11 @@ public class PayService {
} }
OrderDetailPo detailPo = new OrderDetailPo(); OrderDetailPo detailPo = new OrderDetailPo();
// totalAmount = totalAmount.add(it.getPriceAmount()); // totalAmount = totalAmount.add(it.getPriceAmount());
totalAmount = totalAmount.add(it.getPriceAmount().divide(new BigDecimal(it.getNum()), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(map1.get(it.getId())))); totalAmount = totalAmount.add(it.getPriceAmount().divide(new BigDecimal(it.getNum()), 2, RoundingMode.DOWN).multiply(new BigDecimal(map1.get(it.getId()))));
saleAmount = saleAmount.add(it.getPrice()); saleAmount = saleAmount.add(it.getPrice());
payAmount = payAmount.add(it.getPriceAmount().divide(new BigDecimal(it.getNum()), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(map1.get(it.getId())))); payAmount = payAmount.add(it.getPriceAmount().divide(new BigDecimal(it.getNum()), 2, RoundingMode.DOWN).multiply(new BigDecimal(map1.get(it.getId()))));
// payAmount=payAmount.add(it.getPriceAmount()); // payAmount=payAmount.add(it.getPriceAmount());
packAMount = packAMount.add(it.getPackAmount().divide(new BigDecimal(it.getNum()), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(map1.get(it.getId())))); packAMount = packAMount.add(it.getPackAmount().divide(new BigDecimal(it.getNum()), 2, RoundingMode.DOWN).multiply(new BigDecimal(map1.get(it.getId()))));
detailPo.setId(it.getId()); detailPo.setId(it.getId());
if (map1.get(it.getId()) + it.getReturnNum() >= it.getNum()) { if (map1.get(it.getId()) + it.getReturnNum() >= it.getNum()) {
@@ -751,7 +739,7 @@ public class PayService {
detailPo.setStatus("closed"); detailPo.setStatus("closed");
} }
BigDecimal returnAmount = it.getPriceAmount().divide(new BigDecimal(it.getNum()), 2, BigDecimal.ROUND_DOWN).multiply(new BigDecimal(map1.get(it.getId()))); BigDecimal returnAmount = it.getPriceAmount().divide(new BigDecimal(it.getNum()), 2, RoundingMode.DOWN).multiply(new BigDecimal(map1.get(it.getId())));
detailPo.setReturnNum(map1.get(it.getId())); detailPo.setReturnNum(map1.get(it.getId()));
detailPos.add(detailPo); detailPos.add(detailPo);
it.setNum(map1.get(it.getId())); it.setNum(map1.get(it.getId()));
@@ -774,26 +762,43 @@ public class PayService {
if ("scanCode".equals(payType) || "wx_lite".equals(payType)) { if ("scanCode".equals(payType) || "wx_lite".equals(payType)) {
TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(merchantId)); TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(merchantId));
MsgException.checkNull(thirdApply, "支付参数配置错误"); MsgException.checkNull(thirdApply, "支付参数配置错误");
ReturnOrderReq req = new ReturnOrderReq();
req.setAppId(thirdApply.getAppId()); if ("ysk".equals(thirdPayType)) {
req.setTimestamp(System.currentTimeMillis()); ReturnOrderReq req = new ReturnOrderReq();
req.setOrderNumber(orderInfo.getPayOrderNo()); req.setAppId(thirdApply.getAppId());
req.setAmount(String.format("%.2f", newOrderInfo.getPayAmount().setScale(2, BigDecimal.ROUND_DOWN))); req.setTimestamp(System.currentTimeMillis());
req.setMercRefundNo(orderInfo.getOrderNo()); req.setOrderNumber(orderInfo.getPayOrderNo());
req.setRefundReason("退货"); req.setAmount(String.format("%.2f", newOrderInfo.getPayAmount().setScale(2, RoundingMode.DOWN)));
req.setPayPassword(thirdApply.getPayPassword()); req.setMercRefundNo(orderInfo.getOrderNo());
Map<String, Object> map = BeanUtil.transBean2Map(req); req.setRefundReason("退货");
req.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true)); req.setPayPassword(thirdApply.getPayPassword());
log.info("merchantOrderReturn req:{}", JSONUtil.toJsonStr(req)); Map<String, Object> map = BeanUtil.transBean2Map(req);
ResponseEntity<String> response = restTemplate.postForEntity(gateWayUrl.concat("merchantOrder/returnOrder"), req, String.class); req.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true));
log.info("merchantOrderReturn:{}", response.getBody()); log.info("merchantOrderReturn req:{}", JSONUtil.toJsonStr(req));
if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) { ResponseEntity<String> response = restTemplate.postForEntity(gateWayUrl.concat("merchantOrder/returnOrder"), req, String.class);
JSONObject object = JSONObject.parseObject(response.getBody()); log.info("merchantOrderReturn:{}", response.getBody());
if (!object.get("code").equals("0")) { if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) {
MsgException.check(true, "退款渠道调用失败"); JSONObject object = JSONObject.parseObject(response.getBody());
} if (!object.get("code").equals("0")) {
MsgException.check(true, "退款渠道调用失败");
}
// newOrderInfo.setPayOrderNo(object.getJSONObject("data").getString("refundOrderNumber")); // newOrderInfo.setPayOrderNo(object.getJSONObject("data").getString("refundOrderNumber"));
}
} else {
PublicResp<OrderReturnResp> publicResp = thirdPayService.returnOrder(url, thirdApply.getAppId(), newOrderInfo.getOrderNo(), null, orderInfo.getOrderNo(), "订单退款", newOrderInfo.getPayAmount().setScale(2, RoundingMode.DOWN).multiply(new BigDecimal(100)).longValue(), callBack, null, thirdApply.getAppToken());
if (ObjectUtil.isNotNull(publicResp) && ObjectUtil.isNotEmpty(publicResp)) {
if ("000000".equals(publicResp.getCode())) {
if (!publicResp.getObjData().getState().equals("ING") || "SUCCESS".equals(publicResp.getObjData().getState())) {
MsgException.check(true, "退款渠道调用失败");
}
} else {
MsgException.check(true, "退款渠道调用失败");
}
}
} }
} }
@@ -832,139 +837,145 @@ public class PayService {
producer.putOrderCollect(jsonObject.toJSONString()); producer.putOrderCollect(jsonObject.toJSONString());
producer.printMechine(newOrderInfo.getId() + ""); producer.printMechine(String.valueOf(newOrderInfo.getId()));
return Result.success(CodeEnum.SUCCESS); return Result.success(CodeEnum.SUCCESS);
} }
public Result quickPay(String token, String amount, String authCode, String payType) {
JSONObject info = TokenUtil.parseParamFromToken(token);
MsgException.checkNull(info, "获取信息失败");
String shopId = info.getString("shopId");
String staffId = info.getString("staffId");
BigDecimal payAmount = new BigDecimal(amount).setScale(2, RoundingMode.DOWN);
@Autowired String orderNo = SnowFlakeUtil.generateOrderNo();
TbShopInfoMapper tbShopInfoMapper;
@Autowired TbQuickPay tbQuickPay = new TbQuickPay(null, Integer.valueOf(staffId), Integer.valueOf(shopId), orderNo, payType, payAmount, "1", null, new Date(), null);
TbQuickPayMapper tbQuickPayMapper;
public Result quickPay(String token,String amount,String authCode,String payType){ if ("cash".equals(payType)) {
JSONObject info= TokenUtil.parseParamFromToken(token);
MsgException.checkNull(info,"获取信息失败");
String shopId=info.getString("shopId");
String staffId=info.getString("staffId");
BigDecimal payAmount=new BigDecimal(amount).setScale(2, BigDecimal.ROUND_DOWN);
String orderNo=SnowFlakeUtil.generateOrderNo();
TbQuickPay tbQuickPay= new TbQuickPay(null,Integer.valueOf(staffId),Integer.valueOf(shopId),orderNo,payType,payAmount,"1",null,new Date(),null);
if("cash".equals(payType)){
tbQuickPay.setStatus("0"); tbQuickPay.setStatus("0");
tbQuickPay.setUpdateTime(new Date()); tbQuickPay.setUpdateTime(new Date());
}else { } else {
TbShopInfo tbShopInfo= tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(shopId)); TbShopInfo tbShopInfo = tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(shopId));
MsgException.checkNull(tbShopInfo,"店铺信息不存在"); MsgException.checkNull(tbShopInfo, "店铺信息不存在");
TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(tbShopInfo.getMerchantId())); TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(tbShopInfo.getMerchantId()));
if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) { if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) {
return Result.fail(CodeEnum.NOCUSTOMER); return Result.fail(CodeEnum.NOCUSTOMER);
} }
ScanPayReq scanPayReq = new ScanPayReq(); if ("ysk".equals(thirdPayType)) {
scanPayReq.setAppId(thirdApply.getAppId()); ScanPayReq scanPayReq = new ScanPayReq();
scanPayReq.setTimestamp(System.currentTimeMillis()); scanPayReq.setAppId(thirdApply.getAppId());
scanPayReq.setAuthCode(authCode); scanPayReq.setTimestamp(System.currentTimeMillis());
scanPayReq.setNotifyUrl(backUrl); scanPayReq.setAuthCode(authCode);
scanPayReq.setConsumeFee(payAmount.toPlainString()); scanPayReq.setNotifyUrl(backUrl);
scanPayReq.setConsumeFee(payAmount.toPlainString());
Map<String, Object> map = BeanUtil.transBean2Map(scanPayReq); Map<String, Object> map = BeanUtil.transBean2Map(scanPayReq);
scanPayReq.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true)); scanPayReq.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true));
ResponseEntity<String> response = restTemplate.postForEntity(gateWayUrl.concat("merchantOrder/scanPay"), scanPayReq, String.class); ResponseEntity<String> response = restTemplate.postForEntity(gateWayUrl.concat("merchantOrder/scanPay"), scanPayReq, String.class);
if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) { if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) {
JSONObject object = JSONObject.parseObject(response.getBody()); JSONObject object = JSONObject.parseObject(response.getBody());
if (object.get("code").equals("0")) { if (object.get("code").equals("0")) {
tbQuickPay.setTradeNo(object.getJSONObject("data").get("orderNumber").toString()); tbQuickPay.setTradeNo(object.getJSONObject("data").get("orderNumber").toString());
}
} }
} } else {
}
tbQuickPayMapper.insert(tbQuickPay); PublicResp<MainScanResp> publicResp = thirdPayService.mainScan(url, thirdApply.getAppId(), "快捷收款", "快捷收款", payAmount.setScale(2, RoundingMode.DOWN).multiply(new BigDecimal(100)).longValue(), payType.equals("wechatPay") ? thirdApply.getSmallAppid() : null, authCode, tbQuickPay.getOrderNo(), thirdApply.getStoreId(), callBack, thirdApply.getAppToken());
return Result.success(CodeEnum.SUCCESS,tbQuickPay); if (ObjectUtil.isNotNull(publicResp) && ObjectUtil.isNotEmpty(publicResp)) {
} if ("000000".equals(publicResp.getCode())) {
MainScanResp mainScanResp = publicResp.getObjData();
if ("TRADE_SUCCESS".equals(mainScanResp.getState())) {
tbQuickPay.setTradeNo(mainScanResp.getPayOrderId());
}
public Result queryQuickPayStatus(Integer id){
TbQuickPay tbQuickPay= tbQuickPayMapper.selectByPrimaryKey(id);
MsgException.checkNull(tbQuickPay,"订单信息不存在");
if(tbQuickPay.getPayType().equals("scanpay")&&"1".equals(tbQuickPay.getStatus())) {
TbShopInfo tbShopInfo= tbShopInfoMapper.selectByPrimaryKey(tbQuickPay.getShopId());
MsgException.checkNull(tbShopInfo,"店铺信息不存在");
TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(tbShopInfo.getMerchantId()));
if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) {
return Result.fail(CodeEnum.NOCUSTOMER);
}
TradeQueryReq tradeQueryReq = new TradeQueryReq();
tradeQueryReq.setAppId(thirdApply.getAppId());
tradeQueryReq.setTimestamp(System.currentTimeMillis());
tradeQueryReq.setOrderNumber(tbQuickPay.getTradeNo());
Map<String, Object> map = BeanUtil.transBean2Map(tradeQueryReq);
tradeQueryReq.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true));
ResponseEntity<String> response = restTemplate.postForEntity(gateWayUrl.concat("merchantOrder/tradeQuery"), tradeQueryReq, String.class);
if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) {
JSONObject object = JSONObject.parseObject(response.getBody());
if (object.get("code").equals("0")) {
JSONObject data = object.getJSONObject("data");
if ("1".equals(data.getString("status"))) {
tbQuickPay.setStatus("0");
tbQuickPay.setUpdateTime(new Date());
tbQuickPayMapper.updateByPrimaryKeySelective(tbQuickPay);
} }
} }
} }
} }
return Result.success(CodeEnum.SUCCESS,tbQuickPay);
tbQuickPayMapper.insert(tbQuickPay);
return Result.success(CodeEnum.SUCCESS, tbQuickPay);
} }
public Result queryQuickPayStatus(Integer id) {
TbQuickPay tbQuickPay = tbQuickPayMapper.selectByPrimaryKey(id);
MsgException.checkNull(tbQuickPay, "订单信息不存在");
if (tbQuickPay.getPayType().equals("scanpay") && "1".equals(tbQuickPay.getStatus())) {
public Result queryQuickPay(String token,int pageNo,int pageSize){ TbShopInfo tbShopInfo = tbShopInfoMapper.selectByPrimaryKey(tbQuickPay.getShopId());
JSONObject info= TokenUtil.parseParamFromToken(token); MsgException.checkNull(tbShopInfo, "店铺信息不存在");
MsgException.checkNull(info,"获取信息失败");
String shopId=info.getString("shopId"); TbMerchantThirdApply thirdApply = tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(tbShopInfo.getMerchantId()));
String staffId=info.getString("staffId"); if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) {
return Result.fail(CodeEnum.NOCUSTOMER);
}
if ("ysk".equals(thirdPayType)) {
TradeQueryReq tradeQueryReq = new TradeQueryReq();
tradeQueryReq.setAppId(thirdApply.getAppId());
tradeQueryReq.setTimestamp(System.currentTimeMillis());
tradeQueryReq.setOrderNumber(tbQuickPay.getTradeNo());
Map<String, Object> map = BeanUtil.transBean2Map(tradeQueryReq);
tradeQueryReq.setSign(MD5Util.encrypt(map, thirdApply.getAppToken(), true));
ResponseEntity<String> response = restTemplate.postForEntity(gateWayUrl.concat("merchantOrder/tradeQuery"), tradeQueryReq, String.class);
if (response.getStatusCodeValue() == 200 && ObjectUtil.isNotEmpty(response.getBody())) {
JSONObject object = JSONObject.parseObject(response.getBody());
if (object.get("code").equals("0")) {
JSONObject data = object.getJSONObject("data");
if ("1".equals(data.getString("status"))) {
tbQuickPay.setStatus("0");
tbQuickPay.setUpdateTime(new Date());
tbQuickPayMapper.updateByPrimaryKeySelective(tbQuickPay);
}
}
}
} else {
PublicResp<OrderStatusQueryResp> orderstatus = thirdPayService.queryOrder(url, thirdApply.getAppId(), null, tbQuickPay.getOrderNo(), thirdApply.getAppToken());
if (ObjectUtil.isNotNull(orderstatus) && ObjectUtil.isNotEmpty(orderstatus)) {
if ("000000".equals(orderstatus.getCode())) {
if ("TRADE_SUCCESS".equals(orderstatus.getObjData().getState())) {
tbQuickPay.setStatus("0");
tbQuickPay.setUpdateTime(new Date());
tbQuickPayMapper.updateByPrimaryKeySelective(tbQuickPay);
}
}
}
}
}
return Result.success(CodeEnum.SUCCESS, tbQuickPay);
}
public Result queryQuickPay(String token, int pageNo, int pageSize) {
JSONObject info = TokenUtil.parseParamFromToken(token);
MsgException.checkNull(info, "获取信息失败");
String shopId = info.getString("shopId");
String staffId = info.getString("staffId");
PageHelper.startPage(pageNo, pageSize); PageHelper.startPage(pageNo, pageSize);
List<TbQuickPay> list= tbQuickPayMapper.selectByShopIdAndStaffId(Integer.valueOf(shopId),Integer.valueOf(staffId)); List<TbQuickPay> list = tbQuickPayMapper.selectByShopIdAndStaffId(Integer.valueOf(shopId), Integer.valueOf(staffId));
PageInfo pageInfo=new PageInfo(list); PageInfo pageInfo = new PageInfo(list);
return Result.success(CodeEnum.SUCCESS,pageInfo); return Result.success(CodeEnum.SUCCESS, pageInfo);
} }
public String generateReturnOrderNumber() { public String generateReturnOrderNumber() {
String date = DateUtils.getSdfTimes(); String date = DateUtils.getSdfTimes();
Random random = new Random(); Random random = new Random();
int randomNum = random.nextInt(900) + 100; int randomNum = random.nextInt(900) + 100;
return "RO" + date + randomNum; return "RO" + date + randomNum;
} }
public static void main(String[] args) {
System.out.println(String.format("%.2f", new BigDecimal(1).setScale(2, BigDecimal.ROUND_DOWN)));
}
} }

View File

@@ -19,6 +19,8 @@ public class DateUtils {
private final static SimpleDateFormat sdfTimes = new SimpleDateFormat("yyyyMMddHHmmss"); private final static SimpleDateFormat sdfTimes = new SimpleDateFormat("yyyyMMddHHmmss");
private final static SimpleDateFormat sdfTimesSs = new SimpleDateFormat("yyyyMMddHHmmss");
private final static SimpleDateFormat sdfday = new SimpleDateFormat("MM-dd HH:mm"); private final static SimpleDateFormat sdfday = new SimpleDateFormat("MM-dd HH:mm");
@@ -61,6 +63,10 @@ public class DateUtils {
} }
public static String getSsdfTimes() {
return sdfTimesSs.format(new Date());
}
public static String getNextSdfTimes(Date date){ public static String getNextSdfTimes(Date date){
return sdfTimes.format(date); return sdfTimes.format(date);
} }

View File

@@ -11,6 +11,8 @@
<result column="created_at" jdbcType="BIGINT" property="createdAt" /> <result column="created_at" jdbcType="BIGINT" property="createdAt" />
<result column="updated_at" jdbcType="BIGINT" property="updatedAt" /> <result column="updated_at" jdbcType="BIGINT" property="updatedAt" />
<result column="shop_id" jdbcType="INTEGER" property="shopId" /> <result column="shop_id" jdbcType="INTEGER" property="shopId" />
<result column="small_appid" jdbcType="VARCHAR" property="smallAppid" />
<result column="store_id" jdbcType="VARCHAR" property="storeId" />
</resultMap> </resultMap>
<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.chaozhanggui.system.cashierservice.entity.TbMerchantThirdApply"> <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.chaozhanggui.system.cashierservice.entity.TbMerchantThirdApply">
<result column="app_token" jdbcType="LONGVARCHAR" property="appToken" /> <result column="app_token" jdbcType="LONGVARCHAR" property="appToken" />