ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/AppUser.java
@@ -171,6 +171,22 @@ @TableField("total_distribution_amount") private BigDecimal totalDistributionAmount; @ApiModelProperty(value = "拉新人积分总数") @TableField("total_invite_point") private Integer totalInvitePoint; @ApiModelProperty(value = "注册积分总数") @TableField("total_register_point") private Integer totalRegisterPoint; @ApiModelProperty(value = "做工积分总数") @TableField("total_work_point") private Integer totalWorkPoint; @ApiModelProperty(value = "业绩积分总数") @TableField("total_performance_point") private Integer totalPerformancePoint; @ApiModelProperty(value = "剩余积分") @TableField("lave_point") ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/Goods.java
@@ -139,6 +139,12 @@ @ApiModelProperty(value = "地区价格") private List<GoodsArea> goodsAreaList; @TableField(exist = false) private String categoryName; @TableField(exist = false) private Integer showStatus; public String getIdStr() { return String.valueOf(id); } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/SeckillActivityInfo.java
@@ -73,5 +73,8 @@ @TableField(exist = false) private List<GoodsSeckill> goodsSeckills; @TableField(exist = false) private Goods goods; } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopBalanceStatement.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.core.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -36,8 +37,9 @@ @TableField("shop_id") private Integer shopId; @ApiModelProperty(value = "变动类型(1=返佣,2=提现)") @ApiModelProperty(value = "变动类型(1=门店分佣,2=下级门店分佣,3=门店服务费)") @TableField("type") @Excel(name = "变更类型",readConverterExp = "1=门店分佣,2=下级门店分佣,3=门店服务费") private Integer type; @ApiModelProperty(value = "历史余额") @@ -48,8 +50,14 @@ @TableField("variable_amount") private BigDecimal variableAmount; @ApiModelProperty(value = "变动后余额") @TableField("balance") @Excel(name = "变更后数量") private BigDecimal balance; @ApiModelProperty(value = "变动时间") @TableField("create_time") @Excel(name = "变更时间",dateFormat = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @ApiModelProperty(value = "变动用户id") @@ -60,5 +68,18 @@ @TableField("object_id") private Long objectId; @ApiModelProperty(value = "门店名称") @TableField(exist = false) @Excel(name = "门店名称") private String shopName; @ApiModelProperty(value = "店长名称") @TableField(exist = false) @Excel(name = "店长名称") private String shopManagerName; @ApiModelProperty(value = "联系电话") @TableField(exist = false) @Excel(name = "联系电话") private String phone; } ruoyi-api/ruoyi-api-other/src/main/java/com/ruoyi/other/api/domain/ShopWithdraw.java
@@ -78,5 +78,9 @@ @TableField("create_user_id") private Long createUserId; @ApiModelProperty(value = "门店名称") @TableField(exist = false) private String shopName; } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/BalanceChangeRecordController.java
@@ -3,17 +3,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.api.model.BalanceChangeRecord; import com.ruoyi.account.api.model.UserClickLog; import com.ruoyi.account.api.model.UserPoint; import com.ruoyi.account.dto.BalanceQuery; import com.ruoyi.account.dto.UserCancelQuery; import com.ruoyi.account.excel.UserPointEx; import com.ruoyi.account.excel.BalanceChangeRecordEX; import com.ruoyi.account.service.BalanceChangeRecordService; import com.ruoyi.account.vo.CommissionStatistics; import com.ruoyi.account.vo.UserPointStatistics; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.poi.ExcelUtil; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -52,77 +49,63 @@ return R.ok(balanceChangeRecordService.pageList(agentQuery)); } // /** // * 用户分佣统计 // */ // @GetMapping("/commissionStatistics") // @ApiOperation(value = "用户分佣统计", tags = "管理后台-财务统计-用户分佣统计") // public R<CommissionStatistics> commissionStatistics(UserPoint userPoint) { // userPoint.setType(2); // IPage<UserPoint> userPointPage = userPointService.getUserPointPage(Page.of(userPoint.getPageNum(), userPoint.getPageSize()), userPoint); // UserPointStatistics statistics = userPointService.getStatistics(userPoint); // CommissionStatistics commissionStatistics = new CommissionStatistics(); // commissionStatistics.setStatistics(statistics); // commissionStatistics.setUserPointPage(userPointPage); // return R.ok(commissionStatistics); // } /** * 用户分佣统计 */ @GetMapping("/commissionStatistics") @ApiOperation(value = "用户分佣统计", tags = "管理后台-财务统计-用户分佣统计") public R<CommissionStatistics> commissionStatistics(@ApiParam("页码") @RequestParam Integer pageNum, @ApiParam("每一页数据大小") Integer pageSize, BalanceChangeRecord balanceChangeRecord) { CommissionStatistics commissionStatistics1 = balanceChangeRecordService.commissionStatistics(Page.of(pageNum, pageSize), balanceChangeRecord); return R.ok(commissionStatistics1); } // // /** // * 导出用户分佣统计 // */ // @GetMapping("/commissionExport") // @ApiOperation(value = "用户分佣统计导出", tags = "管理后台-财务统计-用户分佣统计") // public void commissionExport(HttpServletResponse response, UserPoint userPoint) { // userPoint.setType(2); // IPage<UserPoint> userPointPage = userPointService.getUserPointPage(Page.of(1, Integer.MAX_VALUE), userPoint); // List<UserPoint> userPointList = userPointPage.getRecords(); // List<UserPointEx> userPointExList = new ArrayList<>(); // for (UserPoint point : userPointList) { // UserPointEx userPointEx = new UserPointEx(); // userPointEx.setUserName(point.getUserName()); // userPointEx.setPhone(point.getPhone()); // userPointEx.setChangeTime(point.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); // userPointEx.setChangeNum(point.getVariablePoint().toString()); // Integer type = point.getType(); // switch (type) { // case 1: // userPointEx.setType("消费积分"); // break; // case 2: // userPointEx.setType("返佣积分"); // break; // case 3: // userPointEx.setType("拉新人积分"); // break; // case 4: // userPointEx.setType("兑换商品"); // break; // case 5: // userPointEx.setType("门店业绩"); // break; // case 6: // userPointEx.setType("门店返佣"); // break; // case 7: // userPointEx.setType("技师业绩"); // break; // case 8: // userPointEx.setType("转赠积分"); // break; // case 9: // userPointEx.setType("做工积分"); // break; // case 10: // userPointEx.setType("注册积分"); // break; // default: // userPointEx.setType("未知积分"); // } // userPointExList.add(userPointEx); // } // ExcelUtil<UserPointEx> util = new ExcelUtil<>(UserPointEx.class); // util.exportExcel(response, userPointExList, "用户分佣统计"); // } @GetMapping("/commissionExport") @ApiOperation(value = "用户分佣统计导出", tags = "管理后台-财务统计-用户分佣统计") public void commissionExport(HttpServletResponse response, BalanceChangeRecord balanceChangeRecord) { CommissionStatistics commissionStatistics1 = balanceChangeRecordService.commissionStatistics(Page.of(1, Integer.MAX_VALUE), balanceChangeRecord); IPage<BalanceChangeRecord> userPointPage = commissionStatistics1.getUserPointPage(); List<BalanceChangeRecord> userPointList = userPointPage.getRecords(); List<BalanceChangeRecordEX> userPointExList = new ArrayList<>(); for (BalanceChangeRecord balanceChangeRecord1 : userPointList) { BalanceChangeRecordEX balanceChangeRecordEX = new BalanceChangeRecordEX(); balanceChangeRecordEX.setUserName(balanceChangeRecord1.getUserName()); balanceChangeRecordEX.setPhone(balanceChangeRecord1.getUserPhone()); balanceChangeRecordEX.setChangeTime(balanceChangeRecord1.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); balanceChangeRecordEX.setChangeNum(balanceChangeRecord1.getAfterAmount().toString()); Integer type = balanceChangeRecord1.getChangeType(); // 类型:1充值2提现3红包4分佣5商城购物6订单取消回退 switch (type) { case 1: balanceChangeRecordEX.setType("充值"); break; case 2: balanceChangeRecordEX.setType("提现"); break; case 3: balanceChangeRecordEX.setType("红包"); break; case 4: balanceChangeRecordEX.setType("分佣"); break; case 5: balanceChangeRecordEX.setType("商城购物"); break; case 6: balanceChangeRecordEX.setType("订单取消回退"); break; default: balanceChangeRecordEX.setType("未知积分"); } userPointExList.add(balanceChangeRecordEX); } ExcelUtil<BalanceChangeRecordEX> util = new ExcelUtil<>(BalanceChangeRecordEX.class); util.exportExcel(response, userPointExList, "用户分佣统计"); } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/excel/BalanceChangeRecordEX.java
New file @@ -0,0 +1,22 @@ package com.ruoyi.account.excel; import com.ruoyi.common.core.annotation.Excel; import lombok.Data; @Data public class BalanceChangeRecordEX { @Excel(name = "用户名称") private String userName; @Excel(name = "联系电话") private String phone; @Excel(name = "变更类型") private String type; @Excel(name = "变更时间") private String changeTime; @Excel(name = "变更数量") private String changeNum; } ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/vo/CommissionStatistics.java
@@ -14,7 +14,7 @@ public class CommissionStatistics { @ApiModelProperty(value = "分佣总计") private Integer totalCommission; private BigDecimal totalCommission; @ApiModelProperty(value = "分页数据", required = true) private IPage<BalanceChangeRecord> userPointPage; @@ -22,6 +22,7 @@ public CommissionStatistics() { } public CommissionStatistics(BigDecimal totalCommission, Page<BalanceChangeRecord> changeRecordPage) { this.totalCommission = totalCommission; this.userPointPage = changeRecordPage; } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsBargainPriceController.java
@@ -13,12 +13,12 @@ import com.ruoyi.other.api.domain.*; import com.ruoyi.other.api.vo.GetGoodsBargainPrice; import com.ruoyi.other.service.*; import com.ruoyi.other.vo.AddGoodsBargainPriceVo; import com.ruoyi.other.vo.GoodsBargainPriceInfo; import com.ruoyi.other.vo.ShopGoodsList; import com.ruoyi.other.vo.ShopGoodsListVo; import com.ruoyi.system.api.model.LoginUser; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import io.swagger.annotations.*; import io.swagger.models.auth.In; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -197,11 +197,29 @@ return R.ok(page); } @ResponseBody @GetMapping("/getGoodsBargainPriceInfo/{id}") @ApiOperation(value = "获取商品特殊售价详情", tags = {"门店后台-商品管理"}) @ApiImplicitParams({ @ApiImplicitParam(value = "商品id", name = "id", required = true, dataType = "int"), }) public R<GoodsBargainPriceInfo> getGoodsBargainPriceInfo(@PathVariable("id") Integer id){ GoodsBargainPriceInfo goodsBargainPriceInfo = goodsBargainPriceService.getGoodsBargainPriceInfo(id); return R.ok(goodsBargainPriceInfo); } @ResponseBody @GetMapping("/addGoodsBargainPrice/{id}") @ApiOperation(value = "保存商品特殊售价", tags = {"门店后台-商品管理"}) public R addGoodsBargainPrice(@RequestBody AddGoodsBargainPriceVo vo){ return goodsBargainPriceService.addGoodsBargainPrice(vo); } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/GoodsShopController.java
@@ -72,7 +72,7 @@ } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/SeckillActivityInfoController.java
@@ -14,6 +14,7 @@ import com.ruoyi.other.api.vo.GetSeckillActivityInfo; import com.ruoyi.other.mapper.SeckillActivityInfoMapper; import com.ruoyi.other.service.GoodsSeckillService; import com.ruoyi.other.service.GoodsService; import com.ruoyi.other.service.SeckillActivityInfoService; import com.ruoyi.other.vo.SeckillActivityDetailVO; import com.ruoyi.other.vo.SeckillActivityVO; @@ -23,6 +24,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.List; @@ -46,6 +48,9 @@ @Resource private SeckillActivityInfoMapper seckillActivityInfoMapper; @Resource private GoodsService goodsService; @@ -101,6 +106,18 @@ Goods goods) { IPage<SeckillActivityVO> IPage = seckillActivityInfoMapper.querySeckillActivity(Page.of(pageNum, pageSize), goods); for (SeckillActivityVO record : IPage.getRecords()) { LocalDateTime startTime = record.getStartTime(); LocalDateTime now = LocalDateTime.now(); LocalDateTime endTime = record.getEndTime(); if (endTime.isBefore(now)){ record.setStatus(3); //已结束 }else if (startTime.isBefore(now)){ record.setStatus(2); // 已开始 }else { record.setStatus(1); // 未开始 } } return R.ok(IPage); } @@ -148,6 +165,9 @@ List<GoodsSeckill> goodsSeckills = goodsSeckillService.list(new LambdaQueryWrapper<GoodsSeckill>() .eq(GoodsSeckill::getSeckillActivityInfoId, id)); seckillActivityInfo.setGoodsSeckills(goodsSeckills); Integer goodId = seckillActivityInfo.getGoodId(); Goods goods = goodsService.getById(goodId); seckillActivityInfo.setGoods(goods); return R.ok(seckillActivityInfo); } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopBalanceStatementController.java
@@ -1,8 +1,23 @@ package com.ruoyi.other.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.other.api.domain.ShopBalanceStatement; import com.ruoyi.other.service.ShopBalanceStatementService; import com.ruoyi.other.vo.ShopCommissionStatisticsVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; /** * <p> @@ -14,7 +29,34 @@ */ @RestController @RequestMapping("/shop-balance-statement") @Api(tags = "管理后台-财务统计-门店分佣统计") public class ShopBalanceStatementController { @Resource private ShopBalanceStatementService shopBalanceStatementService; /** * 门店分佣统计 */ @GetMapping("/commissionStatistics") @ApiOperation("门店分佣统计") public R<ShopCommissionStatisticsVO> shopCommissionStatistics(@ApiParam("页码") @RequestParam Integer pageNum, @ApiParam("每一页数据大小") Integer pageSize, ShopBalanceStatement shopBalanceStatement){ ShopCommissionStatisticsVO shopCommissionStatisticsVO = shopBalanceStatementService.shopCommissionStatistics(Page.of(pageNum, pageSize), shopBalanceStatement); return R.ok(shopCommissionStatisticsVO); } /** * 导出门店分佣统计 */ @GetMapping("/export") @ApiOperation("导出门店分佣统计") public void export(HttpServletResponse response , ShopBalanceStatement shopBalanceStatement){ ShopCommissionStatisticsVO shopCommissionStatisticsVO = shopBalanceStatementService.shopCommissionStatistics(Page.of(1, Integer.MAX_VALUE), shopBalanceStatement); IPage<ShopBalanceStatement> statementIPage = shopCommissionStatisticsVO.getStatementIPage(); ExcelUtil<ShopBalanceStatement> util = new ExcelUtil<>(ShopBalanceStatement.class); util.exportExcel(response, statementIPage.getRecords(), "用户积分统计"); } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/controller/ShopWithdrawController.java
@@ -1,8 +1,26 @@ package com.ruoyi.other.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.other.api.domain.ShopWithdraw; import com.ruoyi.other.service.ShopService; import com.ruoyi.other.service.ShopWithdrawService; import com.ruoyi.system.api.model.LoginUser; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.time.LocalDateTime; /** * <p> @@ -14,7 +32,49 @@ */ @RestController @RequestMapping("/shop-withdraw") @Api(tags = {"管理后台-门店管理-提现管理"}) public class ShopWithdrawController { @Resource private ShopWithdrawService shopWithdrawService; @Resource private ShopService shopService; @Resource private TokenService tokenService; /** * 提现申请列表 */ @GetMapping("/list") @ApiOperation("提现申请列表") public R<IPage<ShopWithdraw>> list(@ApiParam("页码") @RequestParam Integer pageNum, @ApiParam("每一页数据大小") Integer pageSize, ShopWithdraw shopWithdraw) { Page<ShopWithdraw> page = shopWithdrawService.page(Page.of(pageNum, pageSize), new LambdaQueryWrapper<ShopWithdraw>() .like(StringUtils.isNotEmpty(shopWithdraw.getShopName()), ShopWithdraw::getShopName, shopWithdraw.getShopName())); page.getRecords().forEach(item-> item.setShopName(shopService.getById(item.getShopId()).getName())); return R.ok(page); } /** * 审核 */ @RequestMapping("/audit") @ApiOperation("审核") public R<Void> audit(ShopWithdraw shopWithdraw) { LoginUser loginUser = tokenService.getLoginUser(); ShopWithdraw shopWithdraw1 = shopWithdrawService.getById(shopWithdraw.getId()); shopWithdraw1.setAuditStatus(shopWithdraw.getAuditStatus()); shopWithdraw1.setAuditUserId(loginUser.getUserid()); shopWithdraw1.setAuditTime(LocalDateTime.now()); shopWithdraw1.setAuditMsg(shopWithdraw.getAuditMsg()); shopWithdrawService.updateById(shopWithdraw1); return R.ok(); } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/mapper/ShopBalanceStatementMapper.java
@@ -1,7 +1,11 @@ package com.ruoyi.other.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.other.api.domain.ShopBalanceStatement; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> @@ -12,5 +16,5 @@ * @since 2024-11-20 */ public interface ShopBalanceStatementMapper extends BaseMapper<ShopBalanceStatement> { List<ShopBalanceStatement> findLatestChangeByType(ShopBalanceStatement shopBalanceStatement); } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/GoodsBargainPriceService.java
@@ -1,7 +1,12 @@ package com.ruoyi.other.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.domain.R; import com.ruoyi.other.api.domain.GoodsBargainPrice; import com.ruoyi.other.vo.AddGoodsBargainPriceVo; import com.ruoyi.other.vo.GoodsBargainPriceInfo; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; /** * <p> @@ -12,5 +17,21 @@ * @since 2024-11-20 */ public interface GoodsBargainPriceService extends IService<GoodsBargainPrice> { /** * 获取商品特殊售价明细 * @param id * @return */ GoodsBargainPriceInfo getGoodsBargainPriceInfo(Integer id); /** * 提交特殊售价申请 * @param vo * @return */ R addGoodsBargainPrice(AddGoodsBargainPriceVo vo); } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/ShopBalanceStatementService.java
@@ -1,7 +1,9 @@ package com.ruoyi.other.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.other.api.domain.ShopBalanceStatement; import com.ruoyi.other.vo.ShopCommissionStatisticsVO; /** * <p> @@ -12,5 +14,5 @@ * @since 2024-11-20 */ public interface ShopBalanceStatementService extends IService<ShopBalanceStatement> { ShopCommissionStatisticsVO shopCommissionStatistics(IPage<ShopBalanceStatement> page, ShopBalanceStatement shopBalanceStatement); } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsBargainPriceServiceImpl.java
@@ -1,10 +1,23 @@ package com.ruoyi.other.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.security.service.TokenService; import com.ruoyi.other.api.domain.GoodsBargainPriceDetail; import com.ruoyi.other.mapper.GoodsBargainPriceMapper; import com.ruoyi.other.api.domain.GoodsBargainPrice; import com.ruoyi.other.service.GoodsBargainPriceDetailService; import com.ruoyi.other.service.GoodsBargainPriceService; import com.ruoyi.other.vo.AddGoodsBargainPriceVo; import com.ruoyi.other.vo.GoodsBargainPriceInfo; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.feignClient.SysUserClient; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; /** * <p> @@ -16,5 +29,71 @@ */ @Service public class GoodsBargainPriceServiceImpl extends ServiceImpl<GoodsBargainPriceMapper, GoodsBargainPrice> implements GoodsBargainPriceService { @Resource private TokenService tokenService; @Resource private SysUserClient sysUserClient; @Resource private GoodsBargainPriceDetailService goodsBargainPriceDetailService; /** * 获取商品特殊售价明细 * @param id * @return */ @Override public GoodsBargainPriceInfo getGoodsBargainPriceInfo(Integer id) { Long userid = tokenService.getLoginUser().getUserid(); SysUser sysUser = sysUserClient.getSysUser(userid).getData(); GoodsBargainPrice bargainPrice = this.getOne(new LambdaQueryWrapper<GoodsBargainPrice>().eq(GoodsBargainPrice::getShopId, sysUser.getObjectId()) .eq(GoodsBargainPrice::getGoodsId, id).eq(GoodsBargainPrice::getDelFlag, 0).last(" order by create_time desc limit 0, 1")); if(null == bargainPrice){ return null; } List<GoodsBargainPriceDetail> list = goodsBargainPriceDetailService.list(new LambdaQueryWrapper<GoodsBargainPriceDetail>().eq(GoodsBargainPriceDetail::getGoodsBargainPriceId, bargainPrice.getId())); GoodsBargainPriceInfo info = new GoodsBargainPriceInfo(); info.setId(bargainPrice.getId().toString()); info.setList(list); info.setAuditMsg(bargainPrice.getAuditMsg()); info.setAuditStatus(bargainPrice.getAuditStatus()); return info; } /** * 提交特殊售价申请 * @param vo * @return */ @Override public R addGoodsBargainPrice(AddGoodsBargainPriceVo vo) { Long userid = tokenService.getLoginUser().getUserid(); SysUser sysUser = sysUserClient.getSysUser(userid).getData(); GoodsBargainPrice bargainPrice = this.getOne(new LambdaQueryWrapper<GoodsBargainPrice>().eq(GoodsBargainPrice::getShopId, sysUser.getObjectId()) .eq(GoodsBargainPrice::getGoodsId, vo.getGoodsId()).eq(GoodsBargainPrice::getDelFlag, 0).last(" order by create_time desc limit 0, 1")); if(null != bargainPrice && 1 == bargainPrice.getAuditStatus()){ return R.fail("特价申请正在审核中"); } bargainPrice = new GoodsBargainPrice(); bargainPrice.setShopId(sysUser.getObjectId()); bargainPrice.setGoodsId(vo.getGoodsId()); bargainPrice.setAuditStatus(1); bargainPrice.setDelFlag(0); bargainPrice.setCreateTime(LocalDateTime.now()); bargainPrice.setCreateUserId(userid); this.updateById(bargainPrice); //添加明细 List<GoodsBargainPriceDetail> list = vo.getList(); for (GoodsBargainPriceDetail goodsBargainPriceDetail : list) { goodsBargainPriceDetail.setGoodsBargainPriceId(bargainPrice.getId()); } goodsBargainPriceDetailService.saveBatch(list); return R.ok(); } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java
@@ -28,7 +28,10 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.util.*; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -169,38 +172,55 @@ if (CollectionUtils.isEmpty(goodsShopList)){ throw new NullPointerException("请选择指定门店"); } for (GoodsShop goodsShop : goodsShopList) { goodsShop.setGoodsId(goods.getId()); goodsShop.setId(null); } goodsShopService.saveBatch(goodsShopList); saveGoodsShopList(goodsShopList, goods.getId()); } // 指定用户 List<GoodsAppUser> goodsAppUserList = goods.getGoodsAppUserList(); if (!CollectionUtils.isEmpty(goodsAppUserList)){ for (GoodsAppUser goodsAppUser : goodsAppUserList) { goodsAppUser.setId(null ); goodsAppUser.setGoodsId(goods.getId()); } goodsAppUserService.saveBatch(goodsAppUserList); saveGoodsAppUserList(goodsAppUserList, goods.getId()); } // 会员价格配置 List<GoodsVip> goodsVipList = goods.getGoodsVipList(); for (GoodsVip goodsVip : goodsVipList) { goodsVip.setId(null); goodsVip.setGoodsId(goods.getId()); } goodsVipService.saveBatch(goodsVipList); saveGoodsVipList(goodsVipList, goods.getId()); // 特殊地区售价设置 List<GoodsArea> goodsAreaList = goods.getGoodsAreaList(); if (!CollectionUtils.isEmpty(goodsAreaList)){ saveGoodsAreaList(goodsAreaList, goods.getId()); } } @Override public void updateManageGoods(Goods goods) { goodsMapper.updateById(goods); // 指定门店 List<GoodsShop> goodsShopList = goods.getGoodsShopList(); saveGoodsShopList(goodsShopList, goods.getId()); // 指定用户 List<GoodsAppUser> goodsAppUserList = goods.getGoodsAppUserList(); saveGoodsAppUserList(goodsAppUserList, goods.getId()); // 会员价格配置 List<GoodsVip> goodsVipList = goods.getGoodsVipList(); saveGoodsVipList(goodsVipList, goods.getId()); // 特殊地区售价设置 List<GoodsArea> goodsAreaList = goods.getGoodsAreaList(); saveGoodsAreaList(goodsAreaList, goods.getId()); } private void saveGoodsAreaList(List<GoodsArea> goodsAreaList, Integer id) { goodsAreaService.remove(new LambdaQueryWrapper<GoodsArea>() .eq(GoodsArea::getGoodsId, id)); if (!CollectionUtils.isEmpty(goodsAreaList)){ for (GoodsArea goodsArea : goodsAreaList) { List<GoodsArea> goodsAreaList1 = goodsArea.getGoodsAreaList(); for (GoodsArea area : goodsAreaList1) { area.setGoodsId(goods.getId()); area.setGoodsId(id); area.setProvince(goodsArea.getProvince()); area.setCity(goodsArea.getCity()); area.setDistricts(goodsArea.getDistricts()); @@ -211,41 +231,40 @@ goodsAreaService.saveBatch(goodsAreaList1); } } } @Override public void updateManageGoods(Goods goods) { goodsMapper.updateById(goods); // 指定门店 List<GoodsShop> goodsShopList = goods.getGoodsShopList(); goodsShopService.updateBatchById(goodsShopList); private void saveGoodsVipList(List<GoodsVip> goodsVipList, Integer id) { goodsVipService.remove(new LambdaQueryWrapper<GoodsVip>() .eq(GoodsVip::getGoodsId, id)); goodsVipList.forEach(item -> { item.setId(null); item.setGoodsId(id); }); goodsVipService.saveBatch(goodsVipList); } // 指定用户 List<GoodsAppUser> goodsAppUserList = goods.getGoodsAppUserList(); goodsAppUserService.updateBatchById(goodsAppUserList); // 会员价格配置 List<GoodsVip> goodsVipList = goods.getGoodsVipList(); goodsVipService.updateBatchById(goodsVipList); // 特殊地区售价设置 List<GoodsArea> goodsAreaList = goods.getGoodsAreaList(); if (!CollectionUtils.isEmpty(goodsAreaList)){ for (GoodsArea goodsArea : goodsAreaList) { List<GoodsArea> goodsAreaList1 = goodsArea.getGoodsAreaList(); for (GoodsArea area : goodsAreaList1) { area.setGoodsId(goods.getId()); area.setProvince(goodsArea.getProvince()); area.setCity(goodsArea.getCity()); area.setDistricts(goodsArea.getDistricts()); area.setProvinceCode(goodsArea.getProvinceCode()); area.setCityCode(goodsArea.getCityCode()); area.setDistrictsCode(goodsArea.getDistrictsCode()); } goodsAreaService.updateBatchById(goodsAreaList1); private void saveGoodsAppUserList(List<GoodsAppUser> goodsAppUserList, Integer id) { goodsAppUserService.remove(new LambdaQueryWrapper<GoodsAppUser>() .eq(GoodsAppUser::getGoodsId, id)); if (!CollectionUtils.isEmpty(goodsAppUserList)){ for (GoodsAppUser goodsAppUser : goodsAppUserList) { goodsAppUser.setId(null ); goodsAppUser.setGoodsId(id); } } goodsAppUserService.saveBatch(goodsAppUserList); } private void saveGoodsShopList(List<GoodsShop> goodsShopList, Integer goodsId) { goodsShopService.remove(new LambdaQueryWrapper<GoodsShop>() .eq(GoodsShop::getGoodsId, goodsId)); if (!CollectionUtils.isEmpty(goodsShopList)){ for (GoodsShop goodsShop : goodsShopList) { goodsShop.setGoodsId(goodsId); goodsShop.setId(null); } } goodsShopService.saveBatch(goodsShopList); } @Override @@ -322,6 +341,9 @@ private List<VipSetting> getVipSettings(Stream<Integer> goodsVipList) { List<Integer> vipIds = goodsVipList.collect(Collectors.toList()); if (CollectionUtils.isEmpty(vipIds)){ return new ArrayList<>(); } return vipSettingService.listByIds(vipIds); } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/ShopBalanceStatementServiceImpl.java
@@ -1,10 +1,19 @@ package com.ruoyi.other.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.other.api.domain.Shop; import com.ruoyi.other.mapper.ShopBalanceStatementMapper; import com.ruoyi.other.api.domain.ShopBalanceStatement; import com.ruoyi.other.service.ShopBalanceStatementService; import com.ruoyi.other.service.ShopService; import com.ruoyi.other.vo.ShopCommissionStatisticsVO; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.stream.Collectors; /** * <p> @@ -16,5 +25,45 @@ */ @Service public class ShopBalanceStatementServiceImpl extends ServiceImpl<ShopBalanceStatementMapper, ShopBalanceStatement> implements ShopBalanceStatementService { @Resource private ShopBalanceStatementMapper shopBalanceStatementMapper; @Resource private ShopService shopService; @Override public ShopCommissionStatisticsVO shopCommissionStatistics(IPage<ShopBalanceStatement> page, ShopBalanceStatement shopBalanceStatement) { List<ShopBalanceStatement> latestChangeByType = shopBalanceStatementMapper.findLatestChangeByType(shopBalanceStatement); ShopCommissionStatisticsVO shopCommissionStatisticsVO = new ShopCommissionStatisticsVO(); for (ShopBalanceStatement sp : latestChangeByType) { switch (sp.getType()) { case 1: shopCommissionStatisticsVO.setTotalCommission(sp.getBalance()); break; case 2: shopCommissionStatisticsVO.setTotalSubordinateCommission(sp.getBalance()); break; case 3: shopCommissionStatisticsVO.setTotalServiceCharge(sp.getBalance()); break; } } shopCommissionStatisticsVO.setTotalAmount(shopCommissionStatisticsVO.getTotalCommission() .add(shopCommissionStatisticsVO.getTotalSubordinateCommission()) .add(shopCommissionStatisticsVO.getTotalServiceCharge())); IPage<ShopBalanceStatement> statementIPage = page(page, new LambdaQueryWrapper<ShopBalanceStatement>()); List<ShopBalanceStatement> records = statementIPage.getRecords(); List<Integer> shopIds = records.stream().map(ShopBalanceStatement::getShopId).collect(Collectors.toList()); List<Shop> shopList = shopService.listByIds(shopIds); records.forEach(st -> { shopList.stream().filter(shop -> shop.getId().equals(st.getShopId())).findFirst().ifPresent(shop -> { st.setShopName(shop.getName()); st.setShopManagerName(shop.getShopManager()); st.setPhone(shop.getPhone()); }); }); shopCommissionStatisticsVO.setStatementIPage(statementIPage); return shopCommissionStatisticsVO; } } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/AddGoodsBargainPriceVo.java
New file @@ -0,0 +1,21 @@ package com.ruoyi.other.vo; import com.ruoyi.other.api.domain.GoodsBargainPriceDetail; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @author zhibing.pu * @Date 2024/12/17 16:28 */ @Data @ApiModel public class AddGoodsBargainPriceVo { @ApiModelProperty("商品id") private Integer goodsId; @ApiModelProperty("特殊售价") private List<GoodsBargainPriceDetail> list; } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/GoodsBargainPriceInfo.java
New file @@ -0,0 +1,25 @@ package com.ruoyi.other.vo; import com.ruoyi.other.api.domain.GoodsBargainPriceDetail; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @author zhibing.pu * @Date 2024/12/17 16:14 */ @Data @ApiModel public class GoodsBargainPriceInfo { @ApiModelProperty("数据id") private String id; @ApiModelProperty("审核状态(0=待审核,1=审核通过,2=审核失败)") private Integer auditStatus; @ApiModelProperty("审核意见") private String auditMsg; @ApiModelProperty("特殊售价") private List<GoodsBargainPriceDetail> list; } ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/vo/ShopCommissionStatisticsVO.java
New file @@ -0,0 +1,40 @@ package com.ruoyi.other.vo; import com.baomidou.mybatisplus.core.metadata.IPage; import com.ruoyi.other.api.domain.ShopBalanceStatement; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.util.List; @Data @ApiModel("门店分佣统计") public class ShopCommissionStatisticsVO { /** * 总金额 */ @ApiModelProperty(value = "总金额") private BigDecimal totalAmount; /** * 分佣总金额 */ @ApiModelProperty(value = "分佣总金额") private BigDecimal totalCommission; /** * 服务费总计 */ @ApiModelProperty(value = "服务费总计") private BigDecimal totalServiceCharge; /** * 下级门店分佣总金额 */ @ApiModelProperty(value = "下级门店分佣总金额") private BigDecimal totalSubordinateCommission; private IPage<ShopBalanceStatement> statementIPage; } ruoyi-service/ruoyi-other/src/main/resources/mapper/other/SeckillActivityInfoMapper.xml
@@ -49,24 +49,53 @@ <select id="querySeckillActivity" resultType="com.ruoyi.other.vo.SeckillActivityVO"> SELECT tsai.id, tg.`name`, tg.`name` goodsName, tg.introduction, tgc.`name` goodsCategoryName, tg.operating_cost, tg.shop_cost, tg.purchase_limit maxNum, tg.home_page_picture, tg.original_price, tgs.selling_price, tg.sale_num, tsai.start_time tg.`type` goodsType, tsai.start_time, tsai.end_time, tsai.is_shelves showStatus FROM t_seckill_activity_info tsai LEFT JOIN t_goods tg ON tsai.good_id = tg.id LEFT JOIN t_goods_seckill tgs ON tgs.seckill_activity_info_id = tsai.id WHERE tsai.end_time >= NOW() AND tsai.del_flag = 0 LEFT JOIN t_goods_category tgc ON tgc.id = tg.goods_category_id WHERE tsai.del_flag = 0 <if test="goods.name != null and goods.name != ''"> AND tg.`name` LIKE concat('%',#{goods.name},'%') </if> <if test="goods.goodsCategoryId != null"> AND tg.goods_category_id = #{goods.goodsCategoryId} </if> <if test="goods.categoryName != null and goods.categoryName != ''"> AND tgc.name = #{goods.categoryName} </if> <if test="goods.showStatus != null"> AND tsai.is_shelves = #{goods.showStatus} </if> <if test="goods.type != null"> AND tg.type = #{goods.type} </if> <if test="goods.status != null and goods.status ==1"> AND tsai.start_time <![CDATA[>]]> NOW() </if> <if test="goods.status != null and goods.status ==2"> AND tsai.start_time <![CDATA[<=]]> NOW() AND tsai.end_time <![CDATA[>]]> NOW() </if> <if test="goods.status != null and goods.status ==3"> AND tsai.end_time <![CDATA[<]]> NOW() </if> <if test="goods.vipId != null"> AND find_in_set(#{goods.vipId},tgs.vip) > 0 </if> ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopBalanceStatementMapper.xml
New file @@ -0,0 +1,33 @@ <?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.ruoyi.other.mapper.ShopBalanceStatementMapper"> <select id="findLatestChangeByType" resultType="com.ruoyi.other.api.domain.ShopBalanceStatement"> SELECT id, shop_id, type, historical_balance, variable_amount, balance, create_time, create_user_id, object_id FROM ( SELECT id, shop_id, type, historical_balance, variable_amount, balance, create_time, create_user_id, object_id, ROW_NUMBER() OVER ( PARTITION BY type, create_user_id ORDER BY create_time DESC ) AS rn FROM t_shop_balance_statement ) AS subquery </select> </mapper> ruoyi-service/ruoyi-other/src/main/resources/mapper/other/ShopPointMapper.xml
@@ -23,7 +23,7 @@ create_time, create_user_id, object_id, ROW_NUMBER() OVER ( PARTITION BY type ORDER BY create_time DESC ) AS rn ROW_NUMBER() OVER ( PARTITION BY type,create_user_id ORDER BY create_time DESC ) AS rn FROM t_shop_point