From 5d48ccc1bdf9a740560e24364023cfb23a992bba Mon Sep 17 00:00:00 2001 From: xyc <3422692813@qq.com> Date: Wed, 30 Apr 2025 13:18:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/InspectionWorkNodeMapper.java | 3 +- .../InspectionAppointmentServiceImpl.java | 24 ++++ .../impl/InspectionWorkNodeServiceImpl.java | 36 ++++- .../impl/ShopInspectionGoodsServiceImpl.java | 26 +++- .../inspection/vo/StaffProjectCountVO.java | 11 ++ .../mapper/InspectionWorkNodeMapper.xml | 129 ++++++++++-------- .../inspection/AppInspectionPartnerMapper.xml | 13 +- 7 files changed, 182 insertions(+), 60 deletions(-) create mode 100644 dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/vo/StaffProjectCountVO.java diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/mapper/InspectionWorkNodeMapper.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/mapper/InspectionWorkNodeMapper.java index d95d791f..048b80ba 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/mapper/InspectionWorkNodeMapper.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/mapper/InspectionWorkNodeMapper.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.inspection.mapper; import cn.iocoder.yudao.module.inspection.entity.DlInspectionProject; import cn.iocoder.yudao.module.inspection.entity.InspectionWorkNode; +import cn.iocoder.yudao.module.inspection.vo.StaffProjectCountVO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.apache.ibatis.annotations.Mapper; @@ -39,7 +40,7 @@ public interface InspectionWorkNodeMapper extends BaseMapper */ void recheck(@Param("list") List workNodes, @Param("status") String status); - List> getStaffCount(DlInspectionProject dlInspectionProject); + List getStaffCount(DlInspectionProject dlInspectionProject); /** * 根据检测id获取异常节点 diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionAppointmentServiceImpl.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionAppointmentServiceImpl.java index 67b4d2e4..c582ee75 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionAppointmentServiceImpl.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionAppointmentServiceImpl.java @@ -1,14 +1,20 @@ package cn.iocoder.yudao.module.inspection.service.impl; import java.util.*; +import java.util.stream.Collectors; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.module.appBase.controller.admin.InspectionSocket; import cn.iocoder.yudao.module.shop.entity.ShopConfig; import cn.iocoder.yudao.module.shop.service.IShopConfigService; +import cn.iocoder.yudao.module.system.api.dict.DictDataApi; +import cn.iocoder.yudao.module.system.api.dict.dto.DictDataRespDTO; +import cn.iocoder.yudao.module.system.api.user.dto.UserDTO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; +import cn.iocoder.yudao.module.system.service.permission.RoleService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.util.SendSmsUtil; import com.alibaba.fastjson.JSONObject; @@ -29,6 +35,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.annotation.Resource; + import static cn.iocoder.yudao.util.DistanceUtil.getDistanceMeter; /** @@ -44,6 +52,12 @@ public class InspectionAppointmentServiceImpl extends ServiceImpl roleList = dictDataApi.getDictDataList("inspection_appointmentInspection_accept"); + List codes = roleList.stream().map(DictDataRespDTO::getValue).collect(Collectors.toList()); + + //根据角色查询用户 + List userListByCodes = roleService.getUserListByCodes(codes); + for (UserDTO userListByCode : userListByCodes) { + inspectionSocket.sendMessage("接工单", userListByCode.getId().toString()); + } return appointment.getId(); } diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionWorkNodeServiceImpl.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionWorkNodeServiceImpl.java index 0db43063..56504e2a 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionWorkNodeServiceImpl.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/InspectionWorkNodeServiceImpl.java @@ -15,6 +15,7 @@ import cn.iocoder.yudao.module.inspection.service.DlInspectionProjectService; import cn.iocoder.yudao.module.inspection.service.IInspectionInfoService; import cn.iocoder.yudao.module.inspection.service.IInspectionWorkNodeService; import cn.iocoder.yudao.module.inspection.service.InspectionStepInfoService; +import cn.iocoder.yudao.module.inspection.vo.StaffProjectCountVO; import cn.iocoder.yudao.module.system.api.user.dto.UserDTO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.service.permission.RoleService; @@ -426,7 +427,40 @@ public class InspectionWorkNodeServiceImpl extends ServiceImpl> getStaffCount(DlInspectionProject dlInspectionProject) { - return baseMapper.getStaffCount(dlInspectionProject); + Map> tempMap = new LinkedHashMap<>(); + List staffCount = baseMapper.getStaffCount(dlInspectionProject); + for (StaffProjectCountVO vo : staffCount) { + Map userEntry = tempMap.computeIfAbsent(vo.getUserId(), k -> { + Map m = new HashMap<>(); + m.put("userId", vo.getUserId()); + m.put("nickname", vo.getNickname()); + m.put("totalCount", 0L); // 初始总数 + m.put("children", new ArrayList>()); + return m; + }); + + // 添加项目 + List> children = (List>) userEntry.get("children"); + Map project = new HashMap<>(); + project.put("projectName", vo.getProjectName()); + project.put("count", vo.getCount()); + children.add(project); + + // 累加总数 + Long currentTotal = (Long) userEntry.get("totalCount"); + userEntry.put("totalCount", currentTotal + vo.getCount()); + } + + // 转成 List 并按 totalCount 降序排序 + return tempMap.values().stream() + .peek(userEntry -> { + // 排序每个用户下的项目 children + List> children = (List>) userEntry.get("children"); + children.sort((a, b) -> Long.compare((Long) b.get("count"), (Long) a.get("count"))); + }) + .sorted((a, b) -> Long.compare((Long) b.get("totalCount"), (Long) a.get("totalCount"))) + .collect(Collectors.toList()); + } /** diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/ShopInspectionGoodsServiceImpl.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/ShopInspectionGoodsServiceImpl.java index 4325ebba..180042cb 100644 --- a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/ShopInspectionGoodsServiceImpl.java +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/service/impl/ShopInspectionGoodsServiceImpl.java @@ -6,6 +6,7 @@ import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.shop.entity.ShopConfig; @@ -15,6 +16,7 @@ import cn.iocoder.yudao.module.system.service.user.AdminUserService; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import cn.iocoder.yudao.util.StringUtils; @@ -52,6 +54,8 @@ public class ShopInspectionGoodsServiceImpl extends ServiceImpl templates = categoryTemplateService.list(Wrappers.lambdaQuery() + .eq(InspectionCategoryTemplate::getCategoryId, category.getId())); + List skuList = new ArrayList<>(); + for (InspectionCategoryTemplate template : templates) { + InspectionGoodsSku sku = new InspectionGoodsSku(); + sku.setGoodsId(shopInspectionGoods.getId()); + sku.setSkuName(template.getSkuName()); + sku.setPrice(template.getSkuPrice()); + sku.setDbPrice(template.getSkuPrice()); + sku.setDwPrice(template.getSkuPrice()); + sku.setYgPrice(template.getSkuPrice()); + skuList.add(sku); + } + skuService.saveBatch(skuList); + } + return 1; } /** diff --git a/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/vo/StaffProjectCountVO.java b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/vo/StaffProjectCountVO.java new file mode 100644 index 00000000..d48627e7 --- /dev/null +++ b/dl-module-inspection/src/main/java/cn/iocoder/yudao/module/inspection/vo/StaffProjectCountVO.java @@ -0,0 +1,11 @@ +package cn.iocoder.yudao.module.inspection.vo; + +import lombok.Data; + +@Data +public class StaffProjectCountVO { + private Long userId; + private Long count; + private String nickname; + private String projectName; +} diff --git a/dl-module-inspection/src/main/resources/mapper/InspectionWorkNodeMapper.xml b/dl-module-inspection/src/main/resources/mapper/InspectionWorkNodeMapper.xml index 5f168510..2322b49a 100644 --- a/dl-module-inspection/src/main/resources/mapper/InspectionWorkNodeMapper.xml +++ b/dl-module-inspection/src/main/resources/mapper/InspectionWorkNodeMapper.xml @@ -182,62 +182,81 @@ - - SELECT - iwn.deal_user_id, -- 处理人员ID - su.nickname, -- 处理人员名称 - su.avatar, -- 处理人员头像 - COUNT(DISTINCT iwn.id) AS orderCount, -- 统计每个员工的唯一订单数量 - SUM(IFNULL(royalty.royalty_amount, 0) / 100) AS royaltyAmount, -- 计算每个员工的总佣金 - su.mobile, -- 处理人员手机号 - COALESCE(waijianCount, 0) AS waijianCount, -- 包含“外检”的订单数量 - COALESCE(anjianCount, 0) AS anjianCount, -- 包含“安检”的订单数量 - COALESCE(proj_stats.otherCount, 0) AS otherCount -- 其他订单数量(排除“外检”和“安检”) - FROM - inspection_work_node iwn - LEFT JOIN system_users su ON su.id = iwn.deal_user_id -- 处理人员信息 - LEFT JOIN inspection_info AS info ON iwn.inspection_info_id = info.id - LEFT JOIN order_info orders ON info.inspection_order_id = orders.id - LEFT JOIN inspection_project_royalty AS royalty - ON iwn.project_id = royalty.project_id - AND orders.goods_id = royalty.goods_id - LEFT JOIN ( - SELECT - iwn.deal_user_id, - SUM(CASE WHEN proj.project_name LIKE '环检外检%' THEN 1 ELSE 0 END) AS waijianCount, - SUM(CASE WHEN proj.project_name LIKE '安检%' THEN 1 ELSE 0 END) AS anjianCount, - SUM( - CASE - WHEN proj.project_name NOT LIKE '环检外检%' - AND proj.project_name NOT LIKE '安检%' - THEN 1 ELSE 0 - END - ) AS otherCount -- 统计不包含“外检”和“安检”的订单 - FROM - inspection_work_node iwn - LEFT JOIN inspection_project AS proj ON iwn.project_id = proj.id - LEFT JOIN inspection_info AS info ON iwn.inspection_info_id = info.id - WHERE iwn.deleted = 0 -- 排除已删除的数据 - AND iwn.deal_user_id IS NOT NULL -- 排除 deal_user_id 为 NULL 的记录 - AND iwn.status = 2 - AND info.status = 1 - GROUP BY - iwn.deal_user_id - ) proj_stats ON iwn.deal_user_id = proj_stats.deal_user_id -- 获取“外检”和“安检”的统计 - - iwn.deleted = 0 -- 排除已删除的数据 - AND iwn.deal_user_id IS NOT NULL -- 排除 deal_user_id 为 NULL 的记录 - AND iwn.status = 2 - AND info.status = 1 - - AND iwn.project_id = #{id} -- 只在这里加上id过滤 - - - GROUP BY - iwn.deal_user_id -- 根据处理人员ID进行分组 - ORDER BY - orderCount DESC; -- 根据接单数量进行降序排序 + SELECT + ip.project_name, count(iwn.id) as count,is2.user_id,su.nickname + FROM inspection_staff is2 + LEFT JOIN inspection_work_node iwn ON is2.user_id = iwn.deal_user_id + LEFT JOIN inspection_project ip ON iwn.project_id = ip.id + LEFT JOIN system_users su on su.id = is2.user_id + WHERE + ip.id in ( + SELECT + ip2.id + FROM + inspection_project ip2 + WHERE + ip2.deleted = 0 + ) + group by is2.user_id,ip.project_name SELECT goods.title AS goodsName, - SUM( case when (ii.`status`='1' and ii.is_pass = '1') or (ii.`status`='0') then oi.goods_price else 0 end ) AS salesAmount, - SUM( case when (ii.`status`='1' and ii.is_pass = '1') or (ii.`status`='0') then 1 else 0 end ) AS salesNum + ROUND( + SUM( + CASE + WHEN (ii.`status` = '1' AND ii.is_pass = '1') OR ii.`status` = '0' + THEN oi.goods_price + ELSE 0 + END + ) / 100.0, + 2 + ) AS salesAmount, + SUM( case when (ii.`status`='1' and ii.is_pass = '1') or (ii.`status`='0') then 1 else 0 end ) AS salesNum FROM shop_inspection_goods goods left join order_info oi on oi.goods_id = goods.id and validation_time is not null and validation_time like concat(#{dateStr},'%')