diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/OrderController.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/OrderController.java index 3b7a0de..1564fda 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/OrderController.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/OrderController.java @@ -124,4 +124,13 @@ public class OrderController { @RequestParam("id") Integer id){ return orderService.orderDetail(shopId,id); } + + + @RequestMapping(value = "sendMessage") + public Result sendMessage(@RequestHeader("token") String token, @RequestHeader("loginName") String loginName, + @RequestHeader("clientType") String clientType,@RequestParam("orderId") String orderId){ + + return orderService.sendMassage(orderId); + + } } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductSkuMapper.java b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductSkuMapper.java index 443ac20..d18affe 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductSkuMapper.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbProductSkuMapper.java @@ -2,10 +2,13 @@ package com.chaozhanggui.system.cashierservice.dao; import com.chaozhanggui.system.cashierservice.entity.TbProductSku; import com.chaozhanggui.system.cashierservice.entity.TbProductSkuWithBLOBs; +import com.chaozhanggui.system.cashierservice.entity.po.ProductSkuPo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; +import java.util.List; + @Component @Mapper public interface TbProductSkuMapper { @@ -33,4 +36,7 @@ public interface TbProductSkuMapper { void updateByskuIdSub(@Param("skuId")Integer skuId, @Param("num")Integer num); void updateStockNum(@Param("skuId") Integer skuId, @Param("num") Integer num); + + + void batchStockNum(@Param("list")List list); } \ No newline at end of file diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/entity/po/ProductSkuPo.java b/src/main/java/com/chaozhanggui/system/cashierservice/entity/po/ProductSkuPo.java new file mode 100644 index 0000000..750db45 --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/entity/po/ProductSkuPo.java @@ -0,0 +1,19 @@ +package com.chaozhanggui.system.cashierservice.entity.po; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class ProductSkuPo implements Serializable { + + + private Integer skuId; + + private Integer number; + + public ProductSkuPo(Integer skuId, Integer number) { + this.skuId = skuId; + this.number = number; + } +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/WebAppConfigurer.java b/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/WebAppConfigurer.java index 2e2b85f..7fa2aae 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/WebAppConfigurer.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/interceptor/WebAppConfigurer.java @@ -19,6 +19,7 @@ public class WebAppConfigurer implements WebMvcConfigurer { .addPathPatterns("/**") .excludePathPatterns("/login/login") .excludePathPatterns("/cloudPrinter/print") - .excludePathPatterns("/cloudPrinter/handoverPrint"); + .excludePathPatterns("/cloudPrinter/handoverPrint") + .excludePathPatterns("/order/sendMessage"); } } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/CloudPrinterService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/CloudPrinterService.java index 4428c8d..0f90b09 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/CloudPrinterService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/CloudPrinterService.java @@ -238,10 +238,13 @@ public class CloudPrinterService { String balance = "0"; if ("deposit".equals(orderInfo.getPayType())) { - TbShopUser user = tbShopUserMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getMemberId())); - if (ObjectUtil.isNotEmpty(user) && ObjectUtil.isNotEmpty(user.getAmount())) { - balance = user.getAmount().toPlainString(); + if(ObjectUtil.isNotEmpty(orderInfo.getMemberId())&&ObjectUtil.isNotNull(orderInfo.getMemberId())){ + TbShopUser user = tbShopUserMapper.selectByPrimaryKey(Integer.valueOf(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.getOrderType().equals("miniapp")?orderInfo.getTableName():orderInfo.getMasterId(), orderInfo.getOrderNo(), DateUtils.getTime(new Date(orderInfo.getCreatedAt())), "【POS-1】001", orderInfo.getOrderAmount().toPlainString(), balance,(ObjectUtil.isEmpty(orderInfo.getPayType())||ObjectUtil.isNull(orderInfo.getPayType())?"":orderInfo.getPayType() ), "0", detailList,orderInfo.getRemark()); @@ -370,7 +373,7 @@ public class CloudPrinterService { if (ObjectUtil.isNotEmpty(cashierCarts) && cashierCarts.size() > 0) { cashierCarts.parallelStream().forEach(it->{ Long count= categoryInfos.stream().filter(c-> - c.getId().equals(it.getCategoryId()) + c.getId().toString().equals(it.getCategoryId().toString()) ).count(); if(count>0) { @@ -625,7 +628,7 @@ public class CloudPrinterService { // memberData.add(new HandoverInfo.MemberData(ObjectUtil.isNull(shopUserDuty.getMemberOutAmount())? BigDecimal.ONE.toPlainString() : shopUserDuty.getMemberOutAmount().toPlainString(),"储值卡支付")); } - memberData.add(new HandoverInfo.MemberData(ObjectUtil.isNull(shopUserDuty.getMemberInAmount())? BigDecimal.ONE.toPlainString() : shopUserDuty.getMemberInAmount().toPlainString(),"会员卡充值")); + memberData.add(new HandoverInfo.MemberData(ObjectUtil.isNull(shopUserDuty.getMemberInAmount())? BigDecimal.ZERO.toPlainString() : shopUserDuty.getMemberInAmount().toPlainString(),"会员卡充值")); diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java index 3830d29..9a8d07d 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/OrderService.java @@ -1,16 +1,20 @@ package com.chaozhanggui.system.cashierservice.service; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpRequest; +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.po.CartPo; import com.chaozhanggui.system.cashierservice.entity.po.OrderPo; +import com.chaozhanggui.system.cashierservice.entity.po.ProductSkuPo; import com.chaozhanggui.system.cashierservice.entity.po.QueryCartPo; import com.chaozhanggui.system.cashierservice.entity.vo.CartVo; 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.HttpClientUtil; import com.chaozhanggui.system.cashierservice.util.RedisUtil; import com.chaozhanggui.system.cashierservice.util.TokenUtil; import com.github.pagehelper.PageHelper; @@ -19,6 +23,7 @@ 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.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -81,15 +86,28 @@ public class OrderService { if (ObjectUtil.isEmpty(product) || !"1".equals(product.getStatus().toString())) { return Result.fail(CodeEnum.PRODUCTINFOERROR); } + TbProductSkuWithBLOBs skuWithBLOBs; if ("1".equals(product.getTypeEnum())) { skuWithBLOBs = tbProductSkuMapper.selectByProduct(Integer.valueOf(productId)); } else { skuWithBLOBs = tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(skuId)); } + + if (ObjectUtil.isEmpty(skuWithBLOBs)) { return Result.fail(CodeEnum.PRODUCTSKUERROR); } + + + if("1".equals(product.getIsStock().toString())){ + if(product.getId().intValue()==Integer.valueOf(skuWithBLOBs.getProductId()).intValue()){ + if(skuWithBLOBs.getStockNumber()-number<0){ + return Result.fail(CodeEnum.STOCKERROR); + } + } + } + if (StringUtils.isEmpty(masterId)) { boolean flag = redisUtil.exists("SHOP:CODE:" + clientType + ":" + shopId); if (flag) { @@ -182,6 +200,11 @@ public class OrderService { cashierCartMapper.updateStatus(cashierCart.getId(), "close"); } } + + skuWithBLOBs.setStockNumber(skuWithBLOBs.getStockNumber()-number); + skuWithBLOBs.setUpdatedAt(System.currentTimeMillis()); + tbProductSkuMapper.updateByPrimaryKey(skuWithBLOBs); + redisUtil.addSet("SHOP:CODE:SET" + clientType + ":" + shopId + ":" + DateUtils.getDay(),masterId.substring(1,masterId.length())); return Result.success(CodeEnum.SUCCESS, masterId); } @@ -249,7 +272,26 @@ public class OrderService { @Transactional(rollbackFor = Exception.class) public Result delCart(String masterId, Integer cartId) { + + + TbCashierCart cashierCart=cashierCartMapper.selectByPrimaryKey(cartId); + if(ObjectUtil.isEmpty(cashierCart)){ + return Result.fail(CodeEnum.CARTEXIST); + } + + + TbProductSkuWithBLOBs skuWithBLOBs= tbProductSkuMapper.selectByPrimaryKey(Integer.valueOf(cashierCart.getSkuId())); + if(ObjectUtil.isEmpty(skuWithBLOBs)){ + return Result.fail(CodeEnum.PRODUCTSKUERROR); + } + + cashierCartMapper.deleteByCartId(masterId, cartId); + + skuWithBLOBs.setStockNumber(skuWithBLOBs.getStockNumber()+cashierCart.getTotalNumber()); + skuWithBLOBs.setUpdatedAt(System.currentTimeMillis()); + tbProductSkuMapper.updateByPrimaryKey(skuWithBLOBs); + return Result.success(CodeEnum.SUCCESS); } @@ -603,10 +645,13 @@ public class OrderService { String day = DateUtils.getDay(); List list = cashierCartMapper.selectAllCreateOrder(cartVo.getMasterId(), Integer.valueOf(cartVo.getShopId()), day, "create", cartVo.getUuid()); int orderId = 0; + List productSkuPos=new ArrayList<>(); for (TbCashierCart cashierCart : list) { if (StringUtils.isNotEmpty(cashierCart.getOrderId())) { orderId = Integer.valueOf(cashierCart.getOrderId()); } + ProductSkuPo skuPo=new ProductSkuPo(Integer.valueOf(cashierCart.getSkuId()),cashierCart.getTotalNumber()); + productSkuPos.add(skuPo); } if (orderId > 0) { @@ -614,10 +659,13 @@ public class OrderService { if (Objects.nonNull(orderInfo) && !orderInfo.getStatus().equals("pending")){ tbOrderInfoMapper.updateStatusById(orderId, "cancelled"); orderDetailMapper.updateStatusByOrderId(orderId, "cancelled"); - cashierCartMapper.deleteBymasterId(cartVo.getMasterId(), Integer.valueOf(cartVo.getShopId()), day, "create", cartVo.getUuid()); } - } + + cashierCartMapper.deleteBymasterId(cartVo.getMasterId(), Integer.valueOf(cartVo.getShopId()), day, "create", cartVo.getUuid()); + + tbProductSkuMapper.batchStockNum(productSkuPos); + return Result.success(CodeEnum.SUCCESS); } @@ -787,4 +835,126 @@ public class OrderService { } return Result.success(CodeEnum.SUCCESS, orderInfo); } + + + @Autowired + TbUserInfoMapper tbUserInfoMapper; + + + @Value("${wx.appId}") + private String appId; + + + @Value("${wx.secrete}") + private String secrete; + + + public Result sendMassage(String orderId){ + if(ObjectUtil.isEmpty(orderId)){ + return Result.fail(CodeEnum.ERRMASTER); + } + + + TbOrderInfo orderInfo=tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId)); + if(ObjectUtil.isEmpty(orderInfo)){ + return Result.fail(CodeEnum.ORDERNOEXIST); + } + + if(!orderInfo.getOrderType().startsWith("miniapp")){ + return Result.fail(CodeEnum.ISNOTWXORDER); + } + + + + TbShopInfo shopInfo= tbShopInfoMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getShopId())); + + if(ObjectUtil.isEmpty(shopInfo)){ + return Result.fail(CodeEnum.SHOPINFONOEXIST); + } + + + TbUserInfo userInfo= tbUserInfoMapper.selectByPrimaryKey(Integer.valueOf(orderInfo.getUserId())); + if(ObjectUtil.isEmpty(userInfo)||ObjectUtil.isEmpty(userInfo.getMiniAppOpenId())){ + return Result.fail(CodeEnum.USERNOEXIST); + } + + + + + JSONObject object= getAccessToken(); + String accessToken=object.get("access_token")+""; + + JSONObject object1=new JSONObject(); + + object1.put("template_id","z0fUG7-jhSfYCrw6poOvSRzh4_hgnPkm_5C7E5s5bCQ"); + object1.put("touser",userInfo.getMiniAppOpenId()); + + + JSONObject data=new JSONObject(); + + JSONObject tabname=new JSONObject(); + tabname.put("value",orderInfo.getTableName()); + + + JSONObject thing21=new JSONObject(); + thing21.put("value",shopInfo.getShopName()); + + + JSONObject thing8=new JSONObject(); + thing8.put("value","你的餐品已出餐,请及时取餐。"); + + data.put("character_string1",tabname); + data.put("thing21",thing21); + data.put("thing8",thing8); + + object1.put("data",data); + + object1.put("miniprogram_state","trial"); + object1.put("lang","zh_CN"); + + String response= HttpRequest.post("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=".concat(accessToken)).body(object1.toString()).execute().body(); + log.info("返回结果:{}",response); + JSONObject resObj=JSONObject.parseObject(response); + if(ObjectUtil.isNotEmpty(resObj)&&ObjectUtil.isNotNull(resObj)&&"0".equals(resObj.get("errcode")+"")){ + return Result.success(CodeEnum.SUCCESS); + } + + + + return Result.fail(linkedHashMap.containsKey(resObj.get("errcode")+"")?linkedHashMap.get(resObj.get("errcode")+""):"未知错误"); + + + } + + + static LinkedHashMap linkedHashMap=new LinkedHashMap<>(); + + static { + + linkedHashMap.put("40001","获取 access_token 时 AppSecret 错误,或者 access_token 无效。请开发者认真比对 AppSecret 的正确性,或查看是否正在为恰当的公众号调用接口"); + linkedHashMap.put("40003","不合法的 OpenID ,请开发者确认 OpenID (该用户)是否已关注公众号,或是否是其他公众号的 OpenID"); + linkedHashMap.put("40014","不合法的 access_token ,请开发者认真比对 access_token 的有效性(如是否过期),或查看是否正在为恰当的公众号调用接口"); + linkedHashMap.put("40037","不合法的 template_id"); + linkedHashMap.put("43101","用户未订阅消息"); + linkedHashMap.put("43107","订阅消息能力封禁"); + linkedHashMap.put("43108","并发下发消息给同一个粉丝"); + linkedHashMap.put("45168","命中敏感词"); + linkedHashMap.put("47003","参数错误"); + + } + + + + JSONObject getAccessToken(){ + String requestUrl = "https://api.weixin.qq.com/cgi-bin/token"; + Map requestUrlParam = new HashMap<>(); + //小程序appId + requestUrlParam.put("appid", appId); + //小程序secret + requestUrlParam.put("secret", secrete); + //默认参数 + requestUrlParam.put("grant_type", "client_credential"); + JSONObject jsonObject = JSON.parseObject(HttpClientUtil.doGet(requestUrl,requestUrlParam)); + return jsonObject; + } } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java index c47104e..708a2eb 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/PayService.java @@ -430,9 +430,6 @@ public class PayService { } - - - TbOrderInfo orderInfo = tbOrderInfoMapper.selectByPrimaryKey(Integer.valueOf(orderId)); if (ObjectUtil.isEmpty(orderInfo)) { return Result.fail(CodeEnum.ORDERNOEXIST); @@ -494,6 +491,7 @@ public class PayService { orderInfo.setPayAmount(orderInfo.getOrderAmount()); + orderInfo.setUserId(user.getUserId()); orderInfo.setMemberId(memberId); orderInfo.setPayType("deposit"); orderInfo.setStatus("closed"); @@ -848,6 +846,10 @@ public class PayService { if(ObjectUtil.isNull(user)||ObjectUtil.isEmpty(user)){ return Result.fail(ACCOUNTEIXST); } + + newOrderInfo.setMemberId(orderInfo.getMemberId()); + newOrderInfo.setUserId(orderInfo.getUserId()); + user.setAmount(user.getAmount().add( newOrderInfo.getPayAmount().setScale(2, RoundingMode.DOWN))); user.setConsumeAmount(user.getConsumeAmount().subtract( newOrderInfo.getPayAmount().setScale(2, RoundingMode.DOWN))); user.setUpdatedAt(System.currentTimeMillis()); diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/sign/CodeEnum.java b/src/main/java/com/chaozhanggui/system/cashierservice/sign/CodeEnum.java index 0b2614b..f513ec3 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/sign/CodeEnum.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/sign/CodeEnum.java @@ -67,6 +67,45 @@ public enum CodeEnum { ERRORQR("100026",false,"错误的码信息","fail"), + + + ERRMASTER("100027",false,"错误的取餐码","fail"), + + ISNOTWXORDER("100028",false,"不是小程序订单","fail"), + + + USERNOEXIST("100029",false,"用户信息不存在","fail"), + + + STOCKERROR("100030",false,"库存不足","fail"), + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -91,7 +130,6 @@ public enum CodeEnum { - ; private String code; diff --git a/src/main/resources/mapper/TbProductSkuMapper.xml b/src/main/resources/mapper/TbProductSkuMapper.xml index 2f03731..e97e4fb 100644 --- a/src/main/resources/mapper/TbProductSkuMapper.xml +++ b/src/main/resources/mapper/TbProductSkuMapper.xml @@ -355,4 +355,13 @@ resultType="com.chaozhanggui.system.cashierservice.entity.TbProductSkuWithBLOBs"> select * from tb_product_sku where product_id = #{productId} + + + + update tb_product_sku + set stock_number= stock_number+ #{item.number}, + where id = #{item.skuId} + + + \ No newline at end of file