ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/StaffTotalDto.java
@@ -3,6 +3,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @ClassName StaffTotalDto * @Description TODO @@ -29,6 +31,9 @@ @ApiModelProperty(value = "商品类型1周期2服务3体验4单品") private Integer goodsType; @ApiModelProperty(value = "年龄层",hidden = true) @ApiModelProperty(value = "年龄层 1 <20,2 21-30,3 31-40,4 41-50,5 >50") private Integer ageType; @ApiModelProperty(value = "用户id",hidden = true) private List<Long> userIdList; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteMemberFallbackFactory.java
@@ -154,6 +154,11 @@ return R.fail("核销奖品失败:" + throwable.getMessage()); } @Override public R<List<Long>> listUserIdByAgeType(Integer ageType) { return R.fail("获取用户id列表失败:" + throwable.getMessage()); } }; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteMemberService.java
@@ -191,7 +191,7 @@ /** * @param merVerifyPrizeDto * @param verifyPrize * @return R<MemberGiftRecord> * @description 获取核销奖品 * @author jqs @@ -252,4 +252,14 @@ */ @PostMapping("/member/verifyPrize") public R verifyPrize(@RequestBody MerVerifyPrizeFinalDto merVerifyPrizeFinalDto); /** * @description * @author jqs * @date 2023/8/23 19:06 * @param ageType * @return R<List<Long>> */ @PostMapping("/member/listUserIdByAgeType") public R<List<Long>> listUserIdByAgeType(@RequestBody Integer ageType); } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/console/MemberController.java
@@ -360,4 +360,10 @@ BirthdayCard birthdayCard = birthdayCardService.getBirthdayCard(); return R.ok(birthdayCard); } @PostMapping("/listUserIdByAgeType") public R<List<Long>> listUserIdByAgeType(@RequestBody Integer ageType){ List<Long> userIdList = memberService.listUserIdByAgeType(ageType); return R.ok(userIdList); } } ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -1793,7 +1793,20 @@ orderAgeUserVoList.add(merOrderAgeUserVo); return orderAgeUserVoList; } /** * @description 通过年龄层获取用户id列表 * @author jqs * @date 2023/8/23 18:59 * @param ageType * @return List<Long> */ @Override public List<Long> listUserIdByAgeType(Integer ageType){ MerTotalDto merTotalDto = new MerTotalDto(); merTotalDto.setAgeType(ageType); List<Long> userIdList = memberMapper.listOrderAgeUser(merTotalDto); return userIdList; } /** * @description * @author jqs ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/member/MemberService.java
@@ -323,10 +323,19 @@ List<MerOrderAgeUserVo> listOrderAgeUser(MerTotalDto merTotalDto); /** * @description 通过年龄层获取用户id列表 * @author jqs * @date 2023/8/23 18:59 * @param ageType * @return List<Long> */ List<Long> listUserIdByAgeType(Integer ageType); /** * @description * @author jqs * @date 2023/7/5 21:18 * @param mgtBaseGetDto * @param mgtFrozenMemberDto * @return void */ void mgtFrozenMember(MgtFrozenMemberDto mgtFrozenMemberDto); ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/MgtTotalController.java
@@ -66,7 +66,7 @@ } @RequestMapping(value = "/getTotalDataTotal", method = RequestMethod.POST) @ApiOperation(value = "获取商户数据统计") @ApiOperation(value = "获取商户数据统计(数据统计)") public R<MgtTotalDataTotalVo> getTotalDataTotal(@RequestBody MgtBaseShopDto mgtBaseShopDto) { Long userId = SecurityUtils.getUserId(); mgtBaseShopDto.setUserId(userId); ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java
@@ -109,6 +109,7 @@ appMemberBindingDto.setBindingFlag(1); appMemberBindingDto.setBindingType(1); memberService.updateMemberBinding(appMemberBindingDto); appPlaceOrderDto.setNewMemberFlag(1); } } } @@ -134,6 +135,7 @@ appMemberBindingDto.setBindingFlag(1); appMemberBindingDto.setBindingType(2); memberService.updateMemberBinding(appMemberBindingDto); appPlaceActivityDto.setNewMemberFlag(1); } } AppPlaceOrderVo appPlaceOrderVo = orderService.placeActivityOrder(appPlaceActivityDto); ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/staff/StaffTotalController.java
@@ -32,7 +32,7 @@ private OrderService orderService; @RequestMapping(value = "/getStaffActivityOrderTotal", method = RequestMethod.POST) @ApiOperation(value = "员工端获取订单概况") @ApiOperation(value = "员工端活动分析(订单概况/营业额概况)") public R<StaffActivityOrderTotalVo> getStaffActivityOrderTotal(@RequestBody StaffTotalDto staffTotalDto) { Long userId = SecurityUtils.getUserId(); staffTotalDto.setUserId(userId); @@ -41,7 +41,7 @@ } @RequestMapping(value = "/getStaffActivityTotal", method = RequestMethod.POST) @ApiOperation(value = "员工端获取活动统计") @ApiOperation(value = "员工端活动分析(活动统计)") public R<StaffActivityTotalVo> getStaffActivityTotal(@RequestBody StaffTotalDto staffTotalDto) { Long userId = SecurityUtils.getUserId(); staffTotalDto.setUserId(userId); @@ -50,7 +50,7 @@ } @RequestMapping(value = "/getStaffOrderDistributionTotal", method = RequestMethod.POST) @ApiOperation(value = "员工端获取订单分布统计") @ApiOperation(value = "员工端活动分析(订单分布)") public R<MerOrderDistributionTotalVo> getStaffOrderDistributionTotal(@RequestBody StaffTotalDto staffTotalDto) { Long userId = SecurityUtils.getUserId(); staffTotalDto.setUserId(userId); @@ -59,7 +59,7 @@ } @RequestMapping(value = "/getStaffOrderTypeTotal", method = RequestMethod.POST) @ApiOperation(value = "员工端获取销售占比统计") @ApiOperation(value = "员工端活动分析(销售占比)") public R<MerOrderTypeTotalVo> getMerOrderTypeTotal(@RequestBody StaffTotalDto staffTotalDto) { Long userId = SecurityUtils.getUserId(); staffTotalDto.setUserId(userId); @@ -69,7 +69,7 @@ @RequestMapping(value = "/getStaffActivityGetMemberTotal", method = RequestMethod.POST) @ApiOperation(value = "员工端获取获客人数") @ApiOperation(value = "员工端活动分析(获客人数)") public R<StaffActivityDateMemberTotalVo> getStaffActivityGetMemberTotal(@RequestBody StaffTotalDto staffTotalDto) { Long userId = SecurityUtils.getUserId(); staffTotalDto.setUserId(userId); @@ -78,7 +78,7 @@ } @RequestMapping(value = "/getStaffActivityMemberTotal", method = RequestMethod.POST) @ApiOperation(value = "员工端获取参与人数") @ApiOperation(value = "员工端活动分析(参与人数)") public R<StaffActivityDateMemberTotalVo> getStaffActivityMemberTotal(@RequestBody StaffTotalDto staffTotalDto) { Long userId = SecurityUtils.getUserId(); staffTotalDto.setUserId(userId); ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/AppPlaceActivityDto.java
@@ -39,4 +39,7 @@ @ApiModelProperty(value = "订单备注") private String orderRemark; @ApiModelProperty(value = "获客标记",hidden = true) private Integer newMemberFlag; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/dto/AppPlaceOrderDto.java
@@ -30,4 +30,7 @@ @ApiModelProperty(value = "购物车列表") List<AppBuyGoodsDto> appBuyGoodsDtoList; @ApiModelProperty(value = "获客标记",hidden = true) private Integer newMemberFlag; } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/order/Order.java
@@ -179,6 +179,9 @@ @TableField("change_receivable_money") private BigDecimal changeReceivableMoney; @TableField("new_member_flag") private Integer newMemberFlag; @Override protected Serializable pkVal() { ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/vo/MerOrderDistributionTotalVo.java
@@ -1,7 +1,5 @@ package com.ruoyi.order.domain.vo; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -24,7 +22,6 @@ private Integer[] orderTotalValue; @ApiModelProperty(value = "订单金额value") private BigDecimal[] orderMoneyValue; ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderMapper.java
@@ -567,6 +567,16 @@ */ StaffActivityOrderTotalVo getStaffActivityOrderTotal(@Param("param")StaffTotalDto staffTotalDto); /** * @description 员工端活动订单统计 * @author jqs * @date 2023/7/17 15:25 * @param staffTotalDto * @return StaffActivityOrderTotalVo */ StaffActivityOrderTotalVo getStaffActivityOrderGoodsTotal(@Param("param")StaffTotalDto staffTotalDto); /** * @description 员工端活动统计 * @author jqs @@ -581,10 +591,10 @@ * @description 获取各年龄层统计 * @author jqs * @date 2023/7/4 10:27 * @param userIdList * @param staffTotalDto * @return MgtMapTotalPlusVo */ MgtMapTotalPlusVo listStaffActivityOrderDistributionTotal(@Param("userIdList")List<Long> userIdList,@Param("shopId")Long shopId,@Param("activityId")String activityId); List<MgtMapTotalPlusVo> listStaffActivityOrderDistributionTotal(@Param("param")StaffTotalDto staffTotalDto); /** ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -734,6 +734,9 @@ order.setOrderRemark(appPlaceOrderDto.getOrderRemark()); order.setGoodsNum(goodsNum); order.setCreateTime(new Date()); if(appPlaceOrderDto.getNewMemberFlag()!=null&&appPlaceOrderDto.getNewMemberFlag()==1){ order.setNewMemberFlag(1); } // 保存订单 this.save(order); // 更新用户商品类型 @@ -1073,6 +1076,9 @@ order.setOrderRemark(appPlaceActivityDto.getOrderRemark()); order.setGoodsNum(goodsNum); order.setCreateTime(new Date()); if(appPlaceActivityDto.getNewMemberFlag()!=null&&appPlaceActivityDto.getNewMemberFlag()==1){ order.setNewMemberFlag(1); } // 保存订单 this.save(order); // 更新用户商品类型 @@ -2187,14 +2193,6 @@ } else { order.setCloseFlag(0); } //保存订单和服务 this.save(order); orderGoodsService.saveBatch(orderGoodsList); consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList); //减去优惠券 if (StringUtils.isNotBlank(memberCouponSJ.toString())) { remoteCouponService.useMemberCoupon(memberCouponSJ.toString()); } //用户未绑定则绑定商户 Member member = remoteMemberService.getMember(userId).getData(); if (member != null && member.getBindingFlag() != 1) { @@ -2206,7 +2204,17 @@ appMemberBindingDto.setBindingFlag(1); appMemberBindingDto.setBindingType(3); remoteMemberService.updateMemberBinding(appMemberBindingDto); order.setNewMemberFlag(1); } //保存订单和服务 this.save(order); orderGoodsService.saveBatch(orderGoodsList); consumerGoodsService.saveBatchConsumerGoods(consumerGoodsList); //减去优惠券 if (StringUtils.isNotBlank(memberCouponSJ.toString())) { remoteCouponService.useMemberCoupon(memberCouponSJ.toString()); } //更新商户统计 /*ShopTotalChangeDto shopTotalChangeDto = new ShopTotalChangeDto(); shopTotalChangeDto.setShopId(order.getShopId()); @@ -2917,9 +2925,21 @@ */ @Override public MgtTotalDataTotalVo getTotalDataTotal(MgtBaseShopDto mgtBaseShopDto) { //获取人数统计 MgtTotalDataTotalVo mgtTotalDataTotalVo = orderMapper.getTotalDataTotal(mgtBaseShopDto); BigDecimal salesTotal = orderMapper.shopSalesTotal(mgtBaseShopDto); // 获取当月时间 LocalDate currentDate = LocalDate.now(); LocalDate firstDayOfMonth = currentDate.withDayOfMonth(1); LocalDate lastDayOfMonth = currentDate.withDayOfMonth(currentDate.lengthOfMonth()); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String firstDayOfMonthStr = firstDayOfMonth.format(formatter); String lastDayOfMonthStr = lastDayOfMonth.format(formatter); mgtBaseShopDto.setStartDate(firstDayOfMonthStr); mgtBaseShopDto.setEndDate(lastDayOfMonthStr); // MgtTotalDataTotalVo mgtTotalDataTotalVo = orderMapper.getTotalDataTotal(mgtBaseShopDto); mgtTotalDataTotalVo.setSalesTotal(salesTotal); Integer reorderPerson = orderMapper.getReorderPerson(mgtBaseShopDto); mgtTotalDataTotalVo.setReorderPerson(reorderPerson); @@ -3522,9 +3542,7 @@ orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst(); orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond(); } orderDistributionTotalVo.setOrderTotalKey(orderTotalKey); orderDistributionTotalVo.setOrderTotalValue(orderTotalValue); orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue); orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue); } // 返回订单分布总数对象 return orderDistributionTotalVo; @@ -4141,6 +4159,10 @@ @Override public StaffActivityOrderTotalVo getStaffActivityOrderTotal(StaffTotalDto staffTotalDto) { StaffActivityOrderTotalVo staffActivityOrderTotalVo = orderMapper.getStaffActivityOrderTotal(staffTotalDto); StaffActivityOrderTotalVo staffActivityOrderGoodsTotalVo = orderMapper.getStaffActivityOrderGoodsTotal(staffTotalDto); staffActivityOrderTotalVo.setCycleTotal(staffActivityOrderGoodsTotalVo.getCycleTotal()); staffActivityOrderTotalVo.setServiceTotal(staffActivityOrderGoodsTotalVo.getServiceTotal()); staffActivityOrderTotalVo.setExperienceTotal(staffActivityOrderGoodsTotalVo.getExperienceTotal()); return staffActivityOrderTotalVo; } @@ -4168,11 +4190,11 @@ public MerOrderDistributionTotalVo getStaffOrderDistributionTotal(StaffTotalDto staffTotalDto) { MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo(); // 获取订单年龄用户列表 MerTotalDto merTotalDto = new MerTotalDto(); merTotalDto.setShopId(staffTotalDto.getShopId()); List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData(); //MerTotalDto merTotalDto = new MerTotalDto(); //merTotalDto.setShopId(staffTotalDto.getShopId()); //List<MerOrderAgeUserVo> orderAgeUserVoList = remoteMemberService.listOrderAgeUser(merTotalDto).getData(); // 如果订单年龄用户列表不为空 if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) { /*if (orderAgeUserVoList != null && !orderAgeUserVoList.isEmpty()) { // 定义变量 Integer ageType; List<Long> userIdList; @@ -4218,9 +4240,74 @@ orderDistributionTotalVo.setOrderTotalKey(orderTotalKey); orderDistributionTotalVo.setOrderTotalValue(orderTotalValue); orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue); }*/ List<MgtMapTotalPlusVo> mgtMapTotalPlusVoList = orderMapper.listStaffActivityOrderDistributionTotal(staffTotalDto); if (mgtMapTotalPlusVoList != null && !mgtMapTotalPlusVoList.isEmpty()) { String[] orderTotalKey = new String[mgtMapTotalPlusVoList.size()]; Integer[] orderTotalValue = new Integer[mgtMapTotalPlusVoList.size()]; BigDecimal[] orderMoneyValue = new BigDecimal[mgtMapTotalPlusVoList.size()]; MgtMapTotalPlusVo mgtMapTotalPlusVo; for (int i = 0; i < mgtMapTotalPlusVoList.size(); i++) { mgtMapTotalPlusVo = mgtMapTotalPlusVoList.get(i); orderTotalKey[i] = mgtMapTotalPlusVo.getMapKey(); orderTotalValue[i] = mgtMapTotalPlusVo.getMapValueFirst(); orderMoneyValue[i] = mgtMapTotalPlusVo.getMapValueSecond(); } orderDistributionTotalVo = fillOrderTotalKeyAndValuesToRecentFiveDays(orderTotalKey,orderTotalValue,orderMoneyValue); } // 返回订单分布总数对象 return orderDistributionTotalVo; } public MerOrderDistributionTotalVo fillOrderTotalKeyAndValuesToRecentFiveDays(String[] orderTotalKey,Integer[] orderTotalValue,BigDecimal[] orderMoneyValue) { MerOrderDistributionTotalVo orderDistributionTotalVo = new MerOrderDistributionTotalVo(); // 获取当前日期 LocalDate currentDate = LocalDate.now(); // 创建最近五天日期列表 List<String> recentFiveDays = new ArrayList<>(); for (int i = 0; i < 5; i++) { LocalDate date = currentDate.minusDays(i); recentFiveDays.add(date.toString()); } // 创建新的数组 String[] newOrderTotalKey = new String[5]; Integer[] newOrderTotalValue = new Integer[5]; BigDecimal[] newOrderMoneyValue = new BigDecimal[5]; // 遍历最近五天日期列表,并补充数据 for (int i = 0; i < 5; i++) { String day = recentFiveDays.get(i); int index = getIndexInOrderTotalKey(day,orderTotalKey); if (index != -1) { newOrderTotalKey[i] = orderTotalKey[index]; newOrderTotalValue[i] = orderTotalValue[index]; newOrderMoneyValue[i] = orderMoneyValue[index]; } else { newOrderTotalKey[i] = day; newOrderTotalValue[i] = 0; newOrderMoneyValue[i] = BigDecimal.ZERO; } } // 更新属性 orderTotalKey = newOrderTotalKey; orderTotalValue = newOrderTotalValue; orderMoneyValue = newOrderMoneyValue; orderDistributionTotalVo.setOrderTotalKey(orderTotalKey); orderDistributionTotalVo.setOrderTotalValue(orderTotalValue); orderDistributionTotalVo.setOrderMoneyValue(orderMoneyValue); return orderDistributionTotalVo; } private int getIndexInOrderTotalKey(String day,String[] orderTotalKey) { for (int i = 0; i < orderTotalKey.length; i++) { if (orderTotalKey[i].equals(day)) { return i; } } return -1; } @@ -4319,6 +4406,12 @@ */ @Override public StaffActivityDateMemberTotalVo getStaffActivityMemberTotal(StaffTotalDto staffTotalDto) { MerTotalDto merTotalDto = new MerTotalDto(); merTotalDto.setAgeType(staffTotalDto.getAgeType()); if(staffTotalDto.getAgeType()!=null){ List<Long> userIdList = remoteMemberService.listUserIdByAgeType(staffTotalDto.getAgeType()).getData(); staffTotalDto.setUserIdList(userIdList); } // 创建返回对象 StaffActivityDateMemberTotalVo staffActivityDateMemberTotalVo = new StaffActivityDateMemberTotalVo(); // 查询数据库获取数据 ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -998,7 +998,7 @@ COUNT(DISTINCT CASE WHEN og.goods_type = 4 THEN og.goods_id ELSE NULL END) AS goods_type_4_count FROM t_order o JOIN t_order_goods og ON o.order_id = og.order_id WHERE o.del_flag = 0 AND og.del_flag = 0 WHERE o.del_flag = 0 AND og.del_flag = 0 AND o.order_status IN (2,3) <if test="param.shopId != null and param.shopId != ''"> AND o.shop_id = #{param.shopId} </if> @@ -1013,9 +1013,9 @@ </select> <select id="shopSalesTotal" resultType="java.math.BigDecimal"> SELECT IFNULL(SUM(pay_money),0) SELECT IFNULL(SUM(change_receivable_money),0) FROM t_order WHERE del_flag = 0 WHERE del_flag = 0 AND order_status = 3 <if test="param.shopId != null and param.shopId != ''"> AND shop_id = #{param.shopId} </if> @@ -1643,14 +1643,29 @@ <select id="getStaffActivityOrderTotal" resultType="com.ruoyi.order.domain.vo.StaffActivityOrderTotalVo"> SELECT COUNT(DISTINCT toc.order_id) orderTotal, IFNULL(SUM(toc.order_money),0) orderMoney, COUNT(DISTINCT toc.user_id) memberTotal, IFNULL(SUM(CASE WHEN tog.goods_type = 1 THEN 1 ELSE 0 END),0) cycleTotal, IFNULL(SUM(CASE WHEN tog.goods_type = 3 THEN 1 ELSE 0 END),0) experienceTotal, IFNULL(SUM(CASE WHEN tog.goods_type = 2 THEN 1 ELSE 0 END),0) serviceTotal IFNULL(SUM(toc.change_receivable_money),0) orderMoney, COUNT(DISTINCT toc.user_id) memberTotal FROM t_order toc WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2 AND toc.order_status = 3 <if test="param.activityId !=null and param.activityId != ''"> AND toc.activity_id = #{param.activityId} </if> <if test="param.startDate!=null and param.startDate!=''"> AND Date(toc.create_time) >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND Date(toc.create_time) <= #{param.endDate} </if> </select> <select id="getStaffActivityOrderGoodsTotal" resultType="com.ruoyi.order.domain.vo.StaffActivityOrderTotalVo"> SELECT IFNULL(SUM(CASE WHEN tog.goods_type = 1 THEN 1 ELSE 0 END),0) cycleTotal, IFNULL(SUM(CASE WHEN tog.goods_type = 3 THEN 1 ELSE 0 END),0) experienceTotal, IFNULL(SUM(CASE WHEN tog.goods_type = 2 THEN 1 ELSE 0 END),0) serviceTotal FROM t_order toc INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2 WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2 AND toc.order_status = 3 <if test="param.activityId !=null and param.activityId != ''"> AND toc.activity_id = #{param.activityId} </if> @@ -1666,32 +1681,35 @@ SELECT COUNT(toa.user_id) memberTotal, IFNULL(SUM(CASE WHEN tog.goods_type = 1 THEN 1 ELSE 0 END),0) cycleTotal, IFNULL(SUM(CASE WHEN tog.goods_type = 2 THEN 1 ELSE 0 END),0) experienceTotal, IFNULL(SUM(CASE WHEN tog.goods_type = 3 THEN 1 ELSE 0 END),0) serviceTotal IFNULL(SUM(CASE WHEN tog.goods_type = 3 THEN 1 ELSE 0 END),0) experienceTotal, IFNULL(SUM(CASE WHEN tog.goods_type = 2 THEN 1 ELSE 0 END),0) serviceTotal FROM t_order toa INNER JOIN t_order_goods tog ON tog.order_id = toa.order_id WHERE toa.order_id IN (SELECT firstOrder.orderId FROM (SELECT toc.user_id userId, MIN(toc.create_time) createTime, MIN(toc.order_id) orderId FROM t_order toc WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} GROUP BY toc.user_id) AS firstOrder) AND toa.order_from = 2 WHERE toa.order_from = 2 AND toa.order_status IN (2,3) AND toa.new_member_flag = 1 <if test="param.activityId !=null and param.activityId != ''"> AND toa.activity_id = #{param.activityId} </if> <if test="param.startDate!=null and param.startDate!=''"> AND Date(toa.create_time) >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND Date(toa.create_time) <= #{param.endDate} </if> </select> <select id="listStaffActivityOrderDistributionTotal" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo"> SELECT COUNT(order_id) AS mapValueFirst, IFNULL(SUM(order_money),0) AS mapValueSecond FROM t_order WHERE del_flag = 0 AND shop_id = #{shopId} AND order_from = 2 AND user_id IN <foreach collection="userIdList" item="item" open="(" separator="," close=")"> #{item} </foreach> <if test="activityId !=null and activityId != ''"> AND activity_id = #{activityId} DATE(toc.create_time) AS mapKey, COUNT(DISTINCT tog.order_id) AS mapValueFirst, SUM(tog.goods_receivable_money) AS mapValueSecond FROM t_order toc INNER JOIN t_order_goods tog ON toc.order_id = tog.order_id WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2 AND toc.order_status IN (2,3) <if test="param.activityId !=null and param.activityId != ''"> AND toc.activity_id = #{param.activityId} </if> AND toc.create_time >= DATE_SUB(CURDATE(), INTERVAL 5 DAY) GROUP BY mapKey </select> <select id="listStaffOrderTotalGoodsType" resultType="com.ruoyi.order.domain.vo.MgtMapTotalPlusVo"> @@ -1701,7 +1719,7 @@ IFNULL(SUM(tog.goods_total_money),0) AS mapValueSecond FROM t_order toc INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2 WHERE toc.del_flag = 0 AND toc.shop_id = #{param.shopId} AND toc.order_from = 2 AND toc.order_status = 3 <if test="param.activityId !=null and param.activityId != ''"> AND toc.activity_id = #{param.activityId} </if> @@ -1714,16 +1732,18 @@ COUNT(DISTINCT toc.user_id) AS mapValue FROM t_order toc INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id WHERE toc.order_id IN (SELECT firstOrder.orderId FROM (SELECT toa.user_id userId, MIN(toa.create_time) createTime, MIN(toa.order_id) orderId FROM t_order toa WHERE toa.del_flag = 0 AND toa.shop_id = #{param.shopId} GROUP BY toa.user_id) AS firstOrder) AND toc.order_from = 2 WHERE toc.order_from = 2 AND toc.new_member_flag = 1 AND toc.order_status IN (2,3) AND toc.shop_id = #{param.shopId} <if test="param.activityId !=null and param.activityId != ''"> AND toc.activity_id = #{param.activityId} </if> <if test="param.goodsType !=null and param.goodsType != ''"> AND tog.goods_type = #{param.goodsType} </if> <if test="param.startDate!=null and param.startDate!=''"> AND Date(toc.create_time) >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND Date(toc.create_time) <= #{param.endDate} </if> GROUP BY mapKey </select> @@ -1741,6 +1761,18 @@ <if test="param.goodsType !=null and param.goodsType != ''"> AND tog.goods_type = #{param.goodsType} </if> <if test="param.userIdList !=null and param.userIdList.size()>0"> AND toc.user_id IN <foreach collection="param.userIdList" item="item" open="(" separator="," close=")"> #{item} </foreach> </if> <if test="param.startDate!=null and param.startDate!=''"> AND Date(toc.create_time) >= #{param.startDate} </if> <if test="param.endDate!=null and param.endDate!=''"> AND Date(toc.create_time) <= #{param.endDate} </if> GROUP BY mapKey </select> ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/console/ShopController.java
@@ -1,5 +1,6 @@ package com.ruoyi.shop.controller.console; import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingReceiver; import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.ServiceException; @@ -359,4 +360,10 @@ shopService.authShop(); return R.ok(); } @PostMapping("/addProfitSharingReceiver") R authShop(@RequestBody ProfitSharingReceiver profitSharingReceiver){ shopService.addProfitSharingReceiver(profitSharingReceiver); return R.ok(); } } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/controller/management/MgtShopController.java
@@ -80,7 +80,7 @@ } List<MgtShopPageVo> mgtShopPageVoList = shopService.pageMgtShop(page,mgtShopPageDto); ExcelUtil<MgtShopPageVo> util = new ExcelUtil<MgtShopPageVo>(MgtShopPageVo.class); util.exportExcel(response, mgtShopPageVoList, "用户订单列表"); util.exportExcel(response, mgtShopPageVoList, "商户列表"); } @RequestMapping(value = "/createMgtShop", method = RequestMethod.POST) ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/shop/ShopDetail.java
@@ -1,9 +1,9 @@ package com.ruoyi.shop.domain.pojo.shop; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.activerecord.Model; import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -21,7 +21,7 @@ @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("t_shop_detail") @TableName(value = "t_shop_detail") public class ShopDetail extends Model<ShopDetail> { private static final long serialVersionUID = 1L; @@ -30,7 +30,7 @@ * 商户id */ @TableId("shop_id") private Integer shopId; private Long shopId; /** * 删除标记 */ ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/StaffShopInfoGetVo.java
@@ -44,6 +44,9 @@ @ApiModelProperty(value = "商户id") private Long shopId; @ApiModelProperty(value="商店类型1.经销商2.代理商") private Integer shopType; @ApiModelProperty(value="商户名称") private String shopName; ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/StaffShopSimpleTotalVo.java
@@ -13,12 +13,21 @@ @Data public class StaffShopSimpleTotalVo { @ApiModelProperty(value = "总数") @ApiModelProperty(value = "经销商总数") private Integer shopTotal; @ApiModelProperty(value = "准店铺") private Integer closeTotal; @ApiModelProperty(value = "经销商准店铺") private Integer closeShopTotal; @ApiModelProperty(value = "开业中") private Integer openTotal; @ApiModelProperty(value = "经销商开业中") private Integer openShopTotal; @ApiModelProperty(value = "代理商总数") private Integer agencyTotal; @ApiModelProperty(value = "代理商准店铺") private Integer closeAgencyTotal; @ApiModelProperty(value = "代理商开业中") private Integer openAgencyTotal; } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/mapper/shop/ShopMapper.java
@@ -219,7 +219,7 @@ * @param userIdList * @return StaffShopSimpleTotalVo */ StaffShopSimpleTotalVo getStaffSimpleTotal(@Param("userIdList")List<Long> userIdList); StaffShopSimpleTotalVo getStaffSimpleTotal(@Param("shopType")Integer shopType,@Param("userIdList")List<Long> userIdList); /** * @description 获取员工端商户数量统计 ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsResult; import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsStatusResult; import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingReceiver; import com.github.binarywang.wxpay.exception.WxPayException; import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.exception.ServiceException; @@ -129,6 +130,8 @@ @Resource private RemoteUserService remoteUserService; /** * 获取商户详情 @@ -798,17 +801,28 @@ mgtBasePlatformDto.setUserIdList(userIds); shopIds = shopMapper.listShopIdByTotal(mgtBasePlatformDto); Shop shop = this.getShopByBelongUserId(userId); shopIds.add(shop.getShopId()); userIds.add(userId); if(shop!=null){ shopIds.add(shop.getShopId()); userIds.add(userId); } }else { //普通员工查询商户归属的shopId Shop shop = this.getShopByBelongUserId(userId); shopIds.add(shop.getShopId()); } //分别查询 StaffHomeShopTotalVo staffHomeShopTotalVo = shopMapper.getStaffHomeTotal(userIds); Integer shopTaskCount = shopTaskService.getShopIngTotal(shopIds); StaffHomeShopTotalVo staffHomeShopTotalVo = new StaffHomeShopTotalVo(); if(userIds!=null&&!userIds.isEmpty()){ staffHomeShopTotalVo = shopMapper.getStaffHomeTotal(userIds); }else{ staffHomeShopTotalVo.setShopTotal(0); staffHomeShopTotalVo.setAgencyTotal(0); staffHomeShopTotalVo.setDealerTotal(0); } Integer shopTaskCount = 0; if(shopIds!=null&&!shopIds.isEmpty()){ shopTaskService.getShopIngTotal(shopIds); } staffHomeShopTotalVo.setFollowMember(0); staffHomeShopTotalVo.setNewMember(0); staffHomeShopTotalVo.setShopTask(shopTaskCount); @@ -1011,7 +1025,7 @@ Shop shop = this.getByShopId(shopAuthentication.getShopId()); if(mgtShopAuthDto.getBlBusinessFoeverFlag()!=null&&mgtShopAuthDto.getBlBusinessFoeverFlag()==1){ mgtShopAuthDto.setBlBusinessDeanline(mgtShopAuthDto.getBlBusinessStartTime()+",长期"); mgtShopAuthDto.setBlBusinessDeanline("长期"); } if(mgtShopAuthDto.getLpIcForeverFlag()!=null&&mgtShopAuthDto.getLpIcForeverFlag()==1){ mgtShopAuthDto.setLpIcEndDate("长期"); @@ -1027,7 +1041,7 @@ applymentsResult = wechatPayUtils.ecommerceApply(shopAuthentication,applyNumber,shop); } catch (Exception e) { log.debug("-----"+shop.getShopId()+":进件异常-----"); throw new RuntimeException(e); throw new ServiceException(e.getMessage()); } shopAuthentication.setAuditStatus(3); shopAuthenticationService.saveOrUpdate(shopAuthentication); @@ -1264,7 +1278,12 @@ }else { userIdList.add(userId); } return shopMapper.getStaffSimpleTotal(userIdList); StaffShopSimpleTotalVo shopTotal = shopMapper.getStaffSimpleTotal(1,userIdList); StaffShopSimpleTotalVo agencyTotal = shopMapper.getStaffSimpleTotal(2,userIdList); shopTotal.setAgencyTotal(agencyTotal.getShopTotal()); shopTotal.setOpenAgencyTotal(agencyTotal.getOpenShopTotal()); shopTotal.setCloseAgencyTotal(agencyTotal.getCloseAgencyTotal()); return shopTotal; } /** @@ -1388,6 +1407,8 @@ List<ExtendContactsVo> extendContactsVoList = staffShopECEditDto.getExtendContactsVoList(); if(extendContactsVoList!=null&&!extendContactsVoList.isEmpty()){ extendContacts = JSON.toJSONString(extendContactsVoList); }else{ extendContacts = ""; } shop.setExtendContacts(extendContacts); shop.setShopId(staffShopECEditDto.getShopId()); @@ -1517,7 +1538,24 @@ public StaffShopDetailVo getShopDetail(Long shopId){ ShopDetail shopDetail = shopDetailService.getById(shopId); StaffShopDetailVo staffShopDetailVo = new StaffShopDetailVo(); BeanUtils.copyProperties(shopDetail, staffShopDetailVo); if(shopDetail!=null){ BeanUtils.copyProperties(shopDetail, staffShopDetailVo); //处理联系人 String customerName = shopDetail.getCustomerName(); String customerMobile = shopDetail.getCustomerMobile(); List<StaffCustomerDto> staffCustomerDtoList = new ArrayList<>(); String[] customerNameArr = customerName.split(","); String[] customerMobileArr = customerMobile.split(","); staffShopDetailVo.setContactName(customerNameArr[0]); StaffCustomerDto staffCustomerDto; for(int i=0;i<customerNameArr.length;i++){ staffCustomerDto = new StaffCustomerDto(); staffCustomerDto.setCustomerName(customerNameArr[i]); staffCustomerDto.setCustomerMobile(customerMobileArr[i]); staffCustomerDtoList.add(staffCustomerDto); } staffShopDetailVo.setStaffCustomerDtoList(staffCustomerDtoList); } //归属客户 Shop shop = this.getByShopId(shopId); Long belongUserId = shop.getBelongUserId(); @@ -1532,21 +1570,23 @@ if(shopTask!=null){ staffShopDetailVo.setNextTaskDate(shopTask.getTaskDate()); } //处理联系人 String customerName = shopDetail.getCustomerName(); String customerMobile = shopDetail.getCustomerMobile(); List<StaffCustomerDto> staffCustomerDtoList = new ArrayList<>(); String[] customerNameArr = customerName.split(","); String[] customerMobileArr = customerMobile.split(","); staffShopDetailVo.setContactName(customerNameArr[0]); StaffCustomerDto staffCustomerDto; for(int i=0;i<customerNameArr.length;i++){ staffCustomerDto = new StaffCustomerDto(); staffCustomerDto.setCustomerName(customerNameArr[i]); staffCustomerDto.setCustomerMobile(customerMobileArr[i]); staffCustomerDtoList.add(staffCustomerDto); } staffShopDetailVo.setStaffCustomerDtoList(staffCustomerDtoList); return staffShopDetailVo; } /** * @description * @author jqs * @date 2023/8/23 9:44 * @param * @return void */ @Override public void addProfitSharingReceiver(ProfitSharingReceiver profitSharingReceiver){ try { ProfitSharingReceiver result = wechatPayUtils.addProfitSharingReceiver(profitSharingReceiver); } catch (WxPayException e) { throw new RuntimeException(e); } } } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/shop/ShopService.java
@@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingReceiver; import com.github.binarywang.wxpay.exception.WxPayException; import com.ruoyi.shop.domain.dto.*; import com.ruoyi.shop.domain.vo.*; @@ -368,4 +369,13 @@ * @return StaffShopDetailVo */ StaffShopDetailVo getShopDetail(Long shopId); /** * @description * @author jqs * @date 2023/8/23 9:44 * @param * @return void */ void addProfitSharingReceiver(ProfitSharingReceiver profitSharingReceiver); } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/util/WechatPayUtils.java
@@ -5,6 +5,7 @@ import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsResult; import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsStatusResult; import com.github.binarywang.wxpay.bean.media.ImageUploadResult; import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingReceiver; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.service.EcommerceService; import com.github.binarywang.wxpay.service.MerchantMediaService; @@ -78,7 +79,9 @@ lpIcBackIO.close(); id_card_info.setIdCardName(shopAuthentication.getLpCorporateName()); id_card_info.setIdCardNumber(shopAuthentication.getLpIdCard()); id_card_info.setIdCardAddress(shopAuthentication.getLpIdAddress()); if(shopAuthentication.getMainType()==2){ id_card_info.setIdCardAddress(shopAuthentication.getLpIdAddress()); } id_card_info.setIdCardValidTimeBegin(shopAuthentication.getLpIcStartDate()); id_card_info.setIdCardValidTime(shopAuthentication.getLpIcEndDate()); request.setIdCardInfo(id_card_info); @@ -154,4 +157,11 @@ return wxService.getEcommerceService().queryApplyStatusByApplymentId(applymentId); } public ProfitSharingReceiver addProfitSharingReceiver(ProfitSharingReceiver profitSharingReceiver) throws WxPayException { profitSharingReceiver.setAppid("wxb7f0ea286fc4e535"); profitSharingReceiver.setType("MERCHANT_ID"); profitSharingReceiver.setRelationType("SERVICE_PROVIDER"); ProfitSharingReceiver result = wxService.getProfitSharingV3Service().addProfitSharingReceiver(profitSharingReceiver); return result; } } ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
@@ -871,10 +871,10 @@ <select id="getStaffSimpleTotal" resultType="com.ruoyi.shop.domain.vo.StaffShopSimpleTotalVo"> SELECT COUNT(shop_id) shopTotal, SUM(CASE shop_status WHEN 0 THEN 1 WHEN 2 THEN 1 WHEN 3 THEN 1 ELSE 0 END) closeTotal, SUM(CASE shop_status WHEN 1 THEN 1 ELSE 0 END) openTotal SUM(CASE shop_status WHEN 0 THEN 1 WHEN 2 THEN 1 WHEN 3 THEN 1 ELSE 0 END) closeShopTotal, SUM(CASE shop_status WHEN 1 THEN 1 ELSE 0 END) openShopTotal FROM t_shop ts WHERE ts.del_flag = 0 WHERE ts.del_flag = 0 AND ts.shop_type = #{shopType} AND ts.belong_user_id IN <foreach item="id" collection="userIdList" open="(" separator="," close=")"> #{id} @@ -903,7 +903,7 @@ extend_contacts = null, </if> <if test="updateTime != null">update_time = #{updateTime},</if> <if test="updateUserId != null">update_user_id = #{updateUserId},</if> <if test="updateUserId != null">update_user_id = #{updateUserId}</if> WHERE shop_id = #{shopId} </update> ruoyi-modules/ruoyi-shop/src/main/resources/mapper/task/ShopTaskMapper.xml
@@ -114,7 +114,7 @@ FROM t_shop_task tst LEFT JOIN t_shop_task_record tstr ON tstr.task_id = tst.task_id AND tstr.id = (SELECT MAX(id) FROM t_shop_task_record WHERE task_id = tst.task_id) WHERE tst.del_flag = 0 AND tst.shop_id = #{param.shopId} <if test="param.taskStatus!=null and param.taskStatus != ''"> <if test="param.taskStatus!=null"> AND tst.task_status = #{param.taskStatus} </if> ORDER BY tst.task_status ASC ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysSimpleDept.java
New file @@ -0,0 +1,11 @@ package com.ruoyi.system.domain.vo; /** * @ClassName SysSimpleDept * @Description TODO * @Author jqs * @Date 2023/8/23 14:47 * @Version 1.0 */ public class SysSimpleDept { } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysStaffServiceImpl.java
@@ -300,8 +300,19 @@ StringBuilder failureMsg = new StringBuilder(); SysStaff sysStaff; Date nowTime = new Date(); String mobile; String userName; String department; int lastIndex; for (MgtSysStaffImportDto entity : staffImportDtoList) { try { mobile = entity.getMobile(); userName = entity.getUserName(); department = entity.getDepartment(); lastIndex = department.lastIndexOf("/"); department = department.substring(lastIndex + 1); /*tagName = entity.getTagName(); sysTagSame = null; // 验证是否存在这个用户 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/sys/SysDeptServiceImpl.java
@@ -396,4 +396,6 @@ public SysDept getByWxDeptId(Long wxDeptId){ return deptMapper.getByWxDeptId(wxDeptId); } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/sys/ISysDeptService.java
@@ -131,4 +131,5 @@ * @return SysDept */ SysDept getByWxDeptId(Long wxDeptId); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/util/QiYeUtils.java
@@ -3,7 +3,6 @@ import org.apache.http.HttpResponse; import org.apache.http.util.EntityUtils; import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; @@ -18,30 +17,7 @@ private final static String ACCESS_TOKEN_HOST = "https://qyapi.weixin.qq.com/cgi-bin/"; public static void main(String[] args) throws Exception { Integer manTotal = 0; Integer womenTotal = 0; Integer personTotal = manTotal + womenTotal; BigDecimal manTotalBig = new BigDecimal(manTotal); BigDecimal personTotalBig = new BigDecimal(personTotal); BigDecimal bigTen = new BigDecimal("100.00"); BigDecimal menPercent = new BigDecimal("100.00"); BigDecimal womenPercent = new BigDecimal("100.00"); if(manTotal==0&&womenTotal==0){ menPercent = new BigDecimal("50.00"); womenPercent = new BigDecimal("50.00"); }else if(manTotal==0&&womenTotal>0){ menPercent = new BigDecimal("0.00"); womenPercent = new BigDecimal("100.00"); }else if(manTotal>0&&womenTotal==0){ menPercent = new BigDecimal("100.00"); womenPercent = new BigDecimal("0.00"); }else{ menPercent = manTotalBig.divide(personTotalBig,2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")); womenPercent = bigTen.subtract(menPercent); } System.out.println(menPercent+"-"+womenPercent); } public static String getAccessTokenByQY() throws Exception { String host = ACCESS_TOKEN_HOST + "gettoken?corpid=ww11400938eb1b91bc&corpsecret=-wuQ2EBxNT9BJa40LdpFqyxI_8RqrZTCUNiabzBasi8";