ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/config/OneClinkSyncing.java
@@ -5,11 +5,13 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.io.Serializable; import java.time.LocalDateTime; import java.util.Date; import java.util.List; @@ -84,13 +86,13 @@ private Integer shopNum = 0; @TableField("create_time") private Date createTime; private LocalDateTime createTime; @TableField("create_user_id") private Long createUserId; @TableField("update_time") private Date updateTime; private LocalDateTime updateTime; @TableField("update_user_id") private Long updateUserId; @@ -99,7 +101,8 @@ * 最近一次同步时间 */ @TableField("syncing_time") private Date syncingTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime syncingTime; /** * 最近一次同步操作人 @@ -113,7 +116,9 @@ @TableField("shop_ids") private String shopIds; @TableField(exist = false) private List<Long> shopIdList; @TableField(exist = false) private Long userId; @Override ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/vo/StaticsShopMgtGoodsVO.java
New file @@ -0,0 +1,21 @@ package com.ruoyi.system.api.domain.vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @Data public class StaticsShopMgtGoodsVO { @ApiModelProperty(value = "商品总数") private Integer goodsNum; @ApiModelProperty(value = "总销量") private Integer goodsSellNum; @ApiModelProperty(value = "总销售额") private BigDecimal goodsSellCount; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteOrderFallbackFactory.java
@@ -88,6 +88,12 @@ } @Override public R<StaticsShopMgtGoodsVO> getGoodsSellStatic(List<String> orderIdList) { return R.fail("获取商品售卖统计失败:" + throwable.getMessage()); } @Override public R<MgtBulletinBoardVo> boardOrderTotal(BoardMemberTotalDto boardMemberTotalDto) { return R.fail(throwable.getMessage()); } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/service/RemoteOrderService.java
@@ -118,4 +118,13 @@ */ @PostMapping("/order/getActivityOrderGoods") R<List<String>> getActivityOrderGoods(@RequestBody String activityId); /** * 获取商品售卖统计 * @param orderIdList * @return */ @PostMapping("/order/getGoodsSellStatic") R<StaticsShopMgtGoodsVO> getGoodsSellStatic(@RequestBody List<String> orderIdList); } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsController.java
@@ -7,13 +7,11 @@ import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.goods.domain.dto.*; import com.ruoyi.goods.domain.vo.MgtGoodsEditInfoVo; import com.ruoyi.goods.domain.vo.MgtGoodsPageVo; import com.ruoyi.goods.domain.vo.MgtGoodsTotalVo; import com.ruoyi.goods.domain.vo.PageShopMgtGoodsVO; import com.ruoyi.goods.domain.vo.*; import com.ruoyi.goods.service.goods.GoodsService; import com.ruoyi.system.api.domain.dto.MgtBaseGetDto; import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo; import com.ruoyi.system.api.domain.vo.StaticsShopMgtGoodsVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.validation.annotation.Validated; @@ -144,8 +142,28 @@ return R.ok(page.setRecords(pageShopMgtGoods)); } @RequestMapping(value = "/exportShopMgtGoods", method = RequestMethod.POST) @ApiOperation(value = "商品信息-分页获取门店内商品信息-导出【2.0】",tags = "管理台商户相关接口") public void exportShopMgtGoods(@RequestBody PageShopMgtGoodsDTO pageShopMgtGoodsDTO, HttpServletResponse response) { Page<PageShopMgtGoodsVO> page = new Page<>(); if(pageShopMgtGoodsDTO.getPageSize() > 5000){ page.setSize(5000); page.setCurrent(1); }else{ page.setSize(pageShopMgtGoodsDTO.getPageSize()); page.setCurrent(pageShopMgtGoodsDTO.getPageNum()); } List<PageShopMgtGoodsVO> pageShopMgtGoods = goodsService.pageShopMgtGoods(page,pageShopMgtGoodsDTO); ExcelUtil<PageShopMgtGoodsVO> util = new ExcelUtil<PageShopMgtGoodsVO>(PageShopMgtGoodsVO.class); util.exportExcel(response, pageShopMgtGoods, "商品信息"); } @RequestMapping(value = "/staticsShopMgtGoods", method = RequestMethod.POST) @ApiOperation(value = "商品信息-获取门店内商品信息统计汇总【2.0】",tags = "管理台商户相关接口") public R<StaticsShopMgtGoodsVO> staticsShopMgtGoods(@RequestBody PageShopMgtGoodsDTO pageShopMgtGoodsDTO) { return R.ok(goodsService.staticsShopMgtGoods(pageShopMgtGoodsDTO)); } @RequestMapping(value = "/updateGoodsPrice", method = RequestMethod.POST) @Log(title = "商品管理", businessType = BusinessType.UPDATE,operContent = "修改门店内商品价格") @ApiOperation(value = "商品信息-修改价格【2.0】",tags = "管理台商户相关接口") public R<Void> updateGoodsPrice(@RequestBody UpdateGoodsPriceDTO updateGoodsPriceDTO) { return goodsService.updateGoodsPrice(updateGoodsPriceDTO); ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtLotteryEventController.java
@@ -16,7 +16,6 @@ import javax.annotation.Resource; import javax.validation.Valid; import java.util.Collections; import java.util.List; /** ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/vo/MgtLotteryEventDetailVO.java
@@ -2,8 +2,6 @@ import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.goods.api.domain.TLotteryEventPrize; import com.ruoyi.goods.domain.dto.MgtLotteryEventPrizeDTO; import com.ruoyi.goods.domain.dto.MgtLotteryEventQuestionDTO; import io.swagger.annotations.ApiModelProperty; import lombok.Data; ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/goods/GoodsMapper.java
@@ -161,4 +161,6 @@ List<String> listGoodsNameByGoodsClass(@Param("classId") Long classId); List<PageShopMgtGoodsVO> pageShopMgtGoods(Page<PageShopMgtGoodsVO> page,@Param("dto") PageShopMgtGoodsDTO dto); List<String> staticsShopMgtGoods(@Param("dto") PageShopMgtGoodsDTO pageShopMgtGoodsDTO); } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/goods/GoodsService.java
@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo; import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo; import com.ruoyi.system.api.domain.vo.StaticsShopMgtGoodsVO; import java.util.List; @@ -230,4 +231,6 @@ * @return */ R<Void> updateGoodsPrice(UpdateGoodsPriceDTO updateGoodsPriceDTO); StaticsShopMgtGoodsVO staticsShopMgtGoods(PageShopMgtGoodsDTO pageShopMgtGoodsDTO); } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/goods/GoodsServiceImpl.java
@@ -36,15 +36,15 @@ import com.ruoyi.system.api.domain.poji.sys.SysUser; import com.ruoyi.system.api.domain.vo.MerGoodsPriceListVo; import com.ruoyi.system.api.domain.vo.MgtSelectGoodsPageVo; import com.ruoyi.system.api.domain.vo.ShopRelUserVo; import com.ruoyi.system.api.domain.vo.StaticsShopMgtGoodsVO; import com.ruoyi.system.api.service.RemoteConfigService; import com.ruoyi.system.api.service.RemoteOrderService; import com.ruoyi.system.api.service.RemoteShopService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -768,7 +768,34 @@ return list; } @Resource private RemoteOrderService remoteOrderService; @Override public StaticsShopMgtGoodsVO staticsShopMgtGoods(PageShopMgtGoodsDTO pageShopMgtGoodsDTO) { StaticsShopMgtGoodsVO vo = new StaticsShopMgtGoodsVO(); //1.查找门店 Shop shop = remoteShopService.getShop(pageShopMgtGoodsDTO.getShopId()).getData(); if (null == shop || shop.getDelFlag() != 0 || shop.getShopStatus() == -1) { return vo; } List<Shop> shops = new ArrayList<>(); //2.判断门店是否经销商 if (shop.getShopType()==1){ //经销商 获取下级-加盟商ids shops = remoteShopService.getFranchiseeIdsBYDealerId(shop.getShopId()); } //将该门店加入 shops.add(shop); List<Long> shopIds = shops.stream().map(Shop::getShopId).collect(Collectors.toList()); //查询信息 pageShopMgtGoodsDTO.setShopIds(shopIds); //3.根据shopId查询商品ids List<String> goodsId= goodsMapper.staticsShopMgtGoods(pageShopMgtGoodsDTO); //查询商品销量 销售额 return remoteOrderService.getGoodsSellStatic(goodsId).getData(); } @Override public R<Void> updateGoodsPrice(UpdateGoodsPriceDTO updateGoodsPriceDTO) { //判断当前登录人员类型 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/LotteryEventPrizeServiceImpl.java
@@ -6,7 +6,6 @@ import com.ruoyi.goods.service.lottery.ILotteryEventPrizeService; import org.springframework.stereotype.Service; import java.util.Collections; import java.util.List; /** ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/lottery/UserLotteryEventQuestionsAnswersServiceImpl.java
@@ -3,19 +3,16 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.goods.api.domain.TLotteryEvent; import com.ruoyi.goods.api.domain.TLotteryEventQuestionsAnswers; import com.ruoyi.goods.api.domain.TUserLotteryEventQuestionsAnswers; import com.ruoyi.goods.domain.vo.MgtUserAnswersPageVO; import com.ruoyi.goods.mapper.lottery.UserLotteryEventQuestionsAnswersMapper; import com.ruoyi.goods.service.lottery.ILotteryEventQuestionsAnswersService; import com.ruoyi.goods.service.lottery.ILotteryEventService; import com.ruoyi.goods.service.lottery.IUserLotteryEventQuestionsAnswersService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.Collections; import java.util.List; ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsMapper.xml
@@ -579,4 +579,36 @@ ORDER BY tg.create_time DESC </select> <select id="staticsShopMgtGoods" resultType="java.lang.String"> select tg.goods_id from t_goods tg LEFT JOIN t_shop_goods tsg on tg.goods_id = tsg.goods_id and tsg.del_flag = 0 WHERE tg.del_flag = 0 <if test="dto.goodsType != null and dto.goodsType != ''"> AND tg.goods_type = #{dto.goodsType} </if> <if test="dto.goodsClassId != null and dto.goodsClassId != ''"> AND tg.goods_class_id = #{dto.goodsClassId} </if> <if test="dto.createStartTime!=null and dto.createStartTime != ''"> AND Date(tg.create_time) >= #{dto.createStartTime} </if> <if test="dto.createEndTime!=null and dto.createEndTime != ''"> AND Date(tg.create_time) <= #{dto.createEndTime} </if> <if test="dto.goodsName != null and dto.goodsName != ''"> AND tg.goods_name LIKE CONCAT('%',#{dto.goodsName},'%') </if> <if test="dto.goodsStatus != null and dto.goodsStatus != ''"> AND tg.goods_status = #{dto.goodsStatus} </if> <if test="dto.shopIds != null and dto.shopIds.size() > 0"> AND tsg.shop_id IN <foreach collection="param.shopIds" item="item" open="(" separator="," close=")"> #{item} </foreach> </if> </select> </mapper> ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/concole/OrderController.java
@@ -187,4 +187,16 @@ List<String> activityOrderGoods = orderService.getActivityOrderGoods(activityId); return R.ok(activityOrderGoods); } /** * 获取商品售卖统计 * @param goodsIdList * @return */ @PostMapping("/order/getGoodsSellStatic") R<StaticsShopMgtGoodsVO> getGoodsSellStatic(@RequestBody List<String> goodsIdList){ StaticsShopMgtGoodsVO vo = orderService.getGoodsSellStatic(goodsIdList); vo.setGoodsNum(goodsIdList.size()); return R.ok(vo); } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/order/OrderGoodsMapper.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.order.domain.vo.AppUserOrderGoodsPageVo; import com.ruoyi.order.domain.vo.MgtOrderGoodsDetailVo; import com.ruoyi.system.api.domain.vo.StaticsShopMgtGoodsVO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -34,4 +35,5 @@ */ List<MgtOrderGoodsDetailVo> listMgtVoByOrderId(@Param("orderId")String orderId); StaticsShopMgtGoodsVO getGoodsSellStatic(@Param("goodsIdList")List<String> goodsIdList); } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderGoodsServiceImpl.java
@@ -8,6 +8,7 @@ import com.ruoyi.order.domain.vo.MgtOrderGoodsDetailVo; import com.ruoyi.order.mapper.order.OrderGoodsMapper; import com.ruoyi.order.service.order.OrderGoodsService; import com.ruoyi.system.api.domain.vo.StaticsShopMgtGoodsVO; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -66,4 +67,9 @@ queryWrapper.eq(OrderGoods::getOrderId,orderId); return this.list(queryWrapper); } @Override public StaticsShopMgtGoodsVO getGoodsSellStatic(List<String> goodsIdList) { return orderGoodsMapper.getGoodsSellStatic(goodsIdList); } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -72,7 +72,6 @@ import com.ruoyi.system.api.model.QwH5LoginVo; import com.ruoyi.system.api.model.QwUserDetailDto; import com.ruoyi.system.api.service.*; import io.seata.spring.annotation.GlobalTransactional; import lombok.extern.log4j.Log4j2; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; @@ -6881,4 +6880,9 @@ vo = orderMapper.getPlTotalThirdOrderStatics(mgtBasePlatformDto); return vo; } @Override public StaticsShopMgtGoodsVO getGoodsSellStatic(List<String> goodsIdList) { return orderGoodsService.getGoodsSellStatic(goodsIdList); } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderGoodsService.java
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.order.domain.vo.AppUserOrderGoodsPageVo; import com.ruoyi.order.domain.vo.MgtOrderGoodsDetailVo; import com.ruoyi.system.api.domain.vo.StaticsShopMgtGoodsVO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -43,4 +45,6 @@ * @return List<OrderGoods> */ List<OrderGoods> listByOrderId(String orderId); StaticsShopMgtGoodsVO getGoodsSellStatic(@Param("goodsIdList") List<String> goodsIdList); } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -645,4 +645,11 @@ * @return */ MgtPlTotalThirdOrderStaticsVO getPlTotalThirdOrderStatics(MgtBasePlatformDto mgtBasePlatformDto); /** * 获取商品售卖统计 * @param goodsIdList * @return */ StaticsShopMgtGoodsVO getGoodsSellStatic(List<String> goodsIdList); } ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderGoodsMapper.xml
@@ -136,4 +136,21 @@ INNER JOIN t_order_goods tog ON tog.order_id = toc.order_id WHERE toc.del_flag = 0 AND toc.order_id = #{orderId} </select> <select id="getGoodsSellStatic" resultType="com.ruoyi.system.api.domain.vo.StaticsShopMgtGoodsVO"> SELECT SUM(og.buy_num) AS total_sales_volume, SUM(og.buy_num * og.goods_price) AS total_sales_amount FROM t_order_goods og JOIN t_order o ON og.order_id = o.order_id WHERE og.goods_id IN <foreach collection="goodsIds" item="goodsId" open="(" separator="," close=")"> #{goodsId} </foreach> AND o.del_flag = 0 AND o.order_status IN (2, 3) <!-- 只统计已支付和已完成订单 --> AND og.del_flag = 0 </select> </mapper> ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtOneClinkSyncingPageDTO.java
@@ -3,6 +3,9 @@ import com.ruoyi.system.api.domain.dto.MgtPageDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.cglib.core.Local; import java.time.LocalDateTime; @Data public class MgtOneClinkSyncingPageDTO { @@ -15,8 +18,8 @@ private String syncingName; @ApiModelProperty(value = "操作同步时间范围-开始时间") private String syncingStartTime; private LocalDateTime syncingStartTime; @ApiModelProperty(value = "操作同步时间范围-结束时间") private String syncingEndTime; private LocalDateTime syncingEndTime; } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MgtOneClinkSyncPageVO.java
@@ -1,8 +1,10 @@ package com.ruoyi.system.domain.vo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; import java.util.Date; @Data @@ -22,5 +24,6 @@ @ApiModelProperty(value = "同步门店数") private Integer shopNum; @ApiModelProperty(value = "最近一次同步时间") private Date syncingTime; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime syncingTime; } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/config/OneClinkSyncingServiceImpl.java
@@ -18,6 +18,7 @@ import com.ruoyi.system.service.config.OneClinkSyncingService; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.Arrays; import java.util.Date; import java.util.List; @@ -55,11 +56,11 @@ if(oneClinkSyncing.getDelFlag() != 0 ){ return R.fail("该一键同步不存在"); } oneClinkSyncing.setUpdateTime(new Date()); oneClinkSyncing.setUpdateTime(LocalDateTime.now()); oneClinkSyncing.setUpdateUserId(dto.getUserId()); }else { oneClinkSyncing.setCreateUserId(dto.getUserId()); oneClinkSyncing.setCreateTime(new Date()); oneClinkSyncing.setCreateTime(LocalDateTime.now()); } oneClinkSyncing.setSyncingName(dto.getSyncingName()); oneClinkSyncing.setCoverUrl(dto.getCoverUrl()); @@ -107,7 +108,7 @@ return R.ok(); } oneClinkSyncing.setDelFlag(1); oneClinkSyncing.setUpdateTime(new Date()); oneClinkSyncing.setUpdateTime(LocalDateTime.now()); oneClinkSyncing.setUpdateUserId(SecurityUtils.getUserId()); this.updateById(oneClinkSyncing); return R.ok(); @@ -126,7 +127,7 @@ R r = remoteShopService.updateShopByOneClinkSyncing(oneClinkSyncing); oneClinkSyncing.setSyncingTime(new Date()); oneClinkSyncing.setSyncingTime(LocalDateTime.now()); oneClinkSyncing.setSyncingUserId(SecurityUtils.getUserId()); this.updateById(oneClinkSyncing); return R.ok(); ruoyi-modules/ruoyi-system/src/main/resources/mapper/config/OneClinkSyncingMapper.xml
@@ -17,5 +17,14 @@ t_one_clink_syncing where del_flag=0 <if test="null != dto.syncingName and ''!= dto.syncingName"> and syncing_name like concat('%',#{dto.syncingName},'%') </if> <if test="dto.syncingStartTime!=null and dto.syncingStartTime != ''"> AND syncing_time >= #{dto.syncingStartTime} </if> <if test="dto.createEndTime!=null and dto.createEndTime != ''"> AND syncing_time <= #{dto.syncingEndTime} </if> </select> </mapper>