Просмотр исходного кода

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

xucaiqin 2 лет назад
Родитель
Сommit
805a240163

+ 1 - 0
sckw-auth/src/main/java/com/sckw/auth/service/impl/AuthServiceImpl.java

@@ -565,6 +565,7 @@ public class AuthServiceImpl implements IAuthService {
             LoginUserInfo loginUserInfo = new LoginUserInfo();
             loginUserInfo.setId(user.getId());
             loginUserInfo.setSystemType(loginBase.getSystemType());
+            loginUserInfo.setClientType(loginBase.getClientType());
             loginUserInfo.setAccount(user.getPhone());
             loginUserInfo.setUserName(user.getName());
             loginUserInfo.setPhone(user.getPhone());

+ 1 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/ClientTypeEnum.java

@@ -10,6 +10,7 @@ import com.sckw.core.model.constant.Global;
 public enum ClientTypeEnum {
     //浏览器-官网
     pc("浏览器", "pc"),
+    app("app", "app"),
     //苹果设备
     ios("苹果设备", "ios"),
     //安卓设备

+ 10 - 0
sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/enums/MessageEnum.java

@@ -11,6 +11,16 @@ import lombok.Getter;
 @AllArgsConstructor
 @Getter
 public enum MessageEnum {
+    /**
+     * 上架商品
+     */
+    PRODUCT_ON_SHELVES("SYSTEM", "SYSTEM_PRODUCT_ON_SHELVES", "商品已上架",
+            "贵司的商品:${productName},已上架至商城中,请确认相关信息","terminal,ios,android"),
+    /**
+     * 下架商品
+     */
+    PRODUCT_REMOVED_SHELVES("SYSTEM", "SYSTEM_PRODUCT_REMOVED_SHELVES", "商品已下架",
+            "贵司的商品:${productName},已从商城中下架了,请确认相关信息","terminal,ios,android"),
     /**
      * 采发起采购下单
      */

+ 44 - 4
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java

@@ -1,5 +1,6 @@
 package com.sckw.product.service;
 
+import com.alibaba.fastjson2.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -13,10 +14,7 @@ import com.sckw.core.model.page.PageResult;
 import com.sckw.core.model.vo.TableBottom;
 import com.sckw.core.model.vo.TableStatisticRes;
 import com.sckw.core.model.vo.TableTop;
-import com.sckw.core.utils.BeanUtils;
-import com.sckw.core.utils.CollectionUtils;
-import com.sckw.core.utils.NumberUtils;
-import com.sckw.core.utils.StringUtils;
+import com.sckw.core.utils.*;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.excel.utils.DateUtil;
@@ -31,6 +29,9 @@ import com.sckw.product.model.vo.req.*;
 import com.sckw.product.model.vo.res.*;
 import com.sckw.redis.constant.RedisConstant;
 import com.sckw.redis.utils.RedissonUtils;
+import com.sckw.stream.enums.MessageEnum;
+import com.sckw.stream.model.SckwMessage;
+import com.sckw.stream.model.UserInfo;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.RemoteUserService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
@@ -40,6 +41,8 @@ import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.stream.function.StreamBridge;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -73,6 +76,10 @@ public class KwpGoodsService {
     private final KwpGoodsAttributeService kwpGoodsAttributeService;
     private final KwpGoodsImageService kwpGoodsImageService;
     private final KwpGoodsPriceRangeService kwpGoodsPriceRangeService;
+    private final StreamBridge streamBridge;
+
+    @Value("${goods.url.list}")
+    private String goodsListUrl;
 
 
     /**
@@ -650,6 +657,7 @@ public class KwpGoodsService {
      * @Param id:
      * @return: void
      */
+    @Transactional(rollbackFor = Exception.class)
     public void batchPutOnShelves(Long id) {
         LambdaQueryWrapper<KwpGoods> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(KwpGoods::getId, id).eq(KwpGoods::getEntId, LoginUserHolder.getEntId()).eq(KwpGoods::getDelFlag, Global.NO).last("LIMIT 1");
@@ -674,6 +682,34 @@ public class KwpGoodsService {
         LambdaUpdateWrapper<KwpGoods> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(KwpGoods::getStatus, GoodsStatusEnum.PUT_ON_SHELVES.getCode()).set(KwpGoods::getAddedTime, new Date()).eq(KwpGoods::getId, id);
         kwpGoodsMapper.update(null, updateWrapper);
+        sendMsg(MessageEnum.PRODUCT_ON_SHELVES, goods);
+    }
+
+    /**
+     * @desc: 发送消息提醒
+     * @author: yzc
+     * @date: 2023-09-05 11:53
+     * @Param msgEnum:
+     * @Param goods:
+     * @return: void
+     */
+    private void sendMsg(MessageEnum msgEnum, KwpGoods goods) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("productName", goods.getName());
+        //给创建人发消息
+        List<UserInfo> userInfos = new ArrayList<>();
+        UserInfo createUser = new UserInfo();
+        createUser.setUserId(goods.getCreateBy()).setEntId(goods.getEntId());
+        userInfos.add(createUser);
+        SckwMessage msg = new SckwMessage();
+        msg.setRequestId(UUIDUtils.get32UUID())
+                .setMessageEnum(msgEnum)
+                .setParams(map)
+                .setMsgUrl(goodsListUrl)
+                .setUserInfos(userInfos)
+                .setCreateBy(LoginUserHolder.getUserId());
+        log.info(msgEnum.getTitle() + "消息:{}", JSON.toJSONString(msg));
+        streamBridge.send("sckw-message", JSON.toJSONString(msg));
     }
 
 
@@ -684,6 +720,7 @@ public class KwpGoodsService {
      * @Param ids:
      * @return: void
      */
+    @Transactional(rollbackFor = Exception.class)
     public void batchTakeOffShelves(List<Long> ids) {
         LambdaQueryWrapper<KwpGoods> wrapper = new LambdaQueryWrapper<>();
         wrapper.in(KwpGoods::getId, ids).eq(KwpGoods::getStatus, GoodsStatusEnum.PUT_ON_SHELVES.getCode()).eq(KwpGoods::getEntId, LoginUserHolder.getEntId()).eq(KwpGoods::getDelFlag, Global.NO);
@@ -694,6 +731,9 @@ public class KwpGoodsService {
         LambdaUpdateWrapper<KwpGoods> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.set(KwpGoods::getStatus, GoodsStatusEnum.TAKE_OFF_SHELVES.getCode()).set(KwpGoods::getShelfTime, new Date()).in(KwpGoods::getId, ids);
         kwpGoodsMapper.update(null, updateWrapper);
+        list.forEach(e -> {
+            sendMsg(MessageEnum.PRODUCT_REMOVED_SHELVES, e);
+        });
     }
 
     /**

+ 6 - 3
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderService.java

@@ -137,7 +137,7 @@ public class KwOrderService {
         Long userId = LoginUserHolder.getUserId();
         Criteria criteria = new Criteria();
         String topEnt = Objects.equals(params.getOrderType(), 1) ? "procureTopEntId" : "supplyTopEntId";
-        criteria.and(topEnt).is(entId).and("delFlag").is(0);
+        criteria.and("delFlag").is(0);
         //日期范围
         if (Objects.nonNull(params.getStartCreateTime()) && Objects.nonNull(params.getEndCreateTime())) {
             criteria.and("createTime").gte(params.getStartCreateTime()).lte(params.getEndCreateTime());
@@ -190,11 +190,14 @@ public class KwOrderService {
             if (Objects.equals(params.getStatus(), 0)) {
                 //草稿状态只能创建订单的人能看
                 criteria.and("createBy").is(userId);
+            }else {
+                criteria.and(topEnt).is(entId);
             }
         } else {
-            //非草稿状态or草稿状态且是当前人且一级企业匹配
+            //非草稿状态且一级企业匹配or草稿状态且是当前人
             Criteria orOperator = new Criteria().orOperator(
-                    Criteria.where("status").ne(0),
+                    new Criteria().andOperator(Criteria.where("status").ne(0),
+                            Criteria.where(topEnt).is(entId)),
                     new Criteria().andOperator(Criteria.where("status").is(0),
                             Criteria.where("createBy").is(userId)));
             orOperators.add(orOperator);

+ 13 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/controller/KwsMenuController.java

@@ -1,6 +1,5 @@
 package com.sckw.system.controller;
 
-import com.sckw.core.exception.SystemException;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.system.model.KwsMenu;
@@ -125,4 +124,17 @@ public class KwsMenuController {
     public HttpResult queryChildMenu(@Valid @RequestBody QueryChildMenuReqVo reqVo) {
         return HttpResult.ok(kwsMenuService.queryChildMenu(reqVo));
     }
+
+    /**
+     * @param  reqVo 入参
+     * @return HttpResult
+     * @desc: 保存映射关系
+     * @author: czh
+     * @date: 2023/6/13
+     */
+    @PostMapping("/saveMapping")
+    public HttpResult saveMapping(@Valid @RequestBody SaveMappingReqVo reqVo) {
+        kwsMenuService.saveMapping(reqVo);
+        return HttpResult.ok();
+    }
 }

+ 42 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/dao/KwsMenuMappingDao.java

@@ -0,0 +1,42 @@
+package com.sckw.system.dao;
+
+import com.sckw.system.model.KwsMenuMapping;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+
+/**
+ * 菜单
+ * @author zk
+ * @date 2023-05-31
+ */
+@Mapper
+public interface KwsMenuMappingDao {
+
+    /**
+     * @param list 实体类
+     * @desc: 批量保存
+     * @author: czh
+     * @date: 2023/9/5
+     */
+    void saveBatch(List<KwsMenuMapping> list);
+
+    /**
+     * @param id menuId
+     * @return KwsMenuMapping
+     * @desc: 根据菜单id查映射关系
+     * @author: czh
+     * @date: 2023/9/5
+     */
+    List<KwsMenuMapping> selectByMenuId(Long id);
+
+    /**
+     * @param kwsMenuMapping 实体
+     * @desc: 修改
+     * @author: czh
+     * @date: 2023/9/5
+     */
+    int updateById(KwsMenuMapping kwsMenuMapping);
+
+}

+ 21 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/KwsMenuMapping.java

@@ -0,0 +1,21 @@
+package com.sckw.system.model;
+
+import com.sckw.core.model.base.BaseModel;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+/**
+ * 菜单
+ * @author zk
+ * @date 2023-05-31
+ */
+@Data
+public class KwsMenuMapping extends BaseModel {
+
+    private Long menuId;
+
+    private Long mappingId;
+
+}

+ 36 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/SaveMappingReqVo.java

@@ -0,0 +1,36 @@
+package com.sckw.system.model.vo.req;
+
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author czh
+ * @desc 保存菜单映射
+ * @date 2023/9/5
+ */
+@Data
+public class SaveMappingReqVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 6484424016595829142L;
+
+    /**
+     * 菜单id
+     */
+    @NotNull(message = "菜单不能为空")
+    private Long menuId;
+
+    /**
+     * 对应的菜单id
+     */
+    @NotNull(message = "对应的菜单不能为空")
+    private List<Long> mappingIdList;
+
+    @Size(max = 200, message = "备注长度不能超过200")
+    private String remark;
+}

+ 72 - 6
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsMenuService.java

@@ -7,6 +7,7 @@ import java.util.*;
 import cn.hutool.core.collection.CollectionUtil;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.enums.ClientTypeEnum;
 import com.sckw.core.model.enums.MenuTypeEnum;
 import com.sckw.core.model.enums.SystemTypeEnum;
 import com.sckw.core.utils.BeanUtils;
@@ -46,6 +47,9 @@ public class KwsMenuService {
     @Autowired
     KwsEnterpriseDao kwsEnterpriseDao;
 
+    @Autowired
+    KwsMenuMappingDao kwsMenuMappingDao;
+
     /**
      * @param params 实体
      * @desc: 添加新纪录
@@ -67,8 +71,6 @@ public class KwsMenuService {
             params.setParentId(0L);
         }
 
-
-
         //新增按钮时,有重复的序号,则把后面的都加1
         //按钮继承父菜单的using_roles
         if (params.getType() == MenuTypeEnum.BUTTON.getCode()) {
@@ -259,12 +261,34 @@ public class KwsMenuService {
         extracted(reqVo.getUserId(), findMenuTreePojo);
 
         List<KwsMenuResVo> menuList = kwsMenuDao.findList(findMenuTreePojo);
+        List<KwsMenuResVo> finalList = new ArrayList<>();
+        //app菜单特殊处理
+        if (SystemTypeEnum.COMPANY.getCode().equals(LoginUserHolder.getSystemType()) && ClientTypeEnum.app.getValue().equals(LoginUserHolder.getClientType())) {
+            for (KwsMenuResVo kwsMenuResVo : menuList) {
+                List<KwsMenuMapping> kwsMenuMappings = kwsMenuMappingDao.selectByMenuId(kwsMenuResVo.getId());
+                if (CollectionUtils.isEmpty(kwsMenuMappings)) {
+                    continue;
+                }
+
+                List<Long> mapIds = kwsMenuMappings.stream().map(KwsMenuMapping::getMappingId).toList();
+                List<KwsMenu> kwsMenus = kwsMenuDao.selectByKeys(mapIds);
+                if (CollectionUtils.isEmpty(kwsMenus)) {
+                    continue;
+                }
+
+                List<KwsMenuResVo> kwsMenuResVos = BeanUtils.copyToList(kwsMenus, KwsMenuResVo.class);
+                finalList.addAll(kwsMenuResVos);
+            }
+        } else {
+            finalList = menuList;
+        }
+
         List<KwsMenuResVo> rootList = new ArrayList<>();
 
         //获取根节点数据
-        if (CollectionUtil.isNotEmpty(menuList)) {
-            int level = menuList.get(0).getLevel();
-            for (KwsMenuResVo kwsMenu : menuList) {
+        if (CollectionUtil.isNotEmpty(finalList)) {
+            int level = finalList.get(0).getLevel();
+            for (KwsMenuResVo kwsMenu : finalList) {
                 if (kwsMenu.getLevel() == level) {
                     rootList.add(kwsMenu);
                 }
@@ -273,7 +297,7 @@ public class KwsMenuService {
 
         //遍历,找到二级机构(根机构的id和所有机构中的pid比较)
         for (KwsMenuResVo kwsMenu : rootList) {
-            List<KwsMenuResVo> child = getChild(kwsMenu.getId(), menuList);
+            List<KwsMenuResVo> child = getChild(kwsMenu.getId(), finalList);
             kwsMenu.setChildren(child);
         }
         return BeanUtils.copyToList(rootList, FindMenuTreeResVo.class);
@@ -420,4 +444,46 @@ public class KwsMenuService {
         return BeanUtils.copyToList(select, QueryChildMenuResVo.class);
     }
 
+
+    /**
+     * @param reqVo 入参
+     * @desc: 保存菜单映射关系
+     * @author: czh
+     * @date: 2023/9/5
+     */
+    @Transactional(rollbackFor = {})
+    public void saveMapping(SaveMappingReqVo reqVo) {
+        Long menuId = reqVo.getMenuId();
+        List<Long> mappingIdList = reqVo.getMappingIdList();
+        List<KwsMenuMapping> kwsMenuMappings = kwsMenuMappingDao.selectByMenuId(menuId);
+        Date date = new Date();
+        if (CollectionUtils.isNotEmpty(kwsMenuMappings)) {
+            for (KwsMenuMapping kwsMenuMapping : kwsMenuMappings) {
+                kwsMenuMapping.setDelFlag(Global.YES);
+                kwsMenuMapping.setUpdateBy(LoginUserHolder.getUserId());
+                kwsMenuMapping.setUpdateTime(date);
+                if (kwsMenuMappingDao.updateById(kwsMenuMapping) <= 0) {
+                    throw new SystemException(HttpStatus.CRUD_FAIL_CODE, HttpStatus.UPDATE_FAIL);
+                }
+            }
+        }
+
+        List<KwsMenuMapping> list = new ArrayList<>();
+        for (Long id : mappingIdList) {
+            KwsMenuMapping kwsMenuMapping = new KwsMenuMapping();
+            kwsMenuMapping.setMenuId(menuId);
+            kwsMenuMapping.setMappingId(id);
+            kwsMenuMapping.setId(new IdWorker(1L).nextId());
+            kwsMenuMapping.setRemark(reqVo.getRemark());
+            kwsMenuMapping.setStatus(Global.NO);
+            kwsMenuMapping.setCreateBy(LoginUserHolder.getUserId());
+            kwsMenuMapping.setCreateTime(date);
+            kwsMenuMapping.setUpdateBy(LoginUserHolder.getUserId());
+            kwsMenuMapping.setUpdateTime(date);
+            kwsMenuMapping.setDelFlag(Global.NO);
+            list.add(kwsMenuMapping);
+        }
+        kwsMenuMappingDao.saveBatch(list);
+    }
+
 }

+ 51 - 0
sckw-modules/sckw-system/src/main/resources/mapper/KwsMenuMappingDao.xml

@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sckw.system.dao.KwsMenuMappingDao">
+
+  <insert id="saveBatch">
+    insert into kws_menu_mapping (
+      id,
+      menu_id,
+      mapping_id,
+      create_by,
+      create_time,
+      update_by,
+      update_time,
+      del_flag,
+      status,
+      remark
+    ) values
+    <foreach collection="list" item="item" separator=",">
+      (
+        #{item.id},
+        #{item.menuId},
+        #{item.mappingId},
+        #{item.createBy},
+        #{item.createTime},
+        #{item.updateBy},
+        #{item.updateTime},
+        #{item.delFlag},
+        #{item.status},
+        #{item.remark}
+      )
+    </foreach>
+  </insert>
+  <update id="updateById">
+    update kws_menu_mapping
+       set menu_id = #{menuId},
+           mapping_id = #{mappingId},
+           create_by = #{createBy},
+           create_time = #{createTime},
+           update_by = #{updateBy},
+           update_time = #{updateTime},
+           del_flag = #{delFlag},
+           status = #{status},
+           remark = #{remark}
+     where id = #{id}
+  </update>
+
+  <select id="selectByMenuId" resultType="com.sckw.system.model.KwsMenuMapping">
+    select a.* from kws_menu_mapping a where a.menu_id = #{id} and a.del_flag = 0
+  </select>
+
+</mapper>