Merge remote-tracking branch 'origin/yhq' into lyf

# Conflicts:
#	src/main/java/com/chaozhanggui/system/cashierservice/entity/TbShopInfo.java
#	src/main/java/com/chaozhanggui/system/cashierservice/entity/TbSystemCoupons.java
#	src/main/java/com/chaozhanggui/system/cashierservice/rabbit/RabbitConfig.java
#	src/main/java/com/chaozhanggui/system/cashierservice/rabbit/RabbitProducer.java
#	src/main/java/com/chaozhanggui/system/cashierservice/service/LoginService.java
#	src/main/java/com/chaozhanggui/system/cashierservice/util/RandomUtil.java
#	src/main/resources/application-dev.yml
#	src/main/resources/application-dev2.yml
#	src/main/resources/application-prod.yml
#	src/main/resources/application-prod2.yml
#	src/main/resources/mapper/TbShopInfoMapper.xml
This commit is contained in:
2024-04-15 14:51:15 +08:00
73 changed files with 3810 additions and 563 deletions

View File

@@ -16,6 +16,7 @@ import com.chaozhanggui.system.cashierservice.socket.AppWebSocketServer;
import com.chaozhanggui.system.cashierservice.socket.WebSocketServer;
import com.chaozhanggui.system.cashierservice.util.DateUtils;
import com.chaozhanggui.system.cashierservice.util.JSONUtil;
import com.chaozhanggui.system.cashierservice.util.N;
import com.chaozhanggui.system.cashierservice.util.SnowFlakeUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -54,7 +55,10 @@ public class CartService {
private TbOrderDetailMapper orderDetailMapper;
@Autowired
private TbShopTableMapper shopTableMapper;
@Autowired
private TbUserCouponsMapper userCouponsMapper;
@Autowired
private TbSystemCouponsMapper systemCouponsMapper;
// @Transactional(rollbackFor = Exception.class)
public void createCart(JSONObject jsonObject) throws Exception {
@@ -202,23 +206,35 @@ public class CartService {
@Transactional(rollbackFor = Exception.class)
public void createOrder(JSONObject jsonObject) throws IOException {
try {
String shopId = jsonObject.getString("shopId");
JSONArray array = JSON.parseArray(redisUtil.getMessage(RedisCst.TABLE_CART.concat(jsonObject.getString("tableId").concat("-").concat(shopId))));
//总金额
List<Integer> ids = new ArrayList<>();
BigDecimal totalAmount = BigDecimal.ZERO;
BigDecimal packAMount = BigDecimal.ZERO;
BigDecimal originAmount = BigDecimal.ZERO;
BigDecimal saleAmount = BigDecimal.ZERO;
String couponId = "";
BigDecimal couponAmount = BigDecimal.ZERO;
Map<Integer, TbProductSku> skuMap = new HashMap<>();
List<TbOrderDetail> orderDetails = new ArrayList<>();
Integer orderId = 0;
TbMerchantAccount tbMerchantAccount = merchantAccountMapper.selectByShopId(jsonObject.getString("shopId"));
if (tbMerchantAccount == null) {
throw new MsgException("生成订单错误");
}
String userId = jsonObject.getString("userId");
TbUserInfo tbUserInfo = userInfoMapper.selectByPrimaryKey(Integer.valueOf(userId));
if (tbUserInfo == null) {
throw new MsgException("生成订单失败");
}
for (int i = 0; i < array.size(); i++) {
JSONObject object = array.getJSONObject(i);
TbCashierCart cashierCart = JSONUtil.parseJSONStr2T(object.toJSONString(), TbCashierCart.class);
TbProductSkuWithBLOBs tbProduct = productSkuMapper.selectByPrimaryKey(Integer.valueOf(cashierCart.getSkuId()));
totalAmount = totalAmount.add(cashierCart.getTotalAmount());
packAMount = packAMount.add(cashierCart.getPackFee());
originAmount = originAmount.add(cashierCart.getTotalAmount());
if (Objects.nonNull(tbProduct)) {
saleAmount = saleAmount.add(tbProduct.getSalePrice());
}
@@ -249,19 +265,88 @@ public class CartService {
orderId = Integer.valueOf(cashierCart.getOrderId());
}
}
TbMerchantAccount tbMerchantAccount = merchantAccountMapper.selectByShopId(jsonObject.getString("shopId"));
if (tbMerchantAccount == null) {
throw new MsgException("生成订单错误");
}
TbUserInfo tbUserInfo = userInfoMapper.selectByPrimaryKey(jsonObject.getInteger("userId"));
if (tbUserInfo == null) {
throw new MsgException("生成订单失败");
}
//总金额
TbShopTable shopTable = shopTableMapper.selectQRcode(jsonObject.getString("tableId"));
//生成订单
TbOrderInfo orderInfo = orderInfoMapper.selectByPrimaryKey(orderId);
String isBuyYhq = "false";
String isuseYhq = "false";
if (jsonObject.containsKey("isYhq") && jsonObject.getString("isYhq").equals("1")) {
couponId =jsonObject.getString("couponsId");
//1:购买优惠券0自己持有优惠券
Integer couponsId = jsonObject.getInteger("couponsId");
if (jsonObject.getString("isBuyYhq").equals("1")) {
TbSystemCoupons systemCoupons = systemCouponsMapper.selectByPrimaryKey(couponsId);
if (Objects.isNull(systemCoupons) || !systemCoupons.getStatus().equals("0")) {
log.info("开始处理订单");
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("status", "fail");
jsonObject1.put("msg", "优惠券已售空");
jsonObject1.put("type", jsonObject.getString("type"));
jsonObject1.put("data", "");
AppWebSocketServer.AppSendInfo(jsonObject1, jsonObject.getString("userId"), true);
log.info("消息推送");
return;
}
if (N.gt(systemCoupons.getCouponsAmount(), totalAmount)) {
log.info("开始处理订单");
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("status", "fail");
jsonObject1.put("msg", "订单金额小于优惠价金额");
jsonObject1.put("type", jsonObject.getString("type"));
jsonObject1.put("data", "");
AppWebSocketServer.AppSendInfo(jsonObject1, jsonObject.getString("userId"), true);
log.info("消息推送");
return;
}
totalAmount = totalAmount.add(systemCoupons.getCouponsPrice()).subtract(systemCoupons.getCouponsAmount());
originAmount = originAmount.add(systemCoupons.getCouponsPrice());
couponAmount = systemCoupons.getCouponsAmount();
systemCoupons.setStatus("1");
systemCouponsMapper.updateByPrimaryKeySelective(systemCoupons);
TbUserCoupons userCoupons = new TbUserCoupons();
userCoupons.setEndTime(DateUtils.getNewDate(new Date(), 3, systemCoupons.getDayNum()));
userCoupons.setCouponsAmount(systemCoupons.getCouponsAmount());
userCoupons.setCouponsPrice(systemCoupons.getCouponsPrice());
userCoupons.setStatus("1");
userCoupons.setUserId(userId);
userCoupons.setCreateTime(new Date());
userCouponsMapper.insert(userCoupons);
couponId = userCoupons.getId() + "";
couponAmount = userCoupons.getCouponsAmount();
} else {
TbUserCoupons userCoupons = userCouponsMapper.selectByPrimaryKey(couponsId);
if (Objects.isNull(userCoupons) || !userCoupons.getStatus().equals("0")) {
log.info("开始处理订单");
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("status", "fail");
jsonObject1.put("msg", "优惠券已使用");
jsonObject1.put("type", jsonObject.getString("type"));
jsonObject1.put("data", "");
AppWebSocketServer.AppSendInfo(jsonObject1, jsonObject.getString("userId"), true);
log.info("消息推送");
return;
}
if (N.gt(userCoupons.getCouponsAmount(), totalAmount)) {
log.info("开始处理订单");
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("status", "fail");
jsonObject1.put("msg", "订单金额小于优惠价金额");
jsonObject1.put("type", jsonObject.getString("type"));
jsonObject1.put("data", "");
AppWebSocketServer.AppSendInfo(jsonObject1, jsonObject.getString("userId"), true);
log.info("消息推送");
return;
}
totalAmount = totalAmount.subtract(userCoupons.getCouponsAmount());
userCoupons.setStatus("1");
userCoupons.setEndTime(DateUtils.getNewDate(new Date(), 5, 30));
userCouponsMapper.updateByPrimaryKeySelective(userCoupons);
couponAmount = userCoupons.getCouponsAmount();
}
isuseYhq = "true";
}
if (Objects.nonNull(orderInfo)) {
log.info("订单状态:" + orderInfo.getStatus());
if (!"unpaid".equals(orderInfo.getStatus())) {
@@ -279,40 +364,24 @@ public class CartService {
orderDetailMapper.deleteByOUrderId(orderId);
orderInfo.setUpdatedAt(System.currentTimeMillis());
orderInfo.setSettlementAmount(totalAmount);
orderInfo.setUserCouponId(couponId);
orderInfo.setUserCouponAmount(couponAmount);
orderInfo.setAmount(totalAmount);
orderInfo.setOriginAmount(totalAmount);
orderInfo.setOriginAmount(originAmount);
orderInfo.setOrderAmount(totalAmount.add(packAMount));
orderInfo.setFreightAmount(BigDecimal.ZERO);
orderInfo.setProductAmount(saleAmount);
orderInfo.setIsBuyCoupon(isBuyYhq);
orderInfo.setIsUseCoupon(isuseYhq);
orderInfoMapper.updateByPrimaryKeySelective(orderInfo);
} else {
orderInfo = new TbOrderInfo();
String orderNo = generateOrderNumber();
orderInfo.setOrderNo(orderNo);
orderInfo.setSettlementAmount(totalAmount);
orderInfo.setPackFee(packAMount);
orderInfo.setOriginAmount(totalAmount);
orderInfo.setProductAmount(totalAmount);
orderInfo.setAmount(totalAmount);
orderInfo.setOrderAmount(totalAmount.add(packAMount));
orderInfo.setPayAmount(BigDecimal.ZERO);
orderInfo.setRefundAmount(new BigDecimal("0.00"));
orderInfo.setTableId(jsonObject.getString("tableId"));
orderInfo.setSendType("table");
orderInfo.setOrderType("miniapp");
orderInfo.setTradeDay(DateUtils.getDay());
orderInfo.setStatus("unpaid");
orderInfo.setShopId(jsonObject.getString("shopId"));
orderInfo.setUserId(jsonObject.getString("userId"));
orderInfo.setCreatedAt(Instant.now().toEpochMilli());
orderInfo.setSystemTime(Instant.now().toEpochMilli());
orderInfo.setUpdatedAt(Instant.now().toEpochMilli());
orderInfo.setIsAccepted((byte) 1);
if (Objects.nonNull(shopTable)) {
orderInfo.setTableName(shopTable.getName());
}
orderInfo = getOrder(totalAmount, packAMount, shopTable, tbMerchantAccount.getId().toString(), jsonObject, originAmount);
orderInfo.setMerchantId(String.valueOf(tbMerchantAccount.getId()));
orderInfo.setUserCouponId(couponId);
orderInfo.setOriginAmount(originAmount);
orderInfo.setIsBuyCoupon(isBuyYhq);
orderInfo.setIsUseCoupon(isuseYhq);
orderInfo.setUserCouponAmount(couponAmount);
orderInfoMapper.insert(orderInfo);
orderId = orderInfo.getId();
}
@@ -351,12 +420,45 @@ public class CartService {
e.getMessage();
}
}
private TbOrderInfo getOrder(BigDecimal totalAmount, BigDecimal packAMount,
TbShopTable shopTable, String merchantId, JSONObject jsonObject, BigDecimal originAmount) {
TbOrderInfo orderInfo = new TbOrderInfo();
String orderNo = generateOrderNumber();
orderInfo.setOrderNo(orderNo);
orderInfo.setSettlementAmount(totalAmount);
orderInfo.setPackFee(packAMount);
orderInfo.setOriginAmount(originAmount);
orderInfo.setProductAmount(originAmount);
orderInfo.setAmount(totalAmount);
orderInfo.setOrderAmount(totalAmount.add(packAMount));
orderInfo.setPayAmount(BigDecimal.ZERO);
orderInfo.setRefundAmount(new BigDecimal("0.00"));
orderInfo.setTableId(jsonObject.getString("tableId"));
orderInfo.setSendType("table");
orderInfo.setOrderType("miniapp");
orderInfo.setTradeDay(DateUtils.getDay());
orderInfo.setStatus("unpaid");
orderInfo.setShopId(jsonObject.getString("shopId"));
orderInfo.setUserId(jsonObject.getString("userId"));
orderInfo.setCreatedAt(Instant.now().toEpochMilli());
orderInfo.setSystemTime(Instant.now().toEpochMilli());
orderInfo.setUpdatedAt(Instant.now().toEpochMilli());
orderInfo.setIsAccepted((byte) 1);
if (Objects.nonNull(shopTable)) {
orderInfo.setTableName(shopTable.getName());
}
orderInfo.setMerchantId(merchantId);
return orderInfo;
}
public String generateOrderNumber() {
String date = DateUtils.getSdfTimes();
Random random = new Random();
int randomNum = random.nextInt(900) + 100;
return "WX" + date + randomNum;
}
public void clearCart(JSONObject jsonObject) throws IOException {
String shopId = jsonObject.getString("shopId");
if (redisUtil.exists(RedisCst.TABLE_CART.concat(jsonObject.getString("tableId").concat("-").concat(shopId)))) {

View File

@@ -0,0 +1,111 @@
package com.chaozhanggui.system.cashierservice.service;
import com.alibaba.fastjson.JSONObject;
import com.chaozhanggui.system.cashierservice.dao.*;
import com.chaozhanggui.system.cashierservice.entity.*;
import com.chaozhanggui.system.cashierservice.exception.MsgException;
import com.chaozhanggui.system.cashierservice.redis.RedisUtil;
import com.chaozhanggui.system.cashierservice.util.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.*;
/**
* @author lyf
*/
@Service
@Slf4j
public class IntegralService {
@Autowired
private RedisUtil redisUtil;
@Autowired
private TbOrderInfoMapper orderInfoMapper;
@Autowired
private TbCashierCartMapper cashierCartMapper;
@Autowired
private TbProductMapper productMapper;
@Autowired
private TbProductSkuMapper productSkuMapper;
@Autowired
private TbShopInfoMapper shopInfoMapper;
@Autowired
private TbShopUserMapper tbShopUserMapper;
@Resource
private TbReleaseFlowMapper integralFlowMapper;
@Autowired
private TbUserCouponsMapper userCouponsMapper;
@Autowired
private TbSplitAccountsMapper splitAccountsMapper;
@Transactional(rollbackFor = Exception.class)
public void integralAdd(JSONObject jsonObject) throws ParseException {
String type = jsonObject.getString("type");
if (type.equals("trade")){
//优惠券兑换积分
Integer integralId = jsonObject.getInteger("integralId");
TbUserCoupons userCoupons = userCouponsMapper.selectByPrimaryKey(integralId);
if (Objects.isNull(userCoupons) || !"0".equals(userCoupons.getStatus())){
throw new MsgException("优惠券已被使用");
}
userCoupons.setStatus("trade");
userCoupons.setUpdateTime(new Date());
userCouponsMapper.updateByPrimaryKeySelective(userCoupons);
TbParams params = tbShopUserMapper.selectParams();
TbReleaseFlow integralFlow = new TbReleaseFlow();
integralFlow.setNum(userCoupons.getCouponsAmount().multiply(params.getTradeRatio()));
integralFlow.setCreateTime(new Date());
integralFlow.setFromSource(userCoupons.getId()+"");
integralFlow.setType("TRADEADD");
integralFlow.setUserId(userCoupons.getUserId());
integralFlowMapper.insert(integralFlow);
}else {
Integer orderId = jsonObject.getInteger("orderId");
TbOrderInfo orderInfo = orderInfoMapper.selectByPrimaryKey(orderId);
if (StringUtils.isNotBlank(orderInfo.getUserCouponId())){
TbUserCoupons userCoupons = userCouponsMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getUserCouponId()));
if (Objects.nonNull(userCoupons)){
TbShopInfo shopInfo = shopInfoMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getShopId()));
TbSplitAccounts splitAccounts = new TbSplitAccounts();
splitAccounts.setConponsAmount(userCoupons.getCouponsAmount());
splitAccounts.setCreateTime(new Date());
splitAccounts.setIsSplit("false");
splitAccounts.setMerchantId(Integer.valueOf(shopInfo.getMerchantId()));
splitAccounts.setShopId(shopInfo.getId());
splitAccounts.setOrderAmount(orderInfo.getPayAmount());
splitAccounts.setTradeDay(DateUtils.getDay());
splitAccounts.setOriginAmount(orderInfo.getOriginAmount());
splitAccountsMapper.insert(splitAccounts);
}
}
if (Objects.isNull(orderInfo)) {
log.error("该订单不存在");
return;
}
TbShopInfo shopInfo = shopInfoMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getShopId()));
if (Objects.isNull(shopInfo) || !"true".equals(shopInfo.getIsOpenYhq())){
log.error("该店铺未开启优惠券功能");
return;
}
TbParams params = tbShopUserMapper.selectParams();
TbUserCoupons userCoupons = new TbUserCoupons();
userCoupons.setUserId(orderInfo.getUserId());
userCoupons.setCouponsAmount(orderInfo.getPayAmount().multiply(params.getIntegralRatio()));
userCoupons.setStatus("0");
userCoupons.setOrderId(orderId);
userCoupons.setCouponsPrice(userCoupons.getCouponsAmount().multiply(new BigDecimal("0.5")));
userCoupons.setCreateTime(new Date());
userCoupons.setEndTime(DateUtils.getNewDate(new Date(),3,30));
//执行插入方法
userCouponsMapper.insert(userCoupons);
}
}
}

View File

@@ -3,17 +3,25 @@ package com.chaozhanggui.system.cashierservice.service;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.chaozhanggui.system.cashierservice.dao.*;
import com.chaozhanggui.system.cashierservice.entity.*;
import com.chaozhanggui.system.cashierservice.entity.vo.CashierCarVo;
import com.chaozhanggui.system.cashierservice.entity.vo.OrderVo;
import com.chaozhanggui.system.cashierservice.exception.MsgException;
import com.chaozhanggui.system.cashierservice.rabbit.RabbitProducer;
import com.chaozhanggui.system.cashierservice.redis.RedisCst;
import com.chaozhanggui.system.cashierservice.redis.RedisUtil;
import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
import com.chaozhanggui.system.cashierservice.sign.Result;
import com.chaozhanggui.system.cashierservice.socket.AppWebSocketServer;
import com.chaozhanggui.system.cashierservice.util.DateUtils;
import com.chaozhanggui.system.cashierservice.util.N;
import com.chaozhanggui.system.cashierservice.util.RedisUtils;
import com.chaozhanggui.system.cashierservice.util.SnowFlakeUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -22,9 +30,13 @@ import javax.annotation.Resource;
import java.awt.print.Pageable;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.ParseException;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
* @author 12847
@@ -33,7 +45,7 @@ import java.util.List;
public class OrderService {
@Resource
private TbCashierCartMapper cashierCartMapper;
private RabbitProducer producer;
@Resource
private TbOrderInfoMapper orderInfoMapper;
@@ -48,18 +60,35 @@ public class OrderService {
@Resource
private TbUserInfoMapper userInfoMapper;
@Autowired
private TbWiningUserMapper tbWiningUserMapper;
@Resource
private TbOrderDetailMapper tbOrderDetailMapper;
private TbOrderDetailMapper tbOrderDetailMapper;
@Autowired
private TbReleaseFlowMapper releaseFlowMapper;
@Resource
private TbParamsMapper paramsMapper;
@Resource
private RedisUtil redisUtil;
@Resource
private RedisUtils redisUtils;
@Resource
private TbUserCouponsMapper userCouponsMapper;
@Resource
private TbSystemCouponsMapper systemCouponsMapper;
@Autowired
private TbYhqParamsMapper yhqParamsMapper;
@Autowired
private TbShopUserMapper shopUserMapper;
/**
* 创建订单
*
* @param tableId
* @return
*/
@Transactional(rollbackFor = Exception.class)
public Result createOrder(Integer tableId,Integer shopId,Integer userId){
public Result createOrder(Integer tableId, Integer shopId, Integer userId) {
// //查询该台桌是否还有开启的购物车
// List<CashierCarVo> cashierCarVoList = cashierCartMapper.selectByTableIdOpen(tableId);
// if (cashierCarVoList.isEmpty()){
@@ -139,26 +168,25 @@ public class OrderService {
// orderVo.setOrderType(orderInfo.getOrderType());
// orderVo.setOrderId(orderInfo.getId());
// orderVo.setSendType(orderInfo.getSendType());
return Result.success(CodeEnum.ENCRYPT,orderVo);
return Result.success(CodeEnum.ENCRYPT, orderVo);
}
public Result orderInfo(Integer orderId){
public Result orderInfo(Integer orderId) {
TbOrderInfo orderInfo = orderInfoMapper.selectByPrimaryKey(orderId);
if (orderInfo == null){
if (orderInfo == null) {
return Result.fail("未找到订单");
}
TbShopInfo tbShopInfo = tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getShopId()));
if (tbShopInfo == null){
if (tbShopInfo == null) {
return Result.fail("未找到订单");
}
TbShopTable tbShopTable = shopTableMapper.selectQRcode(orderInfo.getTableId());
List<TbOrderDetail> details= tbOrderDetailMapper.selectAllByOrderId(orderId);
if(ObjectUtil.isEmpty(details)||details.size()<=0){
List<TbOrderDetail> details = tbOrderDetailMapper.selectAllByOrderId(orderId);
if (ObjectUtil.isEmpty(details) || details.size() <= 0) {
return Result.fail("未找到订单");
}
@@ -171,37 +199,37 @@ public class OrderService {
orderVo.setOrderNo(orderInfo.getOrderNo());
orderVo.setTime(orderInfo.getCreatedAt());
orderVo.setPayAmount(orderInfo.getOrderAmount());
orderVo.setTableName(tbShopTable == null?"":tbShopTable.getName());
orderVo.setTableName(tbShopTable == null ? "" : tbShopTable.getName());
orderVo.setOrderType(orderInfo.getOrderType());
orderVo.setOrderId(orderInfo.getId());
orderVo.setSendType(orderInfo.getSendType());
return Result.success(CodeEnum.ENCRYPT,orderVo);
return Result.success(CodeEnum.ENCRYPT, orderVo);
}
public Result orderList(Integer userId,Integer page,Integer size,String status){
public Result orderList(Integer userId, Integer page, Integer size, String status) {
TbUserInfo tbUserInfo = userInfoMapper.selectByPrimaryKey(userId);
if (tbUserInfo == null){
if (tbUserInfo == null) {
return Result.fail("生成订单失败");
}
//获取页码号
int beginNo;
if(page <=0){
if (page <= 0) {
beginNo = 0;
}else{
} else {
beginNo = (page - 1) * size;
}
List<TbOrderInfo> tbOrderInfos = orderInfoMapper.selectByUserId(userId, beginNo, size,status);
List<TbOrderInfo> tbOrderInfos = orderInfoMapper.selectByUserId(userId, beginNo, size, status);
for (TbOrderInfo orderInfo:tbOrderInfos){
List<TbOrderDetail> list = tbOrderDetailMapper.selectAllByOrderId(orderInfo.getId());
int num = 0;
for (TbOrderDetail orderDetail:list){
num = num+orderDetail.getNum();
}
orderInfo.setDetailList(list);
orderInfo.setTotalNumber(num);
for (TbOrderInfo orderInfo : tbOrderInfos) {
List<TbOrderDetail> list = tbOrderDetailMapper.selectAllByOrderId(orderInfo.getId());
int num = 0;
for (TbOrderDetail orderDetail : list) {
num = num + orderDetail.getNum();
}
orderInfo.setDetailList(list);
orderInfo.setTotalNumber(num);
}
//
// for (OrderVo date :tbOrderInfos) {
@@ -216,7 +244,7 @@ public class OrderService {
// date.setTotalNumber(number);
// }
// }
return Result.success(CodeEnum.ENCRYPT,tbOrderInfos);
return Result.success(CodeEnum.ENCRYPT, tbOrderInfos);
}
@@ -225,10 +253,149 @@ public class OrderService {
// redisUtil.seckill(tableId,message);
// AppWebSocketServer.onClosed(tableId);
List<TbProductSku> list = productSkuMapper.selectAll();
for (TbProductSku productSku:list){
for (TbProductSku productSku : list) {
// productSku.setStockNumber(200.00);
redisUtil.saveMessage("PRODUCT:"+productSku.getShopId()+":"+productSku.getId(),productSku.getStockNumber().intValue()+"");
redisUtil.saveMessage("PRODUCT:" + productSku.getShopId() + ":" + productSku.getId(), productSku.getStockNumber().intValue() + "");
}
}
@Transactional(rollbackFor = Exception.class)
public Result tradeIntegral(String userId, String id) throws ParseException {
updateIntegral(userId, id);
return Result.success(CodeEnum.ENCRYPT);
}
private void updateIntegral(String userId, String id) throws ParseException {
boolean lock_coin = redisUtils.lock(RedisCst.INTEGRAL_COIN_KEY + userId, 5000, TimeUnit.MILLISECONDS);
if (lock_coin) {
TbUserCoupons userCoupons = userCouponsMapper.selectByPrimaryKey(Integer.valueOf(id));
if (Objects.isNull(userCoupons) || !userCoupons.getStatus().equals("0")) {
throw new MsgException("该优惠券已被使用");
}
TbParams params = paramsMapper.selectByPrimaryKey(1);
BigDecimal jfAmount = params.getTradeRatio().multiply(userCoupons.getCouponsAmount());
TbUserInfo tbShopUser = userInfoMapper.selectByPrimaryKey(Integer.valueOf(userId));
tbShopUser.setTotalScore(tbShopUser.getTotalScore()+jfAmount.intValue());
userInfoMapper.updateByPrimaryKeySelective(tbShopUser);
userCoupons.setStatus("2");
userCoupons.setUpdateTime(new Date());
userCouponsMapper.updateByPrimaryKeySelective(userCoupons);
TbSystemCoupons systemCoupons = new TbSystemCoupons();
systemCoupons.setEndTime(DateUtils.getNewDate(new Date(),3,30));
systemCoupons.setCouponsAmount(userCoupons.getCouponsAmount());
systemCoupons.setCouponsPrice(userCoupons.getCouponsPrice());
systemCoupons.setStatus("0");
systemCoupons.setName(userCoupons.getCouponsAmount()+"无门槛优惠券");
systemCoupons.setCreateTime(new Date());
String typeName = findName(userCoupons.getCouponsAmount());
systemCoupons.setTypeName(typeName);
systemCouponsMapper.insert(systemCoupons);
TbReleaseFlow releaseFlow = new TbReleaseFlow();
releaseFlow.setNum(jfAmount);
releaseFlow.setCreateTime(new Date());
releaseFlow.setFromSource("OWER");
releaseFlow.setUserId(userId);
releaseFlow.setOperationType("ADD");
releaseFlow.setType("EXCHANGEADD");
releaseFlow.setRemark("兑换增加");
releaseFlowMapper.insert(releaseFlow);
redisUtils.releaseLock(RedisCst.INTEGRAL_COIN_KEY + userId);
} else {
updateIntegral(userId, id);
}
}
private String findName(BigDecimal amount) {
List<TbYhqParams> list = yhqParamsMapper.selectAll();
String typeName = "";
for (TbYhqParams yhqParams:list){
if (N.egt(amount,yhqParams.getMinPrice()) && N.gt(yhqParams.getMaxPrice(),amount)){
typeName = yhqParams.getName();
break;
}
}
return typeName;
}
public Result mineCoupons(String userId, String status, Integer page, Integer size) {
PageHelper.startPage(page, size);
List<TbUserCoupons> list = userCouponsMapper.selectByUserId(userId,status);
PageInfo pageInfo = new PageInfo(list);
return Result.success(CodeEnum.SUCCESS, pageInfo);
}
public Result findCoupons(String type, Integer page, Integer size) {
PageHelper.startPage(page, size);
List<TbSystemCoupons> list = systemCouponsMapper.selectAll(type);
PageInfo pageInfo = new PageInfo(list);
return Result.success(CodeEnum.SUCCESS, pageInfo);
}
public Result findWiningUser() {
String day = DateUtils.getDay();
List<TbWiningUser> list = tbWiningUserMapper.selectAllByTrade(day);
return Result.success(CodeEnum.SUCCESS, list);
}
public Result getYhqPara() {
List<TbYhqParams> list = yhqParamsMapper.selectAll();
return Result.success(CodeEnum.SUCCESS, list);
}
public Result testPay(Integer orderId) {
TbOrderInfo orderInfo = orderInfoMapper.selectByPrimaryKey(orderId);
orderInfo.setStatus("closed");
orderInfo.setPayType("wx_lite");
orderInfo.setPayOrderNo("test");
orderInfo.setPayAmount(orderInfo.getOrderAmount());
orderInfoMapper.updateByPrimaryKeySelective(orderInfo);
JSONObject jsonObject=new JSONObject();
jsonObject.put("token",0);
jsonObject.put("type","wxcreate");
jsonObject.put("orderId",orderId.toString());
producer.putOrderCollect(jsonObject.toJSONString());
JSONObject coupons = new JSONObject();
coupons.put("type","buy");
coupons.put("orderId",orderId);
producer.printCoupons(coupons.toJSONString());
return Result.success(CodeEnum.SUCCESS);
}
public Result getYhqDouble(Integer orderId) {
TbUserCoupons userCoupons = userCouponsMapper.selectByOrderId(orderId);
return Result.success(CodeEnum.SUCCESS,userCoupons);
}
@Transactional(rollbackFor = Exception.class)
public Result yhqDouble(Integer conponsId) {
TbUserCoupons userCoupons = userCouponsMapper.selectByPrimaryKey(conponsId);
if (Objects.isNull(userCoupons) || userCoupons.getIsDouble().equals("true")){
throw new MsgException("该优惠券翻倍已领取");
}
modityDouble(conponsId);
return Result.success(CodeEnum.SUCCESS);
}
private void modityDouble(Integer conponsId) {
boolean lock_coin = redisUtils.lock(RedisCst.COUPONS_COIN_KEY + conponsId, 5000, TimeUnit.MILLISECONDS);
if (lock_coin) {
TbUserCoupons userCoupons = userCouponsMapper.selectByPrimaryKey(conponsId);
if (Objects.isNull(userCoupons) || !userCoupons.getStatus().equals("0") || userCoupons.getIsDouble().equals("true")) {
throw new MsgException("该优惠券已翻倍");
}
TbParams params = shopUserMapper.selectParams();
userCoupons.setIsDouble("true");
userCoupons.setCouponsAmount(userCoupons.getCouponsAmount().multiply(params.getTwoRatio()));
userCoupons.setCouponsPrice(userCoupons.getCouponsPrice().multiply(params.getTwoRatio()));
userCoupons.setUpdateTime(new Date());
userCouponsMapper.updateByPrimaryKeySelective(userCoupons);
redisUtils.releaseLock(RedisCst.COUPONS_COIN_KEY + conponsId);
} else {
modityDouble(conponsId);
}
}
}

View File

@@ -246,7 +246,11 @@ public class PayService {
log.info("发送打印数据");
producer.printMechine(orderInfo.getId() + "");
log.info("发送赠送购物券");
JSONObject coupons = new JSONObject();
coupons.put("type","buy");
coupons.put("orderId",orderId);
producer.printCoupons(coupons.toJSONString());
return Result.success(CodeEnum.SUCCESS,orderId);
case "2": //退款成功
cartStatus="refund";

View File

@@ -0,0 +1,221 @@
package com.chaozhanggui.system.cashierservice.service;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.chaozhanggui.system.cashierservice.dao.*;
import com.chaozhanggui.system.cashierservice.entity.*;
import com.chaozhanggui.system.cashierservice.entity.vo.IntegralFlowVo;
import com.chaozhanggui.system.cashierservice.entity.vo.IntegralVo;
import com.chaozhanggui.system.cashierservice.exception.MsgException;
import com.chaozhanggui.system.cashierservice.redis.RedisCst;
import com.chaozhanggui.system.cashierservice.redis.RedisUtil;
import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
import com.chaozhanggui.system.cashierservice.sign.Result;
import com.chaozhanggui.system.cashierservice.util.*;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.TimeUnit;
@Service
public class UserService {
@Autowired
private TbShopUserMapper shopUserMapper;
@Autowired
private TbReleaseFlowMapper releaseFlowMapper;
@Autowired
private TbUserInfoMapper userInfoMapper;
@Autowired
RedisUtils redisUtils;
public JSONObject modityIntegral(IntegralVo integralVo, String userSign) {
JSONObject object = (JSONObject) JSONObject.toJSON(integralVo);
if (N.gt(BigDecimal.ZERO, integralVo.getNum())) {
JSONObject result = new JSONObject();
result.put("status", "fail");
result.put("msg", "积分数量不允许小于0");
result.put("data", "");
return result;
}
object.put("userSign", userSign);
JSONObject jsonObject = JSONUtil.sortJSONObject(object, CacheMap.map);
System.out.println(jsonObject.toJSONString());
String sign = MD5Util.encrypt(jsonObject.toJSONString());
if (!sign.equals(integralVo.getSign())) {
JSONObject result = new JSONObject();
result.put("status", "fail");
result.put("msg", "签名验证失败");
result.put("data", "");
return result;
}
TbShopUser shopUser = shopUserMapper.selectByOpenId(integralVo.getOpenId());
if (Objects.isNull(shopUser)) {
JSONObject result = new JSONObject();
result.put("status", "fail");
result.put("msg", "用户不存在");
result.put("data", "");
return result;
}
boolean falg = updateIntegral(shopUser.getUserId(), integralVo.getNum(), integralVo.getType());
if (!falg) {
JSONObject result = new JSONObject();
result.put("status", "fail");
result.put("msg", "余额不足");
result.put("data", "");
return result;
}
JSONObject result = new JSONObject();
result.put("status", "success");
result.put("msg", "操作成功");
return result;
}
public static void main(String[] args) {
IntegralVo integralVo = new IntegralVo();
integralVo.setNum(new BigDecimal("5254"));
integralVo.setOpenId("or1l864NBOoJZhC5x_yeziZ26j6c");
integralVo.setType("sub");
JSONObject object = (JSONObject) JSONObject.toJSON(integralVo);
object.put("userSign", "02c03d79c36b4c01b217ffb1baef9009");
JSONObject jsonObject = JSONUtil.sortJSONObject(object, CacheMap.map);
System.out.println("加密前字符串:" + jsonObject.toJSONString());
String sign = MD5Util.encrypt(jsonObject.toJSONString());
System.out.println("加密后签名:" + sign);
}
private Boolean updateIntegral(String userId, BigDecimal num, String type) {
boolean lock_coin = redisUtils.lock(RedisCst.INTEGRAL_COIN_KEY + userId, 5000, TimeUnit.MILLISECONDS);
if (lock_coin) {
TbUserInfo tbShopUser = userInfoMapper.selectByPrimaryKey(Integer.valueOf(userId));
boolean flag = true;
if (type.equals("sub")) {
if (num.intValue() < tbShopUser.getTotalScore()) {
flag = false;
} else {
tbShopUser.setTotalScore(tbShopUser.getTotalScore() - num.intValue());
}
} else if (type.equals("add")) {
tbShopUser.setTotalScore(tbShopUser.getTotalScore() - num.intValue());
}
if (flag) {
TbReleaseFlow releaseFlow = new TbReleaseFlow();
releaseFlow.setNum(num);
releaseFlow.setCreateTime(new Date());
releaseFlow.setFromSource("OWER");
releaseFlow.setUserId(userId);
if (type.equals("sub")) {
releaseFlow.setType("BUYSUB");
releaseFlow.setOperationType("SUB");
releaseFlow.setRemark("购买商品扣除");
} else if (type.equals("sub")) {
releaseFlow.setType("THREEADD");
releaseFlow.setOperationType("ADD");
releaseFlow.setRemark("退货增加");
}
releaseFlowMapper.insert(releaseFlow);
userInfoMapper.updateByPrimaryKeySelective(tbShopUser);
}
redisUtils.releaseLock(RedisCst.INTEGRAL_COIN_KEY + userId);
return flag;
} else {
return updateIntegral(userId, num, type);
}
}
public JSONObject userIntegral(IntegralFlowVo integralFlowVo, String userSign) {
JSONObject object = (JSONObject) JSONObject.toJSON(integralFlowVo);
object.put("userSign", userSign);
JSONObject jsonObject = JSONUtil.sortJSONObject(object, CacheMap.map);
System.out.println(jsonObject.toJSONString());
String sign = MD5Util.encrypt(jsonObject.toJSONString());
if (!sign.equals(integralFlowVo.getSign())) {
JSONObject result = new JSONObject();
result.put("status", "fail");
result.put("msg", "签名验证失败");
result.put("data", "");
return result;
}
TbUserInfo shopUser = userInfoMapper.selectByOpenId(integralFlowVo.getOpenId());
if (Objects.isNull(shopUser)) {
JSONObject result = new JSONObject();
result.put("status", "fail");
result.put("msg", "用户不存在");
result.put("data", "");
return result;
}
PageHelper.startPage(integralFlowVo.getPage(), integralFlowVo.getPageSize());
PageHelper.orderBy("id DESC");
List<TbReleaseFlow> list = releaseFlowMapper.selectByUserId(shopUser.getId().toString());
for (TbReleaseFlow tbReleaseFlow:list){
tbReleaseFlow.setCreateTr(DateUtils.getStrTime(tbReleaseFlow.getCreateTime()));
}
JSONObject result = new JSONObject();
result.put("status", "success");
result.put("msg", "成功");
result.put("data", list);
return result;
}
public JSONObject userAllIntegral(IntegralFlowVo integralFlowVo, String userSign) {
// JSONObject object = (JSONObject) JSONObject.toJSON(integralFlowVo);
// object.put("userSign", userSign);
// JSONObject jsonObject = JSONUtil.sortJSONObject(object, CacheMap.notOpenMap);
// System.out.println(jsonObject.toJSONString());
// String sign = MD5Util.encrypt(jsonObject.toJSONString());
// if (!sign.equals(integralFlowVo.getSign())) {
// JSONObject result = new JSONObject();
// result.put("status", "fail");
// result.put("msg", "签名验证失败");
// result.put("data", "");
// return result;
// }
PageHelper.startPage(integralFlowVo.getPage(), integralFlowVo.getPageSize());
PageHelper.orderBy("id DESC");
List<TbReleaseFlow> list = releaseFlowMapper.selectAll();
for (TbReleaseFlow tbReleaseFlow:list){
tbReleaseFlow.setCreateTr(DateUtils.getStrTime(tbReleaseFlow.getCreateTime()));
}
PageInfo pageInfo = new PageInfo(list);
JSONObject result = new JSONObject();
result.put("status", "success");
result.put("msg", "成功");
result.put("data", pageInfo);
return result;
}
public JSONObject userAll(IntegralFlowVo integralFlowVo, String userSign) {
// JSONObject object = (JSONObject) JSONObject.toJSON(integralFlowVo);
// object.put("userSign", userSign);
// JSONObject jsonObject = JSONUtil.sortJSONObject(object, CacheMap.notOpenMap);
// System.out.println(jsonObject.toJSONString());
// String sign = MD5Util.encrypt(jsonObject.toJSONString());
// if (!sign.equals(integralFlowVo.getSign())) {
// JSONObject result = new JSONObject();
// result.put("status", "fail");
// result.put("msg", "签名验证失败");
// result.put("data", "");
// return result;
// }
PageHelper.startPage(integralFlowVo.getPage(), integralFlowVo.getPageSize());
PageHelper.orderBy("id DESC");
List<TbUserInfo> list = userInfoMapper.selectAll();
PageInfo pageInfo = new PageInfo(list);
JSONObject result = new JSONObject();
result.put("status", "success");
result.put("msg", "成功");
result.put("data", pageInfo);
return result;
}
}