From 3ab16294367fbfec9b485b6ffabfff7d72d044ae Mon Sep 17 00:00:00 2001 From: SongZhang <2064194730@qq.com> Date: Fri, 9 Aug 2024 16:42:17 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=B6=88=E6=81=AF=E6=8E=A8=E9=80=81=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CommonController.java | 4 +- .../controller/UserContoller.java | 4 +- .../dao/TbShopOpenIdMapper.java | 12 +++ .../entity/Enum/ShopWxMsgTypeEnum.java | 17 +++++ .../cashierservice/service/CartService.java | 5 +- .../cashierservice/service/LoginService.java | 73 ++++++++++++------- .../cashierservice/service/UserService.java | 15 +--- 7 files changed, 86 insertions(+), 44 deletions(-) create mode 100644 src/main/java/com/chaozhanggui/system/cashierservice/entity/Enum/ShopWxMsgTypeEnum.java diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/CommonController.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/CommonController.java index 1c0f114..83211ee 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/CommonController.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/CommonController.java @@ -220,9 +220,7 @@ public class CommonController { if (wxMsgSubDTO.getOpenId() == null || wxMsgSubDTO.getShopId() == null) { return Result.fail("shopId或openId缺失"); } - String msg = wxMsgSubDTO.getShopId().replace("msg", ""); - String[] split = msg.split(","); - loginService.addShopId(wxMsgSubDTO.getOpenId(), split[0], split.length > 1 ? Integer.valueOf(split[1]) : null, wxMsgSubDTO.getNickname(), wxMsgSubDTO.getAvatar()); + loginService.addShopId(wxMsgSubDTO.getOpenId(), wxMsgSubDTO.getShopId(), null, wxMsgSubDTO.getNickname(), wxMsgSubDTO.getAvatar()); return Result.success(CodeEnum.SUCCESS); } } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/controller/UserContoller.java b/src/main/java/com/chaozhanggui/system/cashierservice/controller/UserContoller.java index fcd72ad..28cce38 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/controller/UserContoller.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/controller/UserContoller.java @@ -156,7 +156,9 @@ public class UserContoller { * @return */ @GetMapping("/subQrCode") - public Result getSubQrCode(String shopId) throws Exception { + public Result getSubQrCode( + @RequestParam String shopId + ) throws Exception { String url = userService.getSubQrCode(shopId); return Result.successWithData(url); } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbShopOpenIdMapper.java b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbShopOpenIdMapper.java index 8d875e1..8e6a0f1 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbShopOpenIdMapper.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/dao/TbShopOpenIdMapper.java @@ -38,4 +38,16 @@ public interface TbShopOpenIdMapper { @Update("update tb_shop_open_id set nickname=#{nickName}, avatar=#{avatar} where open_id=#{openId} and status=1 ") int updateBaseInfoByOpenId(@Param("openId") String openId, @Param("nickName") String nickName, @Param("avatar") String avatar); + + @Select("select count(*) from tb_shop_open_id where shop_id=#{shopId} and status=1;") + int selectStateByShopId(@Param("shopId") String shopId); + + @Select("select count(*) from tb_shop_open_id where shop_id=#{shopId} and status=1 and type=#{type};") + int countStateByShopIdAndType(@Param("shopId") String shopId, @Param("type") int type); + + @Select("select * from tb_shop_open_id where shop_id=#{shopId} and status=1 and (type=#{type} or type=-1);") + List selectStateByShopIdAndType(@Param("shopId") String shopId, @Param("type") int type); + + @Select("select * from tb_shop_open_id where shop_id=#{shopId} and open_id=#{openId};") + List selectStateByShopIdAndOpenId(@Param("openId") String openId, @Param("shopId") String shopId); } diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/entity/Enum/ShopWxMsgTypeEnum.java b/src/main/java/com/chaozhanggui/system/cashierservice/entity/Enum/ShopWxMsgTypeEnum.java new file mode 100644 index 0000000..766e548 --- /dev/null +++ b/src/main/java/com/chaozhanggui/system/cashierservice/entity/Enum/ShopWxMsgTypeEnum.java @@ -0,0 +1,17 @@ +package com.chaozhanggui.system.cashierservice.entity.Enum; + +public enum ShopWxMsgTypeEnum { + ALL_MSG(-1), + STOCK_MSG(0), + CONSUMABLES_MSG(1), + OPERATION_MSG(2); + private final Integer type; + + ShopWxMsgTypeEnum(Integer type) { + this.type = type; + } + + public Integer getType() { + return type; + } +} diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java index a967298..81409f7 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/CartService.java @@ -6,6 +6,7 @@ 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.Enum.ShopWxMsgTypeEnum; import com.chaozhanggui.system.cashierservice.exception.MsgException; import com.chaozhanggui.system.cashierservice.netty.PushToAppChannelHandlerAdapter; import com.chaozhanggui.system.cashierservice.rabbit.RabbitProducer; @@ -336,11 +337,11 @@ public class CartService { (product.getIsDistribute() == 1 && product.getStockNumber() - num <= productSku.getWarnLine()) || (product.getIsDistribute() != 1) && productSku.getStockNumber() - num <= productSku.getWarnLine() ) { - List shopOpenIds = shopOpenIdMapper.selectByShopId(Integer.valueOf(product.getShopId())); + List shopOpenIds = shopOpenIdMapper.selectStateByShopIdAndType(product.getShopId(), ShopWxMsgTypeEnum.STOCK_MSG.getType()); shopOpenIds.forEach(item -> { String message = redisUtil.getMessage(RedisCst.SEND_STOCK_WARN_MSG + product.getId() + ":" + item.getOpenId()); if (message == null) { - wxAccountUtil.sendStockWarnMsg("商品库存不足", product.getName(), + WxAccountUtil.sendStockWarnMsg("商品库存不足", product.getName(), product.getIsDistribute() == 1 ? product.getStockNumber() - num : (int) (productSku.getStockNumber() - num) , item.getOpenId()); redisUtil.saveMessage(RedisCst.SEND_STOCK_WARN_MSG + product.getId() + ":" + item.getOpenId(), product.getId().toString(), 60 * 30L); diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/LoginService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/LoginService.java index 0f02095..c9194ed 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/LoginService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/LoginService.java @@ -1,6 +1,7 @@ package com.chaozhanggui.system.cashierservice.service; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; @@ -60,43 +61,61 @@ public class LoginService { private final TbShopOpenIdMapper shopOpenIdMapper; + private final static int[] MSG_TYPE_LIST = new int[] {0, 1, 2}; + public LoginService(TbShopOpenIdMapper shopOpenIdMapper) { this.shopOpenIdMapper = shopOpenIdMapper; } - public void addShopId(String openId, String shopId, Integer type, String nickName, String avatar) { - TbUserShopMsg shopMsg = tbUserShopMsgMapper.selectByShopIdAndOpenId(Integer.valueOf(shopId), openId); - if (Objects.isNull(shopMsg)) { - shopMsg = new TbUserShopMsg(); - shopMsg.setShopId(Integer.valueOf(shopId)); - shopMsg.setOpenId(openId); - shopMsg.setCreateTime(new Date()); - shopMsg.setStatus("1"); - tbUserShopMsgMapper.insert(shopMsg); - } - - + public void addShopId(String openId, String shopId, Integer type1, String nickName, String avatar) { // 为商家绑定openid - TbShopOpenId tbShopOpenId = shopOpenIdMapper.countByOpenId(openId, Integer.valueOf(shopId), type); - if (tbShopOpenId == null) { - TbShopOpenId shopOpenId = new TbShopOpenId(); - shopOpenId.setOpenId(openId); - shopOpenId.setCreateTime(DateUtil.date()); - shopOpenId.setShopId(Integer.valueOf(shopId)); - shopOpenId.setStatus(1); - shopOpenId.setNickname(nickName); - shopOpenId.setAvatar(avatar); - shopOpenId.setType(type == null ? -1 : type); - shopOpenIdMapper.insert(shopOpenId); +// TbShopOpenId tbShopOpenId = shopOpenIdMapper.countByOpenId(openId, Integer.valueOf(shopId), null); + List shopOpenIdList = shopOpenIdMapper.selectStateByShopIdAndOpenId(openId, shopId); + int openCount = shopOpenIdMapper.selectStateByShopId(shopId); + + if (shopOpenIdList.isEmpty()) { + for (int type : MSG_TYPE_LIST) { + addShopOpenId(openId, shopId, nickName, avatar, openCount, type); + } + } else { - tbShopOpenId.setUpdateTime(DateUtil.date()); - tbShopOpenId.setNickname(nickName); - tbShopOpenId.setAvatar(avatar); - shopOpenIdMapper.updateByPrimaryKeySelective(tbShopOpenId); + boolean fullSize = shopOpenIdList.size() == MSG_TYPE_LIST.length; + HashMap typeMap = new HashMap<>(); + for (TbShopOpenId tbShopOpenId : shopOpenIdList) { + typeMap.put(tbShopOpenId.getType().toString(), tbShopOpenId.getOpenId()); + tbShopOpenId.setType(null); + tbShopOpenId.setUpdateTime(DateUtil.date()); + tbShopOpenId.setNickname(nickName); + tbShopOpenId.setAvatar(avatar); + shopOpenIdMapper.updateByPrimaryKeySelective(tbShopOpenId); + } + + if (fullSize) { + return; + } + for (int type : MSG_TYPE_LIST) { + if (typeMap.get(String.valueOf(type)) == null) { + addShopOpenId(openId, shopId, nickName, avatar, openCount, type); + } + } + } } + private void addShopOpenId(String openId, String shopId, String nickName, String avatar, int openCount, int type) { + int count = shopOpenIdMapper.countStateByShopIdAndType(shopId, type); + TbShopOpenId shopOpenId = new TbShopOpenId(); + shopOpenId.setOpenId(openId); + shopOpenId.setCreateTime(DateUtil.date()); + shopOpenId.setShopId(Integer.valueOf(shopId)); + shopOpenId.setStatus(openCount > 0 ? count > 0 ? 1 : 0 : 0); + shopOpenId.setNickname(nickName); + shopOpenId.setAvatar(avatar); + shopOpenId.setType(type); + shopOpenIdMapper.insert(shopOpenId); + } + public Result wxBusinessLogin(String openId, String shopId) { TbUserShopMsg shopMsg = tbUserShopMsgMapper.selectByShopIdAndOpenId(Integer.valueOf(shopId), openId); diff --git a/src/main/java/com/chaozhanggui/system/cashierservice/service/UserService.java b/src/main/java/com/chaozhanggui/system/cashierservice/service/UserService.java index 0c11041..47dbcff 100644 --- a/src/main/java/com/chaozhanggui/system/cashierservice/service/UserService.java +++ b/src/main/java/com/chaozhanggui/system/cashierservice/service/UserService.java @@ -1,11 +1,8 @@ package com.chaozhanggui.system.cashierservice.service; -import cn.hutool.core.io.FileUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.RandomUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.extra.qrcode.QrConfig; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.chaozhanggui.system.cashierservice.dao.*; import com.chaozhanggui.system.cashierservice.entity.*; @@ -13,9 +10,6 @@ import com.chaozhanggui.system.cashierservice.entity.vo.IntegralFlowVo; import com.chaozhanggui.system.cashierservice.entity.vo.IntegralVo; import com.chaozhanggui.system.cashierservice.exception.MsgException; import com.chaozhanggui.system.cashierservice.redis.RedisCst; -import com.chaozhanggui.system.cashierservice.redis.RedisUtil; -import com.chaozhanggui.system.cashierservice.sign.CodeEnum; -import com.chaozhanggui.system.cashierservice.sign.Result; import com.chaozhanggui.system.cashierservice.util.*; import com.chaozhanggui.system.cashierservice.wxUtil.WxAccountUtil; import com.github.pagehelper.PageHelper; @@ -23,14 +17,11 @@ import com.github.pagehelper.PageInfo; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import javax.imageio.ImageIO; -import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; @@ -264,7 +255,9 @@ public class UserService { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); Resource resource = resourceLoader.getResource("classpath:/static/logo.jpg"); InputStream inputStream = resource.getInputStream(); - QrCodeUtil.generate(wxAccountUtil.getRadarQrCode(Integer.valueOf(shopId), -1), new QrConfig(500, 500). +// String url = wxAccountUtil.getRadarQrCode(Integer.valueOf(shopId), -1); + String url = StrUtil.format("https://invoice.sxczgkj.cn/index/wechat/weuserk?shopId={}", shopId); + QrCodeUtil.generate(url, new QrConfig(500, 500). setImg(ImageIO.read(inputStream)).setErrorCorrection(ErrorCorrectionLevel.H).setRatio(4), "png", outputStream);