Merge remote-tracking branch 'origin/dev' into zs

# Conflicts:
#	src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java
This commit is contained in:
SongZhang 2024-08-14 14:11:53 +08:00
commit 5a0112132d
3 changed files with 66 additions and 44 deletions

View File

@ -35,6 +35,8 @@ public class TbConsInfo implements Serializable {
private Date updateTime; private Date updateTime;
private String isCheck;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public Integer getId() { public Integer getId() {
@ -156,4 +158,12 @@ public class TbConsInfo implements Serializable {
public void setPrice(BigDecimal price) { public void setPrice(BigDecimal price) {
this.price = price; this.price = price;
} }
public String getIsCheck() {
return isCheck;
}
public void setIsCheck(String isCheck) {
this.isCheck = isCheck;
}
} }

View File

@ -1,13 +1,12 @@
package com.chaozhanggui.system.cashierservice.service; package com.chaozhanggui.system.cashierservice.service;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.chaozhanggui.system.cashierservice.bean.ShopWxMsgTypeEnum;
import com.chaozhanggui.system.cashierservice.dao.*; import com.chaozhanggui.system.cashierservice.dao.*;
import com.chaozhanggui.system.cashierservice.entity.*; import com.chaozhanggui.system.cashierservice.entity.*;
import com.chaozhanggui.system.cashierservice.entity.po.*; import com.chaozhanggui.system.cashierservice.entity.po.*;
@ -26,6 +25,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -77,6 +77,12 @@ public class OrderService {
private final TbShopOpenIdMapper shopOpenIdMapper; private final TbShopOpenIdMapper shopOpenIdMapper;
@Autowired
private TbProskuConMapper tbProskuConMapper;
@Autowired
TbConsInfoMapper tbConsInfoMapper;
private static ConcurrentHashMap<String, HashSet<Integer>> codeMap = new ConcurrentHashMap<>(); private static ConcurrentHashMap<String, HashSet<Integer>> codeMap = new ConcurrentHashMap<>();
private static ConcurrentHashMap<String, HashSet<String>> userMap = new ConcurrentHashMap<>(); private static ConcurrentHashMap<String, HashSet<String>> userMap = new ConcurrentHashMap<>();
@ -92,7 +98,7 @@ public class OrderService {
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result createCart(String masterId, String productId, String shopId, Integer skuId, Integer number, public Result createCart(String masterId, String productId, String shopId, Integer skuId, Integer number,
String userId, String clientType, Integer cartId, String isGift, String isPack, String uuid, String type, String qrcode) { String userId, String clientType, Integer cartId, String isGift, String isPack, String uuid, String type) {
if (Objects.isNull(number) || number < 0) { if (Objects.isNull(number) || number < 0) {
return Result.fail(CodeEnum.NUMBER); return Result.fail(CodeEnum.NUMBER);
} }
@ -121,6 +127,32 @@ public class OrderService {
return Result.fail(CodeEnum.PRODUCTSKUERROR); return Result.fail(CodeEnum.PRODUCTSKUERROR);
} }
List<TbProskuCon> proskuConList= tbProskuConMapper.selectByShopIdAndSkuIdAndProductId(skuId,shopInfo.getId(),product.getId());
if(Objects.nonNull(proskuConList)&&proskuConList.size()>0){
for (TbProskuCon proskuCon : proskuConList) {
if("1".equals(proskuCon.getStatus())){
TbConsInfo consInfo= tbConsInfoMapper.selectByPrimaryKey(proskuCon.getConInfoId());
if("1".equals(consInfo.getIsCheck())){
if(N.egt(proskuCon.getSurplusStock(),consInfo.getStockNumber().abs().subtract(consInfo.getStockConsume().abs()))){
return Result.fail("商品:".concat(product.getName()).concat("对应的:").concat(consInfo.getConName()).concat("耗材不足"));
}
}
}
}
}
String exists = redisUtil.getMessage(RedisCst.ORDER_CART_EXISTS + cartId); String exists = redisUtil.getMessage(RedisCst.ORDER_CART_EXISTS + cartId);
// 首次加入购物车并且拥有起售数设置为起售数 // 首次加入购物车并且拥有起售数设置为起售数
@ -129,7 +161,7 @@ public class OrderService {
// 低于起售删除商品 // 低于起售删除商品
}else if (exists != null && skuWithBLOBs.getSuit() != null && skuWithBLOBs.getSuit() != 0 && number < skuWithBLOBs.getSuit()){ }else if (exists != null && skuWithBLOBs.getSuit() != null && skuWithBLOBs.getSuit() != 0 && number < skuWithBLOBs.getSuit()){
redisUtil.deleteByKey(RedisCst.ORDER_CART_EXISTS + cartId); redisUtil.deleteByKey(RedisCst.ORDER_CART_EXISTS + cartId);
delCart(masterId, cartId, qrcode); delCart(masterId, cartId);
return Result.success(CodeEnum.SUCCESS, masterId); return Result.success(CodeEnum.SUCCESS, masterId);
} }
@ -145,7 +177,7 @@ public class OrderService {
} }
} }
if (qrcode == null && StringUtils.isEmpty(masterId)) { if (StringUtils.isEmpty(masterId)) {
boolean flag = redisUtil.exists("SHOP:CODE:" + clientType + ":" + shopId); boolean flag = redisUtil.exists("SHOP:CODE:" + clientType + ":" + shopId);
if (flag) { if (flag) {
String code = redisUtil.getMessage("SHOP:CODE:" + clientType + ":" + shopId).toString(); String code = redisUtil.getMessage("SHOP:CODE:" + clientType + ":" + shopId).toString();
@ -158,8 +190,6 @@ public class OrderService {
masterId = "#" + String.format("%03d", 1); masterId = "#" + String.format("%03d", 1);
} }
} }
TbCashierCart cart = cashierCartMapper.selectByPrimaryKey(cartId); TbCashierCart cart = cashierCartMapper.selectByPrimaryKey(cartId);
if (Objects.nonNull(cart)) { if (Objects.nonNull(cart)) {
@ -173,6 +203,7 @@ public class OrderService {
cashierCartMapper.updateByPrimaryKey(cashierCart); cashierCartMapper.updateByPrimaryKey(cashierCart);
cashierCartMapper.deleteByPrimaryKey(cart.getId()); cashierCartMapper.deleteByPrimaryKey(cart.getId());
redisUtil.deleteByKey(RedisCst.ORDER_CART_EXISTS + cart.getId());
cart=cashierCart; cart=cashierCart;
} }
}else { }else {
@ -200,23 +231,15 @@ public class OrderService {
} else { } else {
List<TbCashierCart> list = StrUtil.isNotBlank(masterId) ? cashierCartMapper.selectALlByMasterId(masterId, "create") List<TbCashierCart> list = cashierCartMapper.selectALlByMasterId(masterId, "create");
: cashierCartMapper.selectActivateByQrcode(qrcode, Integer.valueOf(shopId)); TbCashierCart cashierCart = cashierCartMapper.selectByDetail(masterId, productId, shopId, skuId.toString(), DateUtils.getDay(), uuid);
TbCashierCart cashierCart = StrUtil.isNotBlank(masterId) ? cashierCartMapper.selectByDetail(masterId, productId, shopId, skuId.toString(), DateUtils.getDay(), uuid)
: cashierCartMapper.selectDetailByQrcode(qrcode, productId, shopId, skuId.toString(), uuid);
if (number > 0) { if (number > 0) {
if (Objects.isNull(cashierCart)) { if (Objects.isNull(cashierCart)) {
cashierCart = new TbCashierCart(); cashierCart = new TbCashierCart();
cashierCart.setCoverImg(product.getCoverImg()); cashierCart.setCoverImg(product.getCoverImg());
cashierCart.setCreatedAt(System.currentTimeMillis()); cashierCart.setCreatedAt(System.currentTimeMillis());
cashierCart.setIsSku(product.getTypeEnum()); cashierCart.setIsSku(product.getTypeEnum());
if (qrcode != null) { cashierCart.setMasterId(masterId);
cashierCart.setTableId(qrcode);
}else {
cashierCart.setMasterId(masterId);
}
cashierCart.setUuid(uuid); cashierCart.setUuid(uuid);
cashierCart.setMerchantId(userId); cashierCart.setMerchantId(userId);
cashierCart.setName(product.getName()); cashierCart.setName(product.getName());
@ -278,9 +301,7 @@ public class OrderService {
skuWithBLOBs.setUpdatedAt(System.currentTimeMillis()); skuWithBLOBs.setUpdatedAt(System.currentTimeMillis());
tbProductSkuMapper.updateByPrimaryKey(skuWithBLOBs); tbProductSkuMapper.updateByPrimaryKey(skuWithBLOBs);
if (StrUtil.isNotBlank(masterId)) { redisUtil.saveMessage("SHOP:CODE:SET" + clientType + ":" + shopId + ":" + DateUtils.getDay(),masterId.substring(1,masterId.length()));
redisUtil.saveMessage("SHOP:CODE:SET" + clientType + ":" + shopId + ":" + DateUtils.getDay(), masterId.substring(1,masterId.length()));
}
@ -313,30 +334,24 @@ public class OrderService {
(product.getIsDistribute() == 1 && product.getStockNumber() - num <= productSku.getWarnLine()) (product.getIsDistribute() == 1 && product.getStockNumber() - num <= productSku.getWarnLine())
|| (product.getIsDistribute() != 1) && productSku.getStockNumber() - num <= productSku.getWarnLine() || (product.getIsDistribute() != 1) && productSku.getStockNumber() - num <= productSku.getWarnLine()
) { ) {
List<TbShopOpenId> shopOpenIds = shopOpenIdMapper.selectStateByShopIdAndType(product.getShopId(), ShopWxMsgTypeEnum.STOCK_MSG.getType()); List<TbShopOpenId> shopOpenIds = shopOpenIdMapper.selectByShopId(Integer.valueOf(product.getShopId()));
shopOpenIds.forEach(item -> { shopOpenIds.forEach(item -> {
wxAccountUtil.sendStockWarnMsg("商品库存不足", product.getName(), wxAccountUtil.sendStockWarnMsg("商品库存不足", product.getName(),
product.getIsDistribute() == 1 ? product.getStockNumber()-num : (int) (productSku.getStockNumber() - num), item.getOpenId(), ShopWxMsgTypeEnum.STOCK_MSG, shopId); product.getIsDistribute() == 1 ? product.getStockNumber()-num : (int) (productSku.getStockNumber() - num), item.getOpenId());
}); });
} }
} }
public Result queryCart(String masterId, String shopId, String qrcode) { public Result queryCart(String masterId, String shopId) {
if (StringUtils.isEmpty(shopId)) { if (StringUtils.isEmpty(shopId)) {
return Result.fail(CodeEnum.SHOPINFONOEXIST); return Result.fail(CodeEnum.SHOPINFONOEXIST);
} }
String day = DateUtils.getDay(); String day = DateUtils.getDay();
List<TbCashierCart> list = cashierCartMapper.selectByMaskerId(masterId, Integer.valueOf(shopId),"create",day);
List<TbCashierCart> list; if (list.size() < 1){
if (StrUtil.isBlank(masterId)) {
list = cashierCartMapper.selectActivateByQrcode(qrcode, Integer.valueOf(shopId));
}else {
list = cashierCartMapper.selectByMaskerId(masterId, Integer.valueOf(shopId),"create",day);
}
if (StrUtil.isNotBlank(masterId) && list.isEmpty()){
list = cashierCartMapper.selectByMaskerId(masterId, Integer.valueOf(shopId), "refund",day); list = cashierCartMapper.selectByMaskerId(masterId, Integer.valueOf(shopId), "refund",day);
if (!list.isEmpty()){ if (list.size() > 0){
if (list.isEmpty()) { if (list.size() < 1) {
return Result.fail(CodeEnum.CARTJH); return Result.fail(CodeEnum.CARTJH);
} }
int orderId = 0; int orderId = 0;
@ -378,13 +393,7 @@ public class OrderService {
} }
// TbProductSkuResult skuResult = tbProductSkuResultMapper.selectByPr imaryKey(Integer.valueOf(cashierCart.getProductId())); // TbProductSkuResult skuResult = tbProductSkuResultMapper.selectByPr imaryKey(Integer.valueOf(cashierCart.getProductId()));
} }
QueryCartPo queryCartPo = cashierCartMapper.selectProductNumByMarketId(day, shopId, masterId);
QueryCartPo queryCartPo;
if (StrUtil.isNotBlank(masterId)) {
queryCartPo = cashierCartMapper.selectProductNumByMarketId(day, shopId, masterId);
}else {
queryCartPo = cashierCartMapper.selectProductNumByQrcode(qrcode, Integer.valueOf(shopId));
}
queryCartPo.setPackAmount(packAmount); queryCartPo.setPackAmount(packAmount);
queryCartPo.setTotalAmount(totalAmount); queryCartPo.setTotalAmount(totalAmount);
// queryCartPo.setTotalAmount(totalAmount.add(packAmount)); // queryCartPo.setTotalAmount(totalAmount.add(packAmount));
@ -395,7 +404,7 @@ public class OrderService {
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Result delCart(String masterId, Integer cartId, String qrcode) { public Result delCart(String masterId, Integer cartId) {
TbCashierCart cashierCart=cashierCartMapper.selectByPrimaryKey(cartId); TbCashierCart cashierCart=cashierCartMapper.selectByPrimaryKey(cartId);
@ -427,7 +436,7 @@ public class OrderService {
List<String> skuIds=new ArrayList<>(); List<String> skuIds=new ArrayList<>();
skuIds.add(cashierCart.getSkuId()); skuIds.add(cashierCart.getSkuId());
cashierCartMapper.deleteByCartIdOrTableId(masterId, cartId, qrcode); cashierCartMapper.deleteByCartId(masterId, cartId);
return Result.success(CodeEnum.SUCCESS); return Result.success(CodeEnum.SUCCESS);
} }

View File

@ -17,10 +17,13 @@
<result column="con_warning" jdbcType="DECIMAL" property="conWarning" /> <result column="con_warning" jdbcType="DECIMAL" property="conWarning" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" /> <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" /> <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
<result column="is_check" jdbcType="VARCHAR" property="isCheck" />
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id, shop_id, con_type_id, con_type_name, con_code, con_name, stock_number,price,stock_consume,status, con_unit, id, shop_id, con_type_id, con_type_name, con_code, con_name, stock_number,price,stock_consume,status, con_unit,
laster_in_stock, con_warning, create_time, update_time laster_in_stock, con_warning, create_time, update_time,is_check
</sql> </sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap"> <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select select