This commit is contained in:
韩鹏辉
2024-03-21 10:22:29 +08:00
parent 1c47f567d8
commit b77eacdccb
270 changed files with 32916 additions and 0 deletions

View File

@@ -0,0 +1,383 @@
package com.chaozhanggui.system.cashierservice.service;
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.dto.ProductCartDto;
import com.chaozhanggui.system.cashierservice.entity.vo.CashierCarVo;
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.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.SnowFlakeUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.IOException;
import java.math.BigDecimal;
import java.time.Instant;
import java.util.*;
/**
* @author lyf
*/
@Service
@Slf4j
public class CartService {
@Autowired
private RedisUtil redisUtil;
@Autowired
private TbOrderInfoMapper orderInfoMapper;
@Autowired
private TbCashierCartMapper cashierCartMapper;
@Autowired
private TbProductMapper productMapper;
@Autowired
private TbProductSkuMapper productSkuMapper;
@Autowired
private TbMerchantAccountMapper merchantAccountMapper;
@Autowired
private TbUserInfoMapper userInfoMapper;
@Autowired
private TbOrderDetailMapper orderDetailMapper;
@Autowired
private TbShopTableMapper shopTableMapper;
// @Transactional(rollbackFor = Exception.class)
public void createCart(JSONObject jsonObject) throws Exception {
try {
String tableId = jsonObject.getString("tableId");
String shopId = jsonObject.getString("shopId");
JSONArray jsonArray = new JSONArray();
BigDecimal amount = BigDecimal.ZERO;
boolean exist = redisUtil.exists(RedisCst.PRODUCT + shopId + ":" + jsonObject.getString("skuId"));
if (!exist) {
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("status", "fail");
jsonObject1.put("msg", "该商品库存已售罄");
jsonObject1.put("data", new ArrayList<>());
AppWebSocketServer.AppSendInfo(jsonObject1, jsonObject.getString("userId"), true);
throw new MsgException("该商品库存已售罄");
}
if (jsonObject.getInteger("num") > 0) {
String result = redisUtil.seckill(RedisCst.PRODUCT + shopId + ":" + jsonObject.getString("skuId"), jsonObject.getInteger("num").toString());
if (result.equals("0")) {
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("status", "fail");
jsonObject1.put("msg", "该商品库存已售罄");
jsonObject1.put("data", new ArrayList<>());
AppWebSocketServer.AppSendInfo(jsonObject1, jsonObject.getString("userId"), true);
throw new MsgException("该商品库存已售罄");
}
} else {
String result = redisUtil.seckill(RedisCst.PRODUCT + shopId + ":" + jsonObject.getString("skuId"), jsonObject.getInteger("num").toString());
}
if (redisUtil.exists(RedisCst.TABLE_CART.concat(jsonObject.getString("tableId").concat("-").concat(shopId)))) {
JSONArray array = JSON.parseArray(redisUtil.getMessage(RedisCst.TABLE_CART.concat(jsonObject.getString("tableId").concat("-").concat(shopId))));
if (Objects.isNull(array) || array.isEmpty() || array.size() < 1) {
if (jsonObject.getInteger("num") > 0) {
TbCashierCart cashierCart = addCart(jsonObject.getString("productId"), jsonObject.getString("skuId"),
jsonObject.getInteger("userId"), jsonObject.getInteger("num"), tableId, jsonObject.getString("shopId"));
jsonArray.add(cashierCart);
amount = amount.add(new BigDecimal(cashierCart.getNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee())));
}
} else {
boolean flag = true;
for (int i = 0; i < array.size(); i++) {
JSONObject object = array.getJSONObject(i);
if (object.getString("skuId").equals(jsonObject.getString("skuId"))) {
object.put("totalNumber", object.getIntValue("totalNumber") + jsonObject.getInteger("num"));
object.put("number", object.getIntValue("number") + jsonObject.getInteger("num"));
flag = false;
}
TbCashierCart cashierCart = JSONUtil.parseJSONStr2T(object.toJSONString(), TbCashierCart.class);
if (cashierCart.getNumber() > 0) {
cashierCart.setTotalAmount(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee())));
if (StringUtils.isNotEmpty(cashierCart.getStatus())) {
cashierCart.setStatus("create");
}
cashierCartMapper.updateByPrimaryKeySelective(cashierCart);
if (cashierCart.getNumber() > 0) {
jsonArray.add(cashierCart);
amount = amount.add(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee())));
} else {
cashierCartMapper.deleteByPrimaryKey(cashierCart.getId());
}
} else {
cashierCartMapper.deleteByPrimaryKey(cashierCart.getId());
}
}
if (flag && jsonObject.getInteger("num") > 0) {
TbCashierCart cashierCart = addCart(jsonObject.getString("productId"), jsonObject.getString("skuId"),
jsonObject.getInteger("userId"), jsonObject.getInteger("num"), tableId, jsonObject.getString("shopId"));
jsonArray.add(cashierCart);
amount = amount.add(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee())));
}
}
} else {
if (jsonObject.getInteger("num") > 0) {
TbCashierCart cashierCart = addCart(jsonObject.getString("productId"), jsonObject.getString("skuId"),
jsonObject.getInteger("userId"), jsonObject.getInteger("num"), tableId, jsonObject.getString("shopId"));
jsonArray.add(cashierCart);
amount = amount.add(new BigDecimal(cashierCart.getTotalNumber()).multiply(cashierCart.getSalePrice().add(cashierCart.getPackFee())));
}
}
productSkuMapper.updateStockById(jsonObject.getString("skuId"), jsonObject.getInteger("num"));
// AppWebSocketServer.getRecordMap().put(jsonObject.getString("tableId"), returnList);
redisUtil.saveMessage(RedisCst.TABLE_CART.concat(tableId).concat("-").concat(shopId), jsonArray.toJSONString());
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("status", "success");
jsonObject1.put("msg", "成功");
jsonObject1.put("type", jsonObject.getString("type"));
jsonObject1.put("data", jsonArray);
jsonObject1.put("amount", amount);
AppWebSocketServer.AppSendInfo(jsonObject1, jsonObject.getString("tableId").concat("-").concat(shopId), false);
} catch (Exception e) {
e.getMessage();
}
}
private TbCashierCart addCart(String productId, String skuId, Integer userId, Integer num, String tableId, String shopId) throws Exception {
TbProduct product = productMapper.selectById(Integer.valueOf(productId));
if (Objects.isNull(product)) {
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("status", "fail");
jsonObject1.put("msg", "该商品不存在");
jsonObject1.put("data", new ArrayList<>());
AppWebSocketServer.AppSendInfo(jsonObject1, userId.toString(), true);
throw new MsgException("该商品不存在");
}
TbProductSkuWithBLOBs productSku = productSkuMapper.selectByPrimaryKey(Integer.valueOf(skuId));
if (Objects.isNull(productSku)) {
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("status", "fail");
jsonObject1.put("msg", "该商品规格不存在");
jsonObject1.put("data", new ArrayList<>());
AppWebSocketServer.AppSendInfo(jsonObject1, userId.toString(), true);
throw new MsgException("该商品规格不存在");
}
TbCashierCart cashierCart = new TbCashierCart();
cashierCart.setProductId(productId);
cashierCart.setSkuId(skuId);
cashierCart.setNumber(num);
cashierCart.setCoverImg(product.getCoverImg());
cashierCart.setName(product.getName());
cashierCart.setCategoryId(product.getCategoryId());
cashierCart.setShopId(shopId);
cashierCart.setUserId(userId);
cashierCart.setTableId(tableId);
cashierCart.setSkuName(productSku.getSpecSnap());
cashierCart.setIsPack("false");
cashierCart.setIsGift("false");
cashierCart.setUserId(userId);
cashierCart.setStatus("create");
cashierCart.setType((byte) 0);
cashierCart.setSalePrice(productSku.getSalePrice());
cashierCart.setCreatedAt(Instant.now().toEpochMilli());
cashierCart.setUpdatedAt(Instant.now().toEpochMilli());
cashierCart.setTotalNumber(num);
cashierCart.setPackFee(BigDecimal.ZERO);
cashierCart.setRefundNumber(0);
cashierCart.setTotalAmount(new BigDecimal(cashierCart.getTotalNumber()).multiply(productSku.getSalePrice().add(cashierCart.getPackFee())));
cashierCartMapper.insert(cashierCart);
return cashierCart;
}
@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 saleAmount = BigDecimal.ZERO;
Map<Integer, TbProductSku> skuMap = new HashMap<>();
List<TbOrderDetail> orderDetails = new ArrayList<>();
Integer orderId = 0;
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());
if (Objects.nonNull(tbProduct)) {
saleAmount = saleAmount.add(tbProduct.getSalePrice());
}
skuMap.put(tbProduct.getId(), tbProduct);
TbOrderDetail orderDetail = new TbOrderDetail();
orderDetail.setCreateTime(new Date());
orderDetail.setNum(cashierCart.getNumber());
orderDetail.setPrice(cashierCart.getSalePrice());
if (cashierCart.getIsPack().equals("true")) {
orderDetail.setPriceAmount(cashierCart.getTotalAmount().add(cashierCart.getPackFee()));
} else {
orderDetail.setPriceAmount(cashierCart.getTotalAmount());
}
orderDetail.setProductId(Integer.valueOf(cashierCart.getProductId()));
orderDetail.setProductSkuId(Integer.valueOf(cashierCart.getSkuId()));
orderDetail.setProductSkuName(tbProduct.getSpecSnap());
orderDetail.setProductName(cashierCart.getName());
orderDetail.setShopId(jsonObject.getInteger("shopId"));
orderDetail.setPackAmount(cashierCart.getPackFee());
orderDetail.setProductImg(cashierCart.getCoverImg());
orderDetail.setStatus("unpaid");
if (StringUtils.isNotEmpty(cashierCart.getOrderId())) {
orderId = Integer.valueOf(cashierCart.getOrderId());
}
orderDetails.add(orderDetail);
if (StringUtils.isNotEmpty(cashierCart.getOrderId())) {
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);
if (Objects.nonNull(orderInfo)) {
log.info("订单状态:" + orderInfo.getStatus());
if (!"unpaid".equals(orderInfo.getStatus())) {
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;
}
orderDetailMapper.deleteByOUrderId(orderId);
orderInfo.setUpdatedAt(System.currentTimeMillis());
orderInfo.setSettlementAmount(totalAmount);
orderInfo.setAmount(totalAmount);
orderInfo.setOriginAmount(totalAmount);
orderInfo.setOrderAmount(totalAmount.add(packAMount));
orderInfo.setFreightAmount(BigDecimal.ZERO);
orderInfo.setProductAmount(saleAmount);
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.setMerchantId(String.valueOf(tbMerchantAccount.getId()));
orderInfoMapper.insert(orderInfo);
orderId = orderInfo.getId();
}
for (TbOrderDetail orderDetail : orderDetails) {
orderDetail.setOrderId(orderId);
orderDetailMapper.insert(orderDetail);
}
for (int i = 0; i < array.size(); i++) {
JSONObject object = array.getJSONObject(i);
TbCashierCart cashierCart = JSONUtil.parseJSONStr2T(object.toJSONString(), TbCashierCart.class);
cashierCart.setUpdatedAt(System.currentTimeMillis());
cashierCart.setOrderId(orderId + "");
cashierCart.setStatus("closed");
cashierCartMapper.updateByPrimaryKeySelective(cashierCart);
object.put("updatedAt", System.currentTimeMillis());
object.put("orderId", orderId + "");
}
redisUtil.saveMessage(RedisCst.TABLE_CART.concat(jsonObject.getString("tableId")).concat("-").concat(shopId), array.toJSONString());
orderInfo.setDetailList(orderDetails);
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("status", "success");
jsonObject1.put("msg", "成功");
jsonObject1.put("type", jsonObject.getString("type"));
jsonObject1.put("data", orderInfo);
redisUtil.deleteByKey(RedisCst.TABLE_CART.concat(jsonObject.getString("tableId")).concat("-").concat(shopId));
AppWebSocketServer.AppSendInfo(jsonObject1, jsonObject.getString("userId"), true);
JSONObject jsonObject12 = new JSONObject();
jsonObject12.put("status", "success");
jsonObject12.put("msg", "成功");
jsonObject12.put("type", "order");
jsonObject12.put("amount", BigDecimal.ZERO);
jsonObject12.put("data", new JSONArray());
AppWebSocketServer.AppSendInfo(jsonObject12, jsonObject.getString("tableId").concat("-").concat(shopId), false);
} catch (Exception e) {
e.getMessage();
}
}
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)))) {
JSONArray array = JSON.parseArray(redisUtil.getMessage(RedisCst.TABLE_CART.concat(jsonObject.getString("tableId").concat("-").concat(shopId))));
if (Objects.isNull(array) || array.isEmpty() || array.size() < 1) {
for (int i = 0; i < array.size(); i++) {
TbCashierCart cashierCart = JSONUtil.parseJSONStr2T(array.get(i).toString(), TbCashierCart.class);
// String result = redisUtil.secAdd(RedisCst.PRODUCT+shopId+":"+jsonObject.getString("skuId"),cashierCart.getNumber().toString());
productSkuMapper.updateAddStockById(jsonObject.getString("skuId"), cashierCart.getNumber());
}
}
}
cashierCartMapper.updateStatusByTableId(jsonObject.getString("tableId"), "closed");
redisUtil.saveMessage(RedisCst.TABLE_CART.concat(jsonObject.getString("tableId").concat("-").concat(shopId)), new JSONArray().toJSONString());
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("status", "success");
jsonObject1.put("msg", "成功");
jsonObject1.put("type", "clearCart");
jsonObject1.put("amount", BigDecimal.ZERO);
jsonObject1.put("data", new ArrayList<>());
AppWebSocketServer.AppSendInfo(jsonObject1, jsonObject.getString("tableId").concat("-").concat(shopId), false);
}
}

View File

@@ -0,0 +1,156 @@
//package com.chaozhanggui.system.cashierservice.service;
//
//import com.chaozhanggui.system.cashierservice.dao.TbCashierCartMapper;
//import com.chaozhanggui.system.cashierservice.dao.TbProductMapper;
//import com.chaozhanggui.system.cashierservice.dao.TbProductSkuMapper;
//import com.chaozhanggui.system.cashierservice.entity.TbCashierCart;
//import com.chaozhanggui.system.cashierservice.entity.TbProduct;
//import com.chaozhanggui.system.cashierservice.entity.TbProductSku;
//import com.chaozhanggui.system.cashierservice.entity.dto.ProductCartDto;
//import com.chaozhanggui.system.cashierservice.entity.vo.CashierCarVo;
//import com.chaozhanggui.system.cashierservice.exception.MsgException;
//import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
//import com.chaozhanggui.system.cashierservice.sign.Result;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.BeanUtils;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import javax.annotation.Resource;
//import java.math.BigDecimal;
//import java.time.Instant;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//
///**
// * @author lyf
// */
//@Service
//@Slf4j
//public class CashierCartService {
// @Resource
// private TbCashierCartMapper cashierCartMapper;
// @Resource
// private TbProductMapper productMapper;
// @Resource
// private TbProductSkuMapper productSkuMapper;
//
// /**
// * 增加购物车
// * @param productCartDto
// * @return
// */
// @Transactional(rollbackFor = Exception.class)
// public Result batchAdd(ProductCartDto productCartDto){
// //首先确认金额
// TbProduct tbProduct = productMapper.selectById(Integer.valueOf(productCartDto.getProductId()));
// if (tbProduct == null){
// return Result.fail("商品信息不存在");
// }
//
// TbCashierCart cashierCart = cashierCartMapper.selectByProduct(productCartDto.getProductId(), productCartDto.getTableId());
// if (cashierCart != null){
// if ("add".equals(productCartDto.getType())){
// TbCashierCart cashierCartNow = new TbCashierCart();
// cashierCartNow.setNumber(cashierCart.getNumber()+1F);
// cashierCartNow.setId(cashierCart.getId());
// cashierCartMapper.updateByPrimaryKeySelective(cashierCartNow);
// return Result.success(CodeEnum.ENCRYPT);
// }else if ("minus".equals(productCartDto.getType())){
// TbCashierCart cashierCartNow = new TbCashierCart();
// cashierCartNow.setNumber(cashierCart.getNumber()-1F);
// cashierCartNow.setId(cashierCart.getId());
// if (cashierCartNow.getNumber() == 0F){
// cashierCartNow.setStatus("clear");
// cashierCartMapper.updateByPrimaryKeySelective(cashierCartNow);
// return Result.success(CodeEnum.ENCRYPT);
// }
// cashierCartMapper.updateByPrimaryKeySelective(cashierCartNow);
// return Result.success(CodeEnum.ENCRYPT);
// }else {
// throw new MsgException("添加购物车失败");
// }
// }
// //增加新的购物车
// TbCashierCart tbCashierCart = new TbCashierCart();
// BeanUtils.copyProperties(productCartDto,tbCashierCart);
// tbCashierCart.setSalePrice(tbProduct.getLowPrice());
// tbCashierCart.setCreatedAt(Instant.now().toEpochMilli());
// tbCashierCart.setUpdatedAt(Instant.now().toEpochMilli());
// tbCashierCart.setTotalNumber(0.00F);
// tbCashierCart.setRefundNumber(0.00F);
// tbCashierCart.setType((byte) 0);
// tbCashierCart.setSkuId(productCartDto.getSkuInfo());
// //购物车状态打开
// tbCashierCart.setStatus("open");
//
// int insert = cashierCartMapper.insertSelective(tbCashierCart);
// if (insert>0){
// return Result.success(CodeEnum.SUCCESS);
// }
// throw new MsgException("添加购物车失败");
// }
//
//
// public Result cartList(Integer tableId){
// HashMap<String, Object> map = new HashMap<>();
// List<TbCashierCart> tbCashierCarts = cashierCartMapper.selectByTableId(tableId);
// BigDecimal total = new BigDecimal("0.00");
// for (TbCashierCart date :tbCashierCarts) {
// Float number = date.getNumber();
// BigDecimal bigDecimalValue = new BigDecimal(number.toString());
// total=total.add(bigDecimalValue.multiply(date.getSalePrice()));
// }
//
// map.put("cartList",tbCashierCarts);
// map.put("total",total);
//
// return Result.success(CodeEnum.ENCRYPT,map);
//
// }
// @Transactional(rollbackFor = Exception.class)
// public Result updateNumber(Integer tableId,String type){
// TbCashierCart cashierCart = cashierCartMapper.selectByPrimaryKey(tableId);
// if (cashierCart == null){
// return Result.fail("商品不存在");
// }
// if ("add".equals(type)){
// TbCashierCart cashierCartNow = new TbCashierCart();
// cashierCartNow.setNumber(cashierCart.getNumber()+1F);
// cashierCartNow.setId(cashierCart.getId());
// cashierCartMapper.updateByPrimaryKeySelective(cashierCartNow);
// return Result.success(CodeEnum.ENCRYPT);
// }else if ("minus".equals(type)){
// TbCashierCart cashierCartNow = new TbCashierCart();
// cashierCartNow.setNumber(cashierCart.getNumber()-1F);
// cashierCartNow.setId(cashierCart.getId());
// if (cashierCartNow.getNumber() == 0F){
// cashierCartNow.setStatus("clear");
// cashierCartMapper.updateByPrimaryKeySelective(cashierCartNow);
// return Result.success(CodeEnum.ENCRYPT);
// }
// cashierCartMapper.updateByPrimaryKeySelective(cashierCartNow);
// return Result.success(CodeEnum.ENCRYPT);
// }else {
// throw new MsgException("更改商品失败");
// }
//
// }
// @Transactional(rollbackFor = Exception.class)
// public Result clearCart(Integer tableId){
// List<CashierCarVo> cashierCarVos = cashierCartMapper.selectByTableIdOpen(tableId);
// if (cashierCarVos.isEmpty()){
// return Result.fail("购物车内无商品");
// }
// List<Integer> ids = new ArrayList<>();
// for (CashierCarVo date :cashierCarVos) {
// ids.add(date.getId());
// }
// int i = cashierCartMapper.updateByIdsStatus(ids, Instant.now().toEpochMilli());
// if (i != ids.size()){
// throw new MsgException("清空购物车失败");
// }
// return Result.success(CodeEnum.ENCRYPT);
// }
//}

View File

@@ -0,0 +1,268 @@
package com.chaozhanggui.system.cashierservice.service;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.chaozhanggui.system.cashierservice.dao.*;
import com.chaozhanggui.system.cashierservice.entity.*;
import com.chaozhanggui.system.cashierservice.model.CategoryInfo;
import com.chaozhanggui.system.cashierservice.model.OrderDetailPO;
import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
import com.chaozhanggui.system.cashierservice.sign.Result;
import com.chaozhanggui.system.cashierservice.util.DateUtils;
import com.chaozhanggui.system.cashierservice.util.FeieyunPrintUtil;
import com.chaozhanggui.system.cashierservice.util.JSONUtil;
import com.chaozhanggui.system.cashierservice.util.PrinterUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Service
@Slf4j
public class CloudPrinterService {
TbShopUserMapper tbShopUserMapper;
@Autowired
private TbOrderInfoMapper tbOrderInfoMapper;
@Autowired
private TbPrintMachineMapper tbPrintMachineMapper;
@Autowired
private TbCashierCartMapper tbCashierCartMapper;
@Autowired
private TbProductSkuMapper tbProductSkuMapper;
@Autowired
private TbShopInfoMapper tbShopInfoMapper;
@Autowired
private TbProductMapper tbProductMapper;
public Result printReceipt(String type,String orderId,Boolean ispre){
try {
TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId));
if (ObjectUtil.isEmpty(orderInfo)) {
log.error("没有对应的订单信息");
return Result.fail("没有对应的订单信息");
}
TbShopInfo shopInfo = tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getShopId()));
if (ObjectUtil.isEmpty(shopInfo)) {
log.error("店铺信息不存在");
return Result.fail("店铺信息不存在");
}
List<TbPrintMachineWithBLOBs> list = tbPrintMachineMapper.selectByShopId(orderInfo.getShopId());
if (ObjectUtil.isEmpty(list) || list.size() <= 0) {
log.error("此店铺没有对应的打印机设备");
return Result.fail("此店铺没有对应的打印机设备");
}
list.parallelStream().forEach(tbPrintMachineWithBLOBs->{
if (!"network".equals(tbPrintMachineWithBLOBs.getConnectionType())) {
log.error("非网络打印机");
return;
}
if (!"1".equals(tbPrintMachineWithBLOBs.getStatus().toString())) {
log.error("打印机状态异常");
return;
}
JSONObject config = JSONObject.parseObject(tbPrintMachineWithBLOBs.getConfig());
String model = config.getString("model");
String printerNum = config.getString("printerNum");
String feet = config.getString("feet");
String autoCut = config.getString("autoCut");
List<CategoryInfo> categoryInfos=JSONUtil.parseJSONStr2TList(config.getJSONArray("categoryList").toString(),CategoryInfo.class);
switch (tbPrintMachineWithBLOBs.getContentType()){
case "yxyPrinter":
yxyPrinter(tbPrintMachineWithBLOBs,model,orderInfo,shopInfo,printerNum,categoryInfos);
break;
case "fePrinter":
fePrinter(tbPrintMachineWithBLOBs,model,orderInfo,shopInfo,printerNum,categoryInfos);
break;
}
});
return Result.success(CodeEnum.SUCCESS);
}catch (Exception e){
e.printStackTrace();
}
return Result.fail("系统异常");
}
/**
* 博时结云打印机
* @param tbPrintMachineWithBLOBs
* @param model
* @param orderInfo
* @param shopInfo
* @param printerNum
*/
private void yxyPrinter(TbPrintMachineWithBLOBs tbPrintMachineWithBLOBs,String model,TbOrderInfo orderInfo,TbShopInfo shopInfo,String printerNum, List<CategoryInfo> categoryInfos){
String orderId=orderInfo.getId().toString();
switch (tbPrintMachineWithBLOBs.getSubType()) {
case "label": //标签打印机
break;
case "cash": //小票打印机
switch (model) {
case "normal": //普通出单
List<TbCashierCart> cashierCarts = tbCashierCartMapper.selectByOrderId(orderInfo.getId().toString(),"final");
if (ObjectUtil.isNotEmpty(cashierCarts) && cashierCarts.size() > 0) {
List<OrderDetailPO.Detail> detailList = new ArrayList<>();
cashierCarts.parallelStream().forEach(it -> {
String categoryId;
if(ObjectUtil.isEmpty(it.getCategoryId())){
categoryId= tbProductMapper.selectByPrimaryKey(Integer.valueOf(it.getProductId())).getCategoryId();
} else {
categoryId = it.getCategoryId();
}
Long count= categoryInfos.stream().filter(c->
c.getId().toString().equals(categoryId)
).count();
if(count>0){
TbProductSkuWithBLOBs tbProductSkuWithBLOBs = tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(it.getSkuId()));
String remark = "";
if (ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs) && ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs.getSpecSnap())) {
remark = tbProductSkuWithBLOBs.getSpecSnap();
}
OrderDetailPO.Detail detail = new OrderDetailPO.Detail(it.getName(), it.getNumber().toString(), it.getTotalAmount().toPlainString(), remark);
detailList.add(detail);
}
});
String balance = "0";
if ("deposit".equals(orderInfo.getPayType())) {
TbShopUser user = tbShopUserMapper.selectByPrimaryKey(orderInfo.getMemberId());
if (ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getAmount())) {
balance = user.getAmount().toPlainString();
}
}
if(ObjectUtil.isNotEmpty(detailList)&&detailList.size()>0){
OrderDetailPO detailPO = new OrderDetailPO(shopInfo.getShopName(), "普通打印", orderInfo.getTableName(), orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), "【POS-1】001", orderInfo.getOrderAmount().toPlainString(), balance, orderInfo.getPayType(), "0", detailList);
String data= PrinterUtils.getCashPrintData(detailPO,"结算单");
PrinterUtils.printTickets(1, Integer.valueOf(printerNum), tbPrintMachineWithBLOBs.getAddress(), data);
}
}
break;
case "one": //一菜一品
cashierCarts = tbCashierCartMapper.selectByOrderId(orderId,"final");
if (ObjectUtil.isNotEmpty(cashierCarts) && cashierCarts.size() > 0) {
cashierCarts.parallelStream().forEach(it -> {
String categoryId;
if(ObjectUtil.isEmpty(it.getCategoryId())){
categoryId= tbProductMapper.selectByPrimaryKey(Integer.valueOf(it.getProductId())).getCategoryId();
} else {
categoryId = it.getCategoryId();
}
Long count= categoryInfos.stream().filter(c->
c.getId().toString().equals(categoryId)
).count();
if(count>0){
TbProductSkuWithBLOBs tbProductSkuWithBLOBs = tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(it.getSkuId()));
String remark = "";
if (ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs) && ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs.getSpecSnap())) {
remark = tbProductSkuWithBLOBs.getSpecSnap();
}
String data = PrinterUtils.getPrintData(orderInfo.getTableName(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), it.getName(), it.getNumber(), remark);
PrinterUtils.printTickets(1, Integer.valueOf(printerNum), tbPrintMachineWithBLOBs.getAddress(), data);
}
});
}
break;
case "category": //分类出单
break;
}
break;
case "kitchen": //出品打印机
break;
}
}
private void fePrinter(TbPrintMachineWithBLOBs tbPrintMachineWithBLOBs,String model,TbOrderInfo orderInfo,TbShopInfo shopInfo,String printerNum, List<CategoryInfo> categoryInfos){
String orderId=orderInfo.getId().toString();
switch (tbPrintMachineWithBLOBs.getSubType()) {
case "label": //标签打印机
List<TbCashierCart> cashierCarts = tbCashierCartMapper.selectByOrderId(orderInfo.getId().toString(),"final");
if (ObjectUtil.isNotEmpty(cashierCarts) && cashierCarts.size() > 0) {
cashierCarts.parallelStream().forEach(it->{
String categoryId;
if(ObjectUtil.isEmpty(it.getCategoryId())){
categoryId= tbProductMapper.selectByPrimaryKey(Integer.valueOf(it.getProductId())).getCategoryId();
} else {
categoryId = it.getCategoryId();
}
Long count= categoryInfos.stream().filter(c->
c.getId().toString().equals(categoryId)
).count();
if(count>0) {
TbProductSkuWithBLOBs tbProductSkuWithBLOBs = tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(it.getSkuId()));
String remark = "";
if (ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs) && ObjectUtil.isNotEmpty(tbProductSkuWithBLOBs.getSpecSnap())) {
remark = tbProductSkuWithBLOBs.getSpecSnap();
}
for(int i=0;i<it.getNumber();i++){
FeieyunPrintUtil.printLabelMsg(tbPrintMachineWithBLOBs.getAddress(), orderInfo.getTableName(), it.getName(), 1, DateUtils.getTimes(new Date(orderInfo.getCreatedAt())), it.getSalePrice().toPlainString(), remark);
}
}
});
}
break;
case "cash": //小票打印机
break;
case "kitchen": //出品打印机
break;
}
}
}

View File

@@ -0,0 +1,219 @@
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.chaozhanggui.system.cashierservice.dao.*;
import com.chaozhanggui.system.cashierservice.entity.*;
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.TokenUtil;
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.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Service
public class LoginService {
@Autowired
private TbUserInfoMapper tbUserInfoMapper;
@Autowired
private TbShopUserMapper tbShopUserMapper;
@Autowired
private TbShopTableMapper tbShopTableMapper;
@Autowired
private TbShopInfoMapper tbShopInfoMapper;
@Value("${ysk.default}")
private String defaultPhone;
@Autowired
TbTokenMapper tbTokenMapper;
@Autowired
RedisUtil redisUtil;
@Transactional(rollbackFor = Exception.class)
public Result wxCustomLogin(String openId,String headImage,String nickName,String telephone,String qrCode,String ip) throws Exception {
TbUserInfo userInfo= tbUserInfoMapper.selectByOpenId(openId);
if(ObjectUtil.isNull(userInfo)){
userInfo=new TbUserInfo();
userInfo.setAmount(BigDecimal.ZERO);
userInfo.setChargeAmount(BigDecimal.ZERO);
userInfo.setLineOfCredit(BigDecimal.ZERO);
userInfo.setConsumeNumber(0);
userInfo.setConsumeAmount(BigDecimal.ZERO);
userInfo.setTotalScore(0);
userInfo.setLockScore(0);
userInfo.setHeadImg(ObjectUtil.isNotNull(headImage)?headImage:"");
userInfo.setNickName(ObjectUtil.isNotNull(nickName)?nickName:"微信用户");
userInfo.setTelephone(ObjectUtil.isNotNull(telephone)?telephone:"");
userInfo.setMiniAppOpenId(openId);
userInfo.setStatus(Byte.parseByte("1"));
userInfo.setParentType("PERSON");
userInfo.setIsResource(Byte.parseByte("0"));
userInfo.setIsOnline(Byte.parseByte("0"));
userInfo.setIsVip(Byte.parseByte("0"));
userInfo.setSourcePath("WECHAT-APP");
userInfo.setIsAttentionMp(Byte.parseByte("0"));
userInfo.setSearchWord("||微信用户");
userInfo.setLastLogInAt(System.currentTimeMillis());
userInfo.setCreatedAt(System.currentTimeMillis());
userInfo.setUpdatedAt(System.currentTimeMillis());
tbUserInfoMapper.insert(userInfo);
}else {
userInfo.setHeadImg(ObjectUtil.isNotNull(headImage)?headImage:"");
userInfo.setNickName(ObjectUtil.isNotNull(nickName)?nickName:"微信用户");
userInfo.setTelephone(ObjectUtil.isNotNull(telephone)?telephone:"");
tbUserInfoMapper.updateByPrimaryKeySelective(userInfo);
}
TbShopInfo tbShopInfo=null;
if(ObjectUtil.isEmpty(qrCode)){
tbShopInfo=tbShopInfoMapper.selectByPhone(defaultPhone);
}else {
tbShopInfo= tbShopInfoMapper.selectByQrCode(qrCode);
}
TbShopUser tbShopUser=null;
Map<String,String> shopMap=new HashMap<>();
if(ObjectUtil.isNotEmpty(tbShopInfo)){
tbShopUser= tbShopUserMapper.selectByUserIdAndShopId(userInfo.getId().toString(),tbShopInfo.getId().toString());
if(ObjectUtil.isEmpty(tbShopUser)){
tbShopUser=new TbShopUser();
tbShopUser.setAmount(BigDecimal.ZERO);
tbShopUser.setCreditAmount(BigDecimal.ZERO);
tbShopUser.setConsumeAmount(BigDecimal.ZERO);
tbShopUser.setConsumeNumber(0);
tbShopUser.setLevelConsume(BigDecimal.ZERO);
tbShopUser.setStatus(Byte.parseByte("1"));
tbShopUser.setShopId(tbShopInfo.getId().toString());
tbShopUser.setUserId(userInfo.getId().toString());
tbShopUser.setMiniOpenId(openId);
tbShopUser.setCreatedAt(System.currentTimeMillis());
tbShopUserMapper.insert(tbShopUser);
}
shopMap.put("shopId",tbShopUser.getShopId());
shopMap.put("name",tbShopInfo.getShopName());
shopMap.put("amount",BigDecimal.ZERO.toPlainString());
shopMap.put("levelConsume",BigDecimal.ZERO.toPlainString());
}
//生成token 信息
String token = TokenUtil.generateToken(userInfo.getId(), userInfo.getMiniAppOpenId(), userInfo.getTelephone(),userInfo.getNickName());
//存储登录记录
TbToken tbToken = new TbToken(tbShopInfo.getId(), userInfo.getId(),"wx_lite", token, ip, "1", new Date());
tbTokenMapper.insert(tbToken);
Map<String,Object> map=new HashMap<>();
try {
map.put("token",token);
map.put("userInfo",userInfo);
map.put("shopUser",shopMap);
map.put("shopInfo",tbShopInfo);
redisUtil.saveMessage(RedisCst.ONLINE_USER.concat(openId), JSON.toJSONString(map));
return Result.success(CodeEnum.SUCCESS,map);
} catch (Exception e) {
e.printStackTrace();
}
return Result.fail("登录失败");
}
public Result createCardNo(String id,String openId){
if(ObjectUtil.isEmpty(id)||ObjectUtil.isEmpty(openId)){
return Result.fail("head 信息不允许为空");
}
TbUserInfo userInfo= tbUserInfoMapper.selectByPrimaryKey(Integer.valueOf(id));
if(userInfo==null||ObjectUtil.isEmpty(userInfo)){
userInfo=tbUserInfoMapper.selectByOpenId(openId);
}
if(userInfo==null||ObjectUtil.isEmpty(userInfo)){
return Result.fail("用户信息不存在");
}
String cardNo= RandomUtil.randomNumbers(10);
userInfo.setCardNo(cardNo);
userInfo.setUpdatedAt(System.currentTimeMillis());
tbUserInfoMapper.updateByPrimaryKeySelective(userInfo);
return Result.success(CodeEnum.SUCCESS,cardNo) ;
}
public Result userInfo(Integer userId,String shopId){
TbUserInfo tbUserInfo = tbUserInfoMapper.selectByPrimaryKey(userId);
if (tbUserInfo == null){
return Result.success(CodeEnum.ENCRYPT,new ArrayList());
}
TbShopInfo tbShopInfo=null;
if(ObjectUtil.isEmpty(shopId)){
tbShopInfo=tbShopInfoMapper.selectByPhone(defaultPhone);
}else {
tbShopInfo=tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(shopId));
}
TbShopUser tbShopUser=null;
Map<String,String> shopMap=new HashMap<>();
if(ObjectUtil.isNotEmpty(tbShopInfo)){
tbShopUser= tbShopUserMapper.selectByUserIdAndShopId(tbUserInfo.getId().toString(),tbShopInfo.getId().toString());
shopMap.put("shopId",tbShopUser.getShopId());
shopMap.put("name",tbShopInfo.getShopName());
shopMap.put("amount",BigDecimal.ZERO.toPlainString());
shopMap.put("levelConsume",BigDecimal.ZERO.toPlainString());
}
Map<String,Object> map=new HashMap<>();
map.put("userInfo",tbUserInfo);
map.put("shopUser",shopMap);
map.put("shopInfo",tbShopInfo);
return Result.success(CodeEnum.ENCRYPT,map);
}
public static void main(String[] args){
for(int i =0;i<10;i++){
System.out.println(RandomUtil.randomNumbers(10));
}
}
}

View File

@@ -0,0 +1,50 @@
package com.chaozhanggui.system.cashierservice.service;
import com.chaozhanggui.system.cashierservice.entity.dto.OnlineUserDto;
import com.chaozhanggui.system.cashierservice.entity.dto.SecurityProperties;
import com.chaozhanggui.system.cashierservice.exception.MsgException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.chaozhanggui.system.cashierservice.util.RedisUtils;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
@Service
@Slf4j
public class OnlineUserService {
@Resource
private RedisUtils redisUtils;
// 令牌有效期默认30分钟
protected static final long MILLIS_MINUTE = 30 * 60 *1000;
/**
* 保存在线用户信息
* @param name
* @param account
* @param shopId
* @param token
*/
public OnlineUserDto save(String name,String account, Integer shopId, String token,Integer status){
OnlineUserDto onlineUserDto = null;
onlineUserDto = new OnlineUserDto();
onlineUserDto.setAccount(account);
onlineUserDto.setName(name);
onlineUserDto.setStatus(status);
onlineUserDto.setToken(token);
onlineUserDto.setLoginTime(new Date());
onlineUserDto.setShopId(shopId);
try {
redisUtils.set("online-token-"+token, onlineUserDto, MILLIS_MINUTE);
}catch (Exception e){
throw new MsgException("登录错误");
}
return onlineUserDto;
}
}

View File

@@ -0,0 +1,233 @@
package com.chaozhanggui.system.cashierservice.service;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
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.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.SnowFlakeUtil;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.awt.print.Pageable;
import java.io.IOException;
import java.math.BigDecimal;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;
/**
* @author 12847
*/
@Service
public class OrderService {
@Resource
private TbCashierCartMapper cashierCartMapper;
@Resource
private TbOrderInfoMapper orderInfoMapper;
@Resource
private TbShopInfoMapper tbShopInfoMapper;
@Resource
private TbShopTableMapper shopTableMapper;
@Resource
private TbProductSkuMapper productSkuMapper;
@Resource
private TbUserInfoMapper userInfoMapper;
@Resource
private TbOrderDetailMapper tbOrderDetailMapper;
@Resource
private RedisUtil redisUtil;
/**
* 创建订单
* @param tableId
* @return
*/
@Transactional(rollbackFor = Exception.class)
public Result createOrder(Integer tableId,Integer shopId,Integer userId){
// //查询该台桌是否还有开启的购物车
// List<CashierCarVo> cashierCarVoList = cashierCartMapper.selectByTableIdOpen(tableId);
// if (cashierCarVoList.isEmpty()){
// return Result.fail("该桌已清台");
// }
// //总金额
// BigDecimal total = new BigDecimal("0.00");
// List<Integer> ids = new ArrayList<>();
// for (CashierCarVo date :cashierCarVoList) {
// total=total.add(date.getNumber().multiply(date.getSalePrice()));
// ids.add(date.getId());
// }
//
// TbMerchantAccount tbMerchantAccount = merchantAccountMapper.selectByShopId(shopId.toString());
// if (tbMerchantAccount == null){
// return Result.fail("生成订单错误");
// }
//
// TbUserInfo tbUserInfo = userInfoMapper.selectByPrimaryKey(userId);
// if (tbUserInfo == null){
// return Result.fail("生成订单失败");
// }
// //生成订单
// TbOrderInfo orderInfo = new TbOrderInfo();
// String orderNo = SnowFlakeUtil.generateOrderNo();
// orderInfo.setOrderNo(orderNo);
// orderInfo.setSettlementAmount(new BigDecimal("0.00"));
// orderInfo.setPackFee(new BigDecimal("0.00"));
// orderInfo.setOriginAmount(total);
// orderInfo.setProductAmount(new BigDecimal("0.00"));
// orderInfo.setAmount(total);
// orderInfo.setPayAmount(total);
// orderInfo.setRefundAmount(new BigDecimal("0.00"));
// orderInfo.setCashPaidAmount(new BigDecimal("0.00"));
// orderInfo.setTableId(tableId.toString());
// orderInfo.setSendType("table");
// orderInfo.setOrderType("miniapp");
// orderInfo.setStatus("unpaid");
// orderInfo.setShopId(shopId.toString());
// orderInfo.setUserId(userId.toString());
// orderInfo.setCreatedAt(Instant.now().toEpochMilli());
// orderInfo.setSystemTime(Instant.now().toEpochMilli());
// orderInfo.setUpdatedAt(Instant.now().toEpochMilli());
// orderInfo.setIsAccepted((byte) 1);
// orderInfo.setMerchantId(String.valueOf(tbMerchantAccount.getId()));
// int i = orderInfoMapper.insertSelective(orderInfo);
// //添加订单扩展
// TbOrderExtendWithBLOBs orderExtendWithBLOBs = new TbOrderExtendWithBLOBs();
// orderExtendWithBLOBs.setCartList(JSON.toJSONString(cashierCarVoList));
// orderExtendWithBLOBs.setId(orderInfo.getId());
// int i1 = orderExtendMapper.insertSelective(orderExtendWithBLOBs);
// if (i1<1){
// throw new MsgException("创建订单失败");
// }
// if (i<1){
// throw new MsgException("创建订单失败");
// }
// int update = cashierCartMapper.updateByIds(ids,orderInfo.getId().toString(),Instant.now().toEpochMilli());
// if (update<1){
// throw new MsgException("创建订单失败");
// }
// //返回显示数据
// TbShopInfo tbShopInfo = tbShopInfoMapper.selectByPrimaryKey(shopId);
// if (tbShopInfo == null){
// throw new MsgException("创建订单失败");
// }
// TbShopTable shopTable = shopTableMapper.selectByPrimaryKey(tableId);
//
OrderVo orderVo = new OrderVo();
// orderVo.setName(tbShopInfo.getShopName());
// orderVo.setStatus(orderInfo.getStatus());
// orderVo.setCartList(cashierCarVoList);
// orderVo.setOrderNo(orderNo);
// orderVo.setTime(Instant.now().toEpochMilli());
// orderVo.setPayAmount(total);
// orderVo.setTableName(shopTable.getName());
// orderVo.setOrderType(orderInfo.getOrderType());
// orderVo.setOrderId(orderInfo.getId());
// orderVo.setSendType(orderInfo.getSendType());
return Result.success(CodeEnum.ENCRYPT,orderVo);
}
public Result orderInfo(Integer orderId){
TbOrderInfo orderInfo = orderInfoMapper.selectByPrimaryKey(orderId);
if (orderInfo == null){
return Result.fail("未找到订单");
}
TbShopInfo tbShopInfo = tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getShopId()));
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){
return Result.fail("未找到订单");
}
OrderVo orderVo = new OrderVo();
orderVo.setName(tbShopInfo.getShopName());
orderVo.setStatus(orderInfo.getStatus());
orderVo.setDetails(details);
orderVo.setOrderNo(orderInfo.getOrderNo());
orderVo.setTime(orderInfo.getCreatedAt());
orderVo.setPayAmount(orderInfo.getOrderAmount());
orderVo.setTableName(tbShopTable == null?"":tbShopTable.getName());
orderVo.setOrderType(orderInfo.getOrderType());
orderVo.setOrderId(orderInfo.getId());
orderVo.setSendType(orderInfo.getSendType());
return Result.success(CodeEnum.ENCRYPT,orderVo);
}
public Result orderList(Integer userId,Integer page,Integer size,String status){
TbUserInfo tbUserInfo = userInfoMapper.selectByPrimaryKey(userId);
if (tbUserInfo == null){
return Result.fail("生成订单失败");
}
//获取页码号
int beginNo;
if(page <=0){
beginNo = 0;
}else{
beginNo = (page - 1) * size;
}
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 (OrderVo date :tbOrderInfos) {
// if (date.getCartListString() !=null) {
// date.setCartList(JSON.parseArray(date.getCartListString(), CashierCarVo.class));
// date.setCartListString("");
// BigDecimal number = new BigDecimal("0.00");
// for (CashierCarVo o : date.getCartList()) {
// number = number.add(o.getNumber());
// }
// //总个数
// date.setTotalNumber(number);
// }
// }
return Result.success(CodeEnum.ENCRYPT,tbOrderInfos);
}
public void testMessage(String tableId, String message) throws IOException {
// AppWebSocketServer.AppSendInfo(message,tableId);
// redisUtil.seckill(tableId,message);
// AppWebSocketServer.onClosed(tableId);
List<TbProductSku> list = productSkuMapper.selectAll();
for (TbProductSku productSku:list){
// productSku.setStockNumber(200.00);
redisUtil.saveMessage("PRODUCT:"+productSku.getShopId()+":"+productSku.getId(),productSku.getStockNumber().intValue()+"");
}
}
}

View File

@@ -0,0 +1,480 @@
package com.chaozhanggui.system.cashierservice.service;
import cn.hutool.core.util.ObjectUtil;
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.model.PayReq;
import com.chaozhanggui.system.cashierservice.model.TradeQueryReq;
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.BeanUtil;
import com.chaozhanggui.system.cashierservice.util.MD5Util;
import com.chaozhanggui.system.cashierservice.util.SnowFlakeUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
@Service
@Slf4j
public class PayService {
@Autowired
TbOrderInfoMapper tbOrderInfoMapper;
@Autowired
TbShopInfoMapper tbShopInfoMapper;
@Autowired
TbMerchantThirdApplyMapper tbMerchantThirdApplyMapper;
@Autowired
TbOrderPaymentMapper tbOrderPaymentMapper;
@Autowired
TbOrderDetailMapper tbOrderDetailMapper;
@Value("${ysk.url}")
private String url;
@Value("${ysk.callBackurl}")
private String callBackurl;
@Value("${ysk.callBackIn}")
private String callBackIn;
@Autowired
private TbCashierCartMapper tbCashierCartMapper;
@Autowired
TbMemberInMapper tbMemberInMapper;
@Autowired
TbShopUserMapper tbShopUserMapper;
@Resource
RestTemplate restTemplate;
@Autowired
private RedisUtil redisUtil;
@Autowired
RabbitProducer producer;
@Autowired
TbShopUserFlowMapper tbShopUserFlowMapper;
@Transactional(rollbackFor = Exception.class)
public Result payOrder(String openId,String orderId,String ip) throws Exception {
TbOrderInfo orderInfo= tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId));
if(!"unpaid".equals(orderInfo.getStatus())&&!"paying".equals(orderInfo.getStatus())){
return Result.fail("订单状态异常,不允许支付");
}
if(ObjectUtil.isNull(orderInfo.getMerchantId())||ObjectUtil.isEmpty(orderInfo.getMerchantId())){
return Result.fail("没有对应的商户");
}
TbMerchantThirdApply thirdApply= tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getMerchantId()));
if(ObjectUtil.isEmpty(thirdApply)||ObjectUtil.isNull(thirdApply)){
return Result.fail("支付通道不存在");
}
TbOrderPayment payment=tbOrderPaymentMapper.selectByOrderId(orderId);
if(ObjectUtil.isEmpty(payment)||payment==null){
payment=new TbOrderPayment();
payment.setPayTypeId("ysk");
payment.setAmount(orderInfo.getOrderAmount());
payment.setPaidAmount(orderInfo.getPayAmount());
payment.setHasRefundAmount(BigDecimal.ZERO);
payment.setPayName("微信支付");
payment.setPayType("wechatPay");
payment.setReceived(payment.getAmount());
payment.setChangeFee(BigDecimal.ZERO);
payment.setMemberId(orderInfo.getMemberId());
payment.setShopId(orderInfo.getShopId());
payment.setOrderId(orderInfo.getId().toString());
payment.setCreatedAt(System.currentTimeMillis());
tbOrderPaymentMapper.insert(payment);
}else {
payment.setUpdatedAt(System.currentTimeMillis());
tbOrderPaymentMapper.updateByPrimaryKey(payment);
}
PayReq req=new PayReq();
req.setAppId(thirdApply.getAppId());
req.setTimestamp(System.currentTimeMillis());
req.setIp(ip);
req.setMercOrderNo(orderInfo.getOrderNo());
req.setNotifyUrl(callBackurl);
req.setPayAmt(payment.getAmount().setScale(2,BigDecimal.ROUND_DOWN).toPlainString());
req.setPayType("03");
req.setPayWay("WXZF");
req.setSubject("扫码点餐");
req.setUserId(openId);
Map<String,Object> map= BeanUtil.transBeanMap(req);
req.setSign(MD5Util.encrypt(map,thirdApply.getAppToken(),true));
ResponseEntity<String> response= restTemplate.postForEntity(url.concat("trans/pay"),req,String.class);
if(response.getStatusCodeValue()==200&&ObjectUtil.isNotEmpty(response.getBody())){
JSONObject object=JSONObject.parseObject(response.getBody());
if(object.get("code").equals("0")){
payment.setTradeNumber(object.getJSONObject("data").get("orderNumber").toString());
payment.setUpdatedAt(System.currentTimeMillis());
tbOrderPaymentMapper.updateByPrimaryKeySelective(payment);
orderInfo.setStatus("paying");
orderInfo.setPayOrderNo(payment.getTradeNumber());
tbOrderInfoMapper.updateByPrimaryKey(orderInfo);
String key= RedisCst.TABLE_CART.concat(orderInfo.getTableId()).concat("-").concat(orderInfo.getShopId());
//清除缓存购物车数据
redisUtil.deleteByKey(key);
JSONObject jsonObject1 = new JSONObject();
jsonObject1.put("status", "success");
jsonObject1.put("msg", "成功");
jsonObject1.put("type", "");
jsonObject1.put("data", new JSONArray());
jsonObject1.put("amount", 0);
AppWebSocketServer.AppSendInfo(jsonObject1,key, false);
tbCashierCartMapper.updateStatusByOrderId(orderId.toString(),"final");
return Result.success(CodeEnum.SUCCESS,object.getJSONObject("data"));
}else {
return Result.fail(object.getString("msg"));
}
}
return Result.fail("失败");
}
@Transactional(rollbackFor = Exception.class)
public Result modifyOrderStatus(Integer orderId) throws IOException {
TbOrderInfo orderInfo= tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId));
if(ObjectUtil.isEmpty(orderInfo)){
return Result.fail("订单信息不存在");
}
if("paying".equals(orderInfo.getStatus())){
TbOrderPayment payment= tbOrderPaymentMapper.selectByOrderId(orderInfo.getId().toString());
if(ObjectUtil.isNotEmpty(payment)&&ObjectUtil.isNotEmpty(payment.getTradeNumber())){
TbMerchantThirdApply thirdApply= tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getMerchantId()));
if(ObjectUtil.isEmpty(thirdApply)||ObjectUtil.isNull(thirdApply)){
return Result.fail("支付通道不存在");
}
TradeQueryReq req=new TradeQueryReq();
req.setAppId(thirdApply.getAppId());
req.setTimestamp(System.currentTimeMillis());
req.setOrderNumber(payment.getTradeNumber());
Map<String,Object> map= BeanUtil.transBeanMap(req);
req.setSign(MD5Util.encrypt(map,thirdApply.getAppToken(),true));
ResponseEntity<String> response= restTemplate.postForEntity(url.concat("merchantOrder/tradeQuery"),req,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");
String status=data.getString("status");
String cartStatus="";
switch (status){
case "0": //交易失败
break;
case "1": //交易成功
//修改数据库中购物车数据
int cartCount= tbCashierCartMapper.updateStatusByOrderId(orderId.toString(),"final");
log.info("更新购物车:{}",cartCount);
//更新子单状态
tbOrderDetailMapper.updateStatusByOrderIdAndStatus(Integer.valueOf(orderId),"closed");
//修改主单状态
orderInfo.setStatus("closed");
orderInfo.setPayType("wx_lite");
orderInfo.setPayOrderNo(payment.getTradeNumber());
orderInfo.setPayAmount(orderInfo.getOrderAmount());
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
JSONObject jsonObject=new JSONObject();
jsonObject.put("token",0);
jsonObject.put("type","wxcreate");
jsonObject.put("orderId",orderInfo.getId().toString());
producer.putOrderCollect(jsonObject.toJSONString());
log.info("发送打印数据");
producer.printMechine(orderInfo.getId() + "");
return Result.success(CodeEnum.SUCCESS,orderId);
case "2": //退款成功
cartStatus="refund";
orderInfo.setStatus("refund");
break;
case "3": //退款失败
break;
case "4": //退款中
cartStatus="refunding";
orderInfo.setStatus("refunding");
break;
}
tbCashierCartMapper.updateStatusByOrderId(orderId.toString(),cartStatus);
orderInfo.setUpdatedAt(System.currentTimeMillis());
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
}
}
}
}
return Result.success(CodeEnum.SUCCESS,orderId);
}
public Result memberIn(String openId,String userId,String amount,String shopId,String ip){
if(ObjectUtil.isEmpty(openId)||ObjectUtil.isEmpty(userId)){
return Result.fail("用户信息允许为空");
}
TbShopUser tbShopUser= tbShopUserMapper.selectByUserIdAndShopId(userId,shopId);
if(ObjectUtil.isEmpty(tbShopUser)){
return Result.fail("对应的用户信息不存在");
}
TbShopInfo shopInfo= tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(shopId));
if(ObjectUtil.isEmpty(shopInfo)){
return Result.fail("对应的店铺信息不存在");
}
TbMerchantThirdApply thirdApply= tbMerchantThirdApplyMapper.selectByPrimaryKey(Integer.valueOf(shopInfo.getMerchantId()));
if(ObjectUtil.isEmpty(thirdApply)||ObjectUtil.isNull(thirdApply)){
return Result.fail("支付通道不存在");
}
BigDecimal payAmount= new BigDecimal(amount).setScale(2,BigDecimal.ROUND_DOWN);
TbMemberIn memberIn=new TbMemberIn();
memberIn.setAmount(payAmount);
memberIn.setUserId(Integer.valueOf(tbShopUser.getId()));
memberIn.setCode(tbShopUser.getCode());
memberIn.setStatus("7");
memberIn.setMerchantId(Integer.valueOf(shopInfo.getMerchantId()));
memberIn.setCreateTime(new Date());
tbMemberInMapper.insert(memberIn);
PayReq req=new PayReq();
req.setAppId(thirdApply.getAppId());
req.setTimestamp(System.currentTimeMillis());
req.setIp(ip);
req.setMercOrderNo(SnowFlakeUtil.generateOrderNo());
req.setNotifyUrl(callBackIn);
req.setPayAmt(amount);
req.setPayType("03");
req.setPayWay("WXZF");
req.setSubject("充值");
req.setUserId(openId);
Map<String,Object> map= BeanUtil.transBeanMap(req);
req.setSign(MD5Util.encrypt(map,thirdApply.getAppToken(),true));
ResponseEntity<String> response= restTemplate.postForEntity(url.concat("trans/pay"),req,String.class);
if(response.getStatusCodeValue()==200&&ObjectUtil.isNotEmpty(response.getBody())){
JSONObject object=JSONObject.parseObject(response.getBody());
if(object.get("code").equals("0")){
memberIn.setOrderNo(object.getJSONObject("data").get("orderNumber").toString());
memberIn.setUpdateTime(new Date());
tbMemberInMapper.updateByPrimaryKeySelective(memberIn);
return Result.success(CodeEnum.SUCCESS,object.getJSONObject("data"));
}else {
return Result.fail(object.getString("msg"));
}
}
return Result.fail("失败");
}
@Transactional(rollbackFor = Exception.class)
public String callBackPay(String payOrderNO) {
TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPayOrderNo(payOrderNO);
if (ObjectUtil.isEmpty(orderInfo)) {
return "订单信息不存在";
}
if ("paying".equals(orderInfo.getStatus())) {
int cartCount = tbCashierCartMapper.updateStatusByOrderId(orderInfo.getId().toString(), "final");
log.info("更新购物车:{}", cartCount);
//更新子单状态
tbOrderDetailMapper.updateStatusByOrderIdAndStatus(orderInfo.getId(), "closed");
//修改主单状态
orderInfo.setStatus("closed");
orderInfo.setPayType("wx_lite");
orderInfo.setPayOrderNo(payOrderNO);
orderInfo.setPayAmount(orderInfo.getOrderAmount());
tbOrderInfoMapper.updateByPrimaryKeySelective(orderInfo);
JSONObject jsonObject=new JSONObject();
jsonObject.put("token",0);
jsonObject.put("type","wxcreate");
jsonObject.put("orderId",orderInfo.getId().toString());
producer.putOrderCollect(jsonObject.toJSONString());
log.info("发送打印数据");
producer.printMechine(orderInfo.getId() + "");
return "SUCCESS";
}
return null;
}
@Transactional(rollbackFor = Exception.class)
public String minsuccess(String payOrderNO,String tradeNo){
TbMemberIn memberIn= tbMemberInMapper.selectByOrderNo(payOrderNO);
if(ObjectUtil.isEmpty(memberIn)){
return "充值记录不存在";
}
memberIn.setTradeNo(tradeNo);
memberIn.setStatus("0");
memberIn.setUpdateTime(new Date());
tbMemberInMapper.updateByPrimaryKeySelective(memberIn);
TbShopUser tbShopUser= tbShopUserMapper.selectByUserId(memberIn.getUserId().toString());
if(ObjectUtil.isEmpty(tbShopUser)){
return "用户信息不存在";
}
//修改客户资金
tbShopUser.setAmount(tbShopUser.getAmount().add(memberIn.getAmount()));
tbShopUser.setUpdatedAt(System.currentTimeMillis());
tbShopUserMapper.updateByPrimaryKeySelective(tbShopUser);
TbShopUserFlow flow=new TbShopUserFlow();
flow.setShopUserId(Integer.valueOf(tbShopUser.getId()));
flow.setBizCode("scanMemberIn");
flow.setBizName("会员扫码充值");
flow.setAmount(memberIn.getAmount());
flow.setBalance(tbShopUser.getAmount());
flow.setCreateTime(new Date());
tbShopUserFlowMapper.insert(flow);
return "success";
}
// public Result returnOrder(){
//
// }
public static void main(String[] args){
RestTemplate restTemplate1= new RestTemplate();
JSONObject param=new JSONObject();
String priv="MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIqNqTqhN8zE7eFZnwKcyBTENce2wdAtl/gaDHNuNVgg33dS27Jx0fKl9QSHXyzyxbAdG8F94niYbRBstrMymFRjuO72jH+rIH62Ym1k7l8JSLVK2dKHXt8lHDaQGUP10q0EEocnDQ9cL93oBNG1ttsV6vOAu1TPvRK9TGihRAe1AgMBAAECgYBmI8KCl0DkcrSOsRvYuC2DqZWf8el1B3eFjeZp3e/zVOCIPYv6Q5ArWg6DVSxjnWEA0KSagqvGjU+xkQMqnXzPcPMhsIS+1wyR/pP+pwiatO2ioHaQpEqHg9eXhxrgA477/xuKVw9zl5GNqaIgd++2NDXnqLh0Y6OR73f0OB5eDQJBAPihEm+UWLOam/Q/k2+k4Lm2dvxJTBur1fslBiJpgMhgcz/PlwRwpL7aPD0AuPv0NqLouuoTiKpq9icnUv12tgsCQQCOqTANw0IErCHUNdinjXewmG3ui1j9XgM41rSn5ZeTrPL4GhZc2zbS/pZT4PBKUL6NLGkfPHmw4rOmNL/Xc5E/AkBqAwQBX5eSvVHSC2mqKPtJNGv3lqlFAzfyJg8/jQzEY5vAkZsq4Xzdg+A7gptdkvvY6rMIK9wSDhl3CGVyfbORAkA1N+g1OiHmnFACWhP4bU25EyPvWQxZeDi7e1zpRTzGWj5JT3IIMb7B9zcdE0yQbI6pG2gbvvOmiOt7lTH7raEBAkBas2gugvR3f0aGqQcqMpyM627pyRppQ2h58/7KBylP3oR2BReqMUcXeiJ8TuBXzbRXpeVQ0DWOva5CWZJmBMdz";
PayReq req=new PayReq();
req.setAppId("M8002023120892f1e4");
req.setTimestamp(System.currentTimeMillis());
req.setIp("127.0.0.1");
req.setMercOrderNo(System.currentTimeMillis()+"");
req.setNotifyUrl("https");
req.setPayAmt("0.01");
req.setPayType("03");
req.setPayWay("WXZF");
req.setSubject("ddd");
req.setUserId("or1l864NBOoJZhC5x_yeziZ26j6c");
Map<String,Object> map= BeanUtil.transBeanMap(req);
req.setSign(MD5Util.encrypt(map,priv,true));
ResponseEntity<String> response= restTemplate1.postForEntity("https://gatewaytestapi.sxczgkj.cn/gate-service/trans/pay",req,String.class);
// TradeQueryReq req=new TradeQueryReq();
// req.setAppId("M800202305094c170c");
// req.setTimestamp(System.currentTimeMillis());
// req.setOrderNumber("SXF_W_MERC_20240205182102491");
// Map<String,Object> map= BeanUtil.transBeanMap(req);
//
// req.setSign(MD5Util.encrypt(map,priv,true));
//
// ResponseEntity<String> response= restTemplate1.postForEntity("https://gateway.api.sxczgkj.cn/gate-service/merchantOrder/tradeQuery",req,String.class);
//
//
System.out.println(">>>>>>>>>>>>>>>"+response.getBody());
}
}

View File

@@ -0,0 +1,121 @@
package com.chaozhanggui.system.cashierservice.service;
import cn.hutool.core.util.ObjectUtil;
import com.chaozhanggui.system.cashierservice.dao.*;
import com.chaozhanggui.system.cashierservice.entity.*;
import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
import com.chaozhanggui.system.cashierservice.sign.Result;
import com.chaozhanggui.system.cashierservice.socket.AppWebSocketServer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@Service
@Slf4j
public class ProductService {
@Autowired
private TbProductGroupMapper tbProductGroupMapper;
@Autowired
private TbProductMapper tbProductMapper;
@Autowired
private TbShopInfoMapper tbShopInfoMapper;
@Autowired
private TbProductSkuResultMapper tbProductSkuResultMapper;
@Autowired
private TbShopTableMapper tbShopTableMapper;
@Autowired
TbProductSkuMapper tbProductSkuMapper;
public Result queryProduct(String code,String productGroupId){
ConcurrentMap<String,Object> concurrentMap=new ConcurrentHashMap<>();
TbShopTable tbShopTable= tbShopTableMapper.selectQRcode(code);
if(ObjectUtil.isEmpty(tbShopTable)||ObjectUtil.isNull(tbShopTable)){
return Result.fail("台桌信息不存在");
}
Integer id= ObjectUtil.isNotEmpty(productGroupId)?Integer.valueOf(productGroupId):null;
List<TbProductGroup> groupList=tbProductGroupMapper.selectByQrcode(code,id);
if(ObjectUtil.isNotEmpty(groupList)&&groupList.size()>0){
TbProductGroup group= groupList.get(0);
TbShopInfo shopInfo= tbShopInfoMapper.selectByPrimaryKey(group.getShopId()) ;
concurrentMap.put("shopTableInfo",tbShopTable);
concurrentMap.put("storeInfo",shopInfo);
groupList.parallelStream().forEach(g->{
String in=g.getProductIds().substring(1,g.getProductIds().length()-1);
if(ObjectUtil.isNotEmpty(in)&&ObjectUtil.isNotNull(in)){
log.info("请求参数:{}",in);
List<TbProduct> products= tbProductMapper.selectByIdIn(in);
if(ObjectUtil.isNotEmpty(products)&&products.size()>0){
products.parallelStream().forEach(it->{
Integer sum = 0;
if (AppWebSocketServer.userMap.containsKey(code)){
Set<String> userSet = AppWebSocketServer.userMap.get(code);
if (userSet.isEmpty()){
sum= tbProductMapper.selectByQcode(code,it.getId(),it.getShopId());
}else {
List<String> userList = new ArrayList<>(userSet);
sum= tbProductMapper.selectByNewQcode(code,it.getId(),it.getShopId(),userList);
}
}else {
sum= tbProductMapper.selectByQcode(code,it.getId(),it.getShopId());
}
it.setCartNumber(sum==null?"0":String.valueOf(sum));
TbProductSkuResult skuResult= tbProductSkuResultMapper.selectByPrimaryKey(it.getId());
it.setProductSkuResult(skuResult);
});
g.setProducts(products);
}else {
g.setProducts(new ArrayList<>());
}
}else {
g.setProducts(new ArrayList<>());
}
});
concurrentMap.put("productInfo",groupList);
}
return Result.success(CodeEnum.SUCCESS,concurrentMap);
}
public Result queryProductSku(String shopId, String productId, String spec_tag){
if(ObjectUtil.isEmpty(shopId)||ObjectUtil.isEmpty(productId)){
return Result.fail("参数错误");
}
TbProductSkuWithBLOBs tbProductSkuWithBLOBs= tbProductSkuMapper.selectByShopIdAndProductIdAndSpec(shopId,productId,spec_tag);
return Result.success(CodeEnum.SUCCESS,tbProductSkuWithBLOBs);
}
}

View File

@@ -0,0 +1,63 @@
package com.chaozhanggui.system.cashierservice.service;
import com.chaozhanggui.system.cashierservice.annotation.ResultCode;
import com.chaozhanggui.system.cashierservice.dao.TbShopAreaMapper;
import com.chaozhanggui.system.cashierservice.dao.TbShopTableMapper;
import com.chaozhanggui.system.cashierservice.entity.TbShopArea;
import com.chaozhanggui.system.cashierservice.entity.TbShopTable;
import com.chaozhanggui.system.cashierservice.exception.MsgException;
import com.chaozhanggui.system.cashierservice.sign.CodeEnum;
import com.chaozhanggui.system.cashierservice.sign.Result;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* @author lyf
*/
@Service
public class ShopTableService {
private final String QRCODEFRONT = "https://kysh.sxczgkj.cn/codeplate?code=";
@Resource
private TbShopTableMapper shopTableMapper;
@Resource
private TbShopAreaMapper shopAreaMapper;
public Result bindingQrcode(TbShopTable shopTable){
TbShopTable shopTableId = shopTableMapper.selectByPrimaryKey(shopTable.getId());
if (shopTableId == null){
return Result.fail("找不到台桌");
}
int i = shopTableMapper.updateByPrimaryKeySelective(shopTable);
if (i>0){
return Result.success(CodeEnum.ENCRYPT);
}else {
return Result.fail("添加失败");
}
}
public Result tableList(Integer shopId,Integer areaId){
if (shopId == null){
return Result.fail("参数有误");
}
if (areaId == 0){
areaId =null;
}
List<TbShopTable> tbShopTablesList = shopTableMapper.selectShopTableById(shopId,areaId);
for (TbShopTable date :tbShopTablesList) {
if (!"".equals(date.getQrcode())){
date.setQrcode(QRCODEFRONT+date.getQrcode());
}
}
return Result.success(CodeEnum.ENCRYPT,tbShopTablesList);
}
public Result areaList(Integer shopId){
List<TbShopArea> tbShopArea = shopAreaMapper.selectByShopId(shopId);
return Result.success(CodeEnum.ENCRYPT,tbShopArea);
}
}