Merge remote-tracking branch 'origin/master'
New file |
| | |
| | | |
| | | { |
| | | "province": "", |
| | | "city":"", |
| | | "area": "", |
| | | "vip": [] |
| | | } |
| | |
| | | } |
| | | |
| | | @Override |
| | | public List<AppUser> listByIds(List<String> list) { |
| | | public List<AppUser> listByIds(List<Long> list) { |
| | | log.error("获取用户失败: "+cause.getMessage()); |
| | | return Collections.emptyList(); |
| | | } |
| | | }; |
| | |
| | | |
| | | |
| | | @GetMapping("/app-user/listByIds") |
| | | List<AppUser> listByIds(List<String> list); |
| | | List<AppUser> listByIds(@RequestParam("ids") List<Long> list); |
| | | |
| | | /** |
| | | * 根据用户名称模糊搜索用户列表 |
| | |
| | | |
| | | @ApiModelProperty(value = "添加时间") |
| | | @TableField("create_time") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | private LocalDateTime createTime; |
| | | |
| | | @ApiModelProperty(value = "删除(0=否,1=是)") |
| | |
| | | import io.swagger.annotations.ApiParam; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | |
| | | import java.io.Serializable; |
| | |
| | | @ApiModelProperty(value = "开始时间") |
| | | @TableField(exist = false) |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private LocalDateTime startTime; |
| | | |
| | | @ApiModelProperty(value = "结束时间") |
| | | @TableField(exist = false) |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private LocalDateTime endTime; |
| | | |
| | | @TableField(exist = false) |
| | |
| | | |
| | | @ApiModelProperty(value = "获取返佣积分上级类型(1=直推上级,2=直帮上级)") |
| | | @TableField("superior_type") |
| | | private Integer superiorType; |
| | | private String superiorType; |
| | | |
| | | @ApiModelProperty(value = "获取分佣金额上级类型(1=直推上级,2=直帮上级)") |
| | | @TableField("superior_price_type") |
| | |
| | | /** |
| | | * 获取返佣积分上级类型(1=直推上级,2=直帮上级) |
| | | */ |
| | | private Integer superiorType; |
| | | private String superiorType; |
| | | /** |
| | | * 核销门店可获得服务费 |
| | | */ |
| | |
| | | /** |
| | | * 获取返佣积分上级类型(1=直推上级,2=直帮上级) |
| | | */ |
| | | private Integer superiorType; |
| | | private String superiorType; |
| | | /** |
| | | * 核销门店可获得服务费 |
| | | */ |
| | |
| | | |
| | | import java.io.Serializable; |
| | | import java.math.BigDecimal; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | |
| | | @ApiModelProperty(value = "获取返佣积分上级类型(1=直推上级,2=直帮上级)") |
| | | @TableField("superior_type") |
| | | private Integer superiorType; |
| | | private String superiorType; |
| | | |
| | | @ApiModelProperty(value = "获取分佣金额上级类型(1=直推上级,2=直帮上级)") |
| | | @TableField("superior_price_type") |
| | | private String superiorPriceType; |
| | | |
| | | @ApiModelProperty(value = "核销门店可获得服务费") |
| | | @TableField("servuce_shop_charges") |
| | |
| | | @TableField("bound_shop_superiors_points") |
| | | private Integer boundShopSuperiorsPoints; |
| | | |
| | | @TableField(exist = false) |
| | | private List<GoodsArea> goodsAreaList; |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | @ApiModelProperty(value = "获取返佣积分上级类型(1=直推上级,2=直帮上级)") |
| | | @TableField("superior_type") |
| | | private Integer superiorType; |
| | | private String superiorType; |
| | | |
| | | @ApiModelProperty(value = "获取分佣金额上级类型(1=直推上级,2=直帮上级)") |
| | | @TableField("superior_price_type") |
| | | private Integer superiorPriceType; |
| | | private String superiorPriceType; |
| | | |
| | | @ApiModelProperty(value = "核销门店可获得服务费") |
| | | @TableField("servuce_shop_charges") |
| | |
| | | package com.ruoyi.other.api.domain; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.*; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.io.Serializable; |
| | | import java.math.BigDecimal; |
| | |
| | | |
| | | @ApiModelProperty(value = "开始时间") |
| | | @TableField("start_time") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private LocalDateTime startTime; |
| | | |
| | | @ApiModelProperty(value = "结束时间") |
| | | @TableField("end_time") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private LocalDateTime endTime; |
| | | |
| | | @ApiModelProperty(value = "红包金额") |
| | |
| | | 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 io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import lombok.EqualsAndHashCode; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import java.io.Serializable; |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | |
| | | @ApiModelProperty(value = "历史余额") |
| | | @TableField("historical_point") |
| | | private BigDecimal historicalPoint; |
| | | private Integer historicalPoint; |
| | | |
| | | @ApiModelProperty(value = "变动金额") |
| | | @TableField("variable_point") |
| | | private BigDecimal variablePoint; |
| | | private Integer variablePoint; |
| | | |
| | | @ApiModelProperty(value = "变动时间") |
| | | @TableField("create_time") |
| | |
| | | @TableField("object_id") |
| | | private Long objectId; |
| | | |
| | | @ApiModelProperty(value = "门店名称") |
| | | @TableField(exist = false) |
| | | private String shopName; |
| | | |
| | | @ApiModelProperty(value = "店长姓名") |
| | | @TableField(exist = false) |
| | | private String shopLeaderName; |
| | | |
| | | @ApiModelProperty(value = "联系电话") |
| | | @TableField(exist = false) |
| | | private String phone; |
| | | |
| | | @TableField(exist = false) |
| | | private List<Integer> shopIds; |
| | | |
| | | @ApiModelProperty(value = "开始时间") |
| | | @TableField(exist = false) |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private LocalDateTime startTime; |
| | | |
| | | @ApiModelProperty(value = "结束时间") |
| | | @TableField(exist = false) |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private LocalDateTime endTime; |
| | | |
| | | @TableField(exist = false) |
| | | private List<Long> userIds; |
| | | @TableField(exist = false) |
| | | private Integer pageNum; |
| | | @TableField(exist = false) |
| | | private Integer pageSize; |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | |
| | | @GetMapping("/listByIds") |
| | | List<AppUser> listByIds(List<String> list){ |
| | | return appUserService.listByIds(list); |
| | | List<AppUser> listByIds(@RequestParam("ids") List<Long> ids){ |
| | | List<AppUser> appUsers = appUserService.listByIds(ids); |
| | | return appUsers; |
| | | } |
| | | |
| | | |
| | |
| | | @GetMapping("/list") |
| | | @ApiOperation(value = "积分变更记录", tags = "管理后台-财务统计-用户积分统计") |
| | | public R<IPage<UserPoint>> list(UserPoint userPoint) { |
| | | System.out.println("1111111111111111111111"); |
| | | IPage<UserPoint> userPointPage = userPointService.getUserPointPage(Page.of(userPoint.getPageNum(), userPoint.getPageSize()), userPoint); |
| | | return R.ok(userPointPage); |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.controller.BaseController; |
| | | import com.ruoyi.common.core.web.page.TableDataInfo; |
| | | import com.ruoyi.common.security.service.TokenService; |
| | | import com.ruoyi.order.model.Order; |
| | | import com.ruoyi.order.model.RefundPass; |
| | | import com.ruoyi.order.service.OrderService; |
| | | import com.ruoyi.order.service.RefundPassService; |
| | | import com.ruoyi.order.vo.ApplyRefundPass; |
| | | import com.ruoyi.order.vo.OrderRefundPassList; |
| | | import com.ruoyi.order.vo.OrderRefundPassListVo; |
| | | import com.ruoyi.order.vo.RefundPassInfo; |
| | | import io.swagger.annotations.ApiImplicitParam; |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | | import io.swagger.annotations.ApiOperation; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/refund-pass") |
| | | public class RefundPassController { |
| | | public class RefundPassController extends BaseController { |
| | | |
| | | |
| | | @Resource |
| | |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | |
| | | @ResponseBody |
| | | @GetMapping("/getOrderRefundPassList") |
| | | @ApiOperation(value = "获取售后列表数据", tags = {"管理后台-售后管理", "门店后台-售后管理"}) |
| | | public TableDataInfo<OrderRefundPassList> getOrderRefundPassList(OrderRefundPassListVo refundPassListVo){ |
| | | startPage(); |
| | | List<OrderRefundPassList> orderRefundPassList = refundPassService.getOrderRefundPassList(refundPassListVo); |
| | | return getDataTable(orderRefundPassList); |
| | | } |
| | | |
| | | |
| | | @ResponseBody |
| | | @PostMapping("/authPassStatus/{id}/{status}") |
| | | @ApiOperation(value = "审核售后", tags = {"管理后台-售后管理", "门店后台-售后管理"}) |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "id", value = "售后数据id", required = true, dataType = "long"), |
| | | @ApiImplicitParam(name = "status", value = "审核状态(2=同意,3=拒绝)", required = true, dataType = "int"), |
| | | @ApiImplicitParam(name = "passRemark", value = "审核备注", required = false, dataType = "string"), |
| | | }) |
| | | public R authPassStatus(@PathVariable("id") Long id, @PathVariable("status") Integer status, @RequestParam("passRemark") String passRemark){ |
| | | return refundPassService.authPassStatus(id, status, passRemark); |
| | | } |
| | | |
| | | |
| | | @ResponseBody |
| | | @PutMapping("/refundPassReceive/{id}") |
| | | @ApiOperation(value = "售后确认收货操作", tags = {"管理后台-售后管理"}) |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "id", value = "售后数据id", required = true, dataType = "long"), |
| | | }) |
| | | public R refundPassReceive(@PathVariable("id") Long id){ |
| | | return refundPassService.refundPassReceive(id); |
| | | } |
| | | |
| | | |
| | | |
| | | @ResponseBody |
| | | @GetMapping("/getRefundPassInfo/{id}") |
| | | @ApiOperation(value = "获取售后数据详情", tags = {"管理后台-售后管理", "门店后台-售后管理"}) |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "id", value = "售后数据id", required = true, dataType = "long"), |
| | | }) |
| | | public R<RefundPassInfo> getRefundPassInfo(@PathVariable("id") Long id){ |
| | | RefundPassInfo refundPassInfo = refundPassService.getRefundPassInfo(id); |
| | | return R.ok(refundPassInfo); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.order.model.RefundPass; |
| | | import com.ruoyi.order.vo.OrderRefundPassList; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | */ |
| | | public interface RefundPassMapper extends BaseMapper<RefundPass> { |
| | | |
| | | |
| | | /** |
| | | * 管理后台获取售后管理列表数据 |
| | | * @param code 订单号 |
| | | * @param appUserIds 下单用户id |
| | | * @param refundMethod 售后类型 |
| | | * @param status 售后状态 |
| | | * @return |
| | | */ |
| | | List<OrderRefundPassList> getOrderRefundPassList(@Param("code") String code, @Param("appUserIds") List<Long> appUserIds, |
| | | @Param("shopId") Integer shopId, @Param("refundMethod") Integer refundMethod, |
| | | @Param("status") Integer status); |
| | | |
| | | } |
| | |
| | | |
| | | |
| | | /** |
| | | * 返回订单支付金额和回退积分和会员等级 |
| | | * @param order |
| | | */ |
| | | void refundPayMoney(Order order); |
| | | |
| | | |
| | | /** |
| | | * 收货操作 |
| | | * @param orderId |
| | | * @return |
| | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.order.model.RefundPass; |
| | | import com.ruoyi.order.vo.ApplyRefundPass; |
| | | import com.ruoyi.order.vo.OrderRefundPassList; |
| | | import com.ruoyi.order.vo.OrderRefundPassListVo; |
| | | import com.ruoyi.order.vo.RefundPassInfo; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | */ |
| | | R applyRefundPass(ApplyRefundPass applyRefundPass); |
| | | |
| | | |
| | | /** |
| | | * 管理后台获取售后管理列表数据 |
| | | * @return |
| | | */ |
| | | List<OrderRefundPassList> getOrderRefundPassList(OrderRefundPassListVo refundPassListVo); |
| | | |
| | | |
| | | /** |
| | | * 售后订单审核操作 |
| | | * @param id |
| | | * @param status |
| | | * @param passRemark |
| | | * @return |
| | | */ |
| | | R authPassStatus(Long id, Integer status, String passRemark); |
| | | |
| | | |
| | | /** |
| | | * 售后确认收货操作 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | R refundPassReceive(Long id); |
| | | |
| | | |
| | | /** |
| | | * 获取售后详情 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | RefundPassInfo getRefundPassInfo(Long id); |
| | | } |
| | |
| | | for (OrderGood og : v) {// 累计分销金额 |
| | | |
| | | // 直推上级分佣金额 |
| | | Integer superiorType = og.getSuperiorType(); |
| | | if (superiorType == 1 && inviteUser != null){ |
| | | String superiorType = og.getSuperiorType(); |
| | | if (superiorType.contains("1") && inviteUser != null){ |
| | | // 分佣金额 |
| | | BigDecimal superiorSubcommission = og.getSuperiorSubcommission(); |
| | | BigDecimal totalDistributionAmount = inviteUser.getTotalDistributionAmount(); |
| | |
| | | appUserClient.editAppUserById(inviteUser); |
| | | }else |
| | | // 直帮上级分佣金额 |
| | | if (superiorType == 2 && superiorLeader != null){ |
| | | if (superiorType.contains("2") && superiorLeader != null){ |
| | | // 分佣金额 |
| | | BigDecimal superiorSubcommission = og.getSuperiorSubcommission(); |
| | | BigDecimal totalDistributionAmount = superiorLeader.getTotalDistributionAmount(); |
| | |
| | | } |
| | | order.setOrderStatus(5); |
| | | this.updateById(order); |
| | | refundPayMoney(order); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 返回订单支付金额和回退积分和会员等级 |
| | | * @param order |
| | | */ |
| | | public void refundPayMoney(Order order){ |
| | | //开始退款 |
| | | Integer payMethod = order.getPayMethod(); |
| | | BigDecimal paymentAmount = order.getPaymentAmount(); |
| | |
| | | } |
| | | if(2 == payMethod){ |
| | | //余额退款 |
| | | OrderBalancePayment orderBalancePayment = orderBalancePaymentService.getOne(new LambdaQueryWrapper<OrderBalancePayment>().eq(OrderBalancePayment::getOrderId, orderId)); |
| | | OrderBalancePayment orderBalancePayment = orderBalancePaymentService.getOne(new LambdaQueryWrapper<OrderBalancePayment>().eq(OrderBalancePayment::getOrderId, order.getId())); |
| | | BigDecimal balance = appUser.getBalance(); |
| | | appUser.setTotalRedPacketAmount(appUser.getTotalRedPacketAmount().add(orderBalancePayment.getRedPacketAmount()).setScale(2, RoundingMode.HALF_EVEN)); |
| | | appUser.setTotalDistributionAmount(appUser.getTotalDistributionAmount().add(orderBalancePayment.getDistributionAmount()).setScale(2, RoundingMode.HALF_EVEN)); |
| | |
| | | |
| | | //构建账户余额流水明细 |
| | | BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord(); |
| | | balanceChangeRecord.setOrderId(orderId); |
| | | balanceChangeRecord.setOrderId(order.getId()); |
| | | balanceChangeRecord.setAppUserId(order.getAppUserId()); |
| | | balanceChangeRecord.setChangeType(6); |
| | | balanceChangeRecord.setBeforeAmount(balance); |
| | |
| | | } |
| | | if(2 == order.getExpressPayMethod()){ |
| | | //余额退款 |
| | | OrderBalancePayment orderBalancePayment = orderBalancePaymentService.getOne(new LambdaQueryWrapper<OrderBalancePayment>().eq(OrderBalancePayment::getOrderId, orderId)); |
| | | OrderBalancePayment orderBalancePayment = orderBalancePaymentService.getOne(new LambdaQueryWrapper<OrderBalancePayment>().eq(OrderBalancePayment::getOrderId, order.getId())); |
| | | BigDecimal balance = appUser.getBalance(); |
| | | appUser.setTotalRedPacketAmount(appUser.getTotalRedPacketAmount().add(orderBalancePayment.getRedPacketAmount()).setScale(2, RoundingMode.HALF_EVEN)); |
| | | appUser.setTotalDistributionAmount(appUser.getTotalDistributionAmount().add(orderBalancePayment.getDistributionAmount()).setScale(2, RoundingMode.HALF_EVEN)); |
| | | appUser.setBalance(balance.add(expressAmount).setScale(2, RoundingMode.HALF_EVEN)); |
| | | //构建账户余额流水明细 |
| | | BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord(); |
| | | balanceChangeRecord.setOrderId(orderId); |
| | | balanceChangeRecord.setOrderId(order.getId()); |
| | | balanceChangeRecord.setAppUserId(order.getAppUserId()); |
| | | balanceChangeRecord.setChangeType(6); |
| | | balanceChangeRecord.setBeforeAmount(balance); |
| | |
| | | userPoint.setBalance(appUser.getLavePoint()); |
| | | userPoint.setCreateTime(LocalDateTime.now()); |
| | | userPoint.setAppUserId(order.getAppUserId()); |
| | | userPoint.setObjectId(orderId); |
| | | userPoint.setObjectId(order.getId()); |
| | | userPointClient.saveUserPoint(userPoint); |
| | | appUserClient.editAppUserById(appUser); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.account.api.feignClient.AppUserClient; |
| | | import com.ruoyi.account.api.model.AppUser; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.core.utils.bean.BeanUtils; |
| | | import com.ruoyi.common.security.service.TokenService; |
| | | import com.ruoyi.order.mapper.RefundPassMapper; |
| | | import com.ruoyi.order.model.Order; |
| | | import com.ruoyi.order.model.RefundPass; |
| | | import com.ruoyi.order.service.OrderService; |
| | | import com.ruoyi.order.service.RefundPassService; |
| | | import com.ruoyi.order.vo.ApplyRefundPass; |
| | | import com.ruoyi.order.vo.*; |
| | | import com.ruoyi.other.api.domain.BaseSetting; |
| | | import com.ruoyi.other.api.feignClient.BaseSettingClient; |
| | | import com.ruoyi.other.api.feignClient.ShopClient; |
| | | import com.ruoyi.other.api.feignClient.TechnicianClient; |
| | | 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.time.ZoneOffset; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | |
| | | @Resource |
| | | private BaseSettingClient baseSettingClient; |
| | | @Resource |
| | | private AppUserClient appUserClient; |
| | | @Resource |
| | | private TokenService tokenService; |
| | | |
| | | @Resource |
| | | private SysUserClient sysUserClient; |
| | | |
| | | |
| | | |
| | |
| | | orderService.updateById(order); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 管理后台获取售后管理列表数据 |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<OrderRefundPassList> getOrderRefundPassList(OrderRefundPassListVo refundPassListVo) { |
| | | Long userid = tokenService.getLoginUser().getUserid(); |
| | | SysUser sysUser = sysUserClient.getSysUser(userid).getData(); |
| | | Integer shopId = null; |
| | | if(2 == sysUser.getRoleType()){ |
| | | shopId = sysUser.getObjectId(); |
| | | } |
| | | List<Long> appUserIds = new ArrayList<>(); |
| | | //搜索条件,用户姓名 |
| | | if(StringUtils.isNotEmpty(refundPassListVo.getName())){ |
| | | List<AppUser> data = appUserClient.getAppUserByName(refundPassListVo.getName()).getData(); |
| | | List<Long> collect = data.stream().map(AppUser::getId).collect(Collectors.toList()); |
| | | appUserIds.addAll(collect); |
| | | } |
| | | //搜索条件,用户电话 |
| | | if(StringUtils.isNotEmpty(refundPassListVo.getPhone())){ |
| | | List<AppUser> data = appUserClient.getAppUserByPhone(refundPassListVo.getPhone()).getData(); |
| | | List<Long> collect = data.stream().map(AppUser::getId).collect(Collectors.toList()); |
| | | appUserIds.addAll(collect); |
| | | } |
| | | List<OrderRefundPassList> orderRefundPassList = this.baseMapper.getOrderRefundPassList(refundPassListVo.getCode(), appUserIds, shopId, refundPassListVo.getRefundMethod(), refundPassListVo.getStatus()); |
| | | for (OrderRefundPassList refundPassList : orderRefundPassList) { |
| | | AppUser appUser = appUserClient.getAppUserById(refundPassList.getAppUserId()); |
| | | refundPassList.setUserName(appUser.getName()); |
| | | refundPassList.setPhone(appUser.getPhone()); |
| | | } |
| | | return orderRefundPassList; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 售后订单审核操作 |
| | | * @param id |
| | | * @param status |
| | | * @param passRemark |
| | | * @return |
| | | */ |
| | | @Override |
| | | public R authPassStatus(Long id, Integer status, String passRemark) { |
| | | RefundPass refundPass = this.getById(id); |
| | | if(refundPass.getPassStatus() != 1){ |
| | | return R.fail("不能重复操作"); |
| | | } |
| | | refundPass.setPassStatus(status); |
| | | //退货退款 |
| | | if(refundPass.getRefundMethod() == 1 && 2 == status){ |
| | | refundPass.setStatus(4); |
| | | } |
| | | if(refundPass.getRefundMethod() == 2 && 2 == status){ |
| | | refundPass.setStatus(2); |
| | | } |
| | | refundPass.setPassRemark(passRemark); |
| | | this.updateById(refundPass); |
| | | //仅退款的售后需要将支付金额原路返回,然后再扣减支付获得的积分 |
| | | if(refundPass.getRefundMethod() == 2 && 2 == status){ |
| | | Order order = orderService.getById(refundPass.getOrderId()); |
| | | order.setOrderStatus(6); |
| | | orderService.updateById(order); |
| | | //返回订单支付金额和回退积分和会员等级 |
| | | orderService.refundPayMoney(order); |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 售后确认收货操作 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @Override |
| | | public R refundPassReceive(Long id) { |
| | | RefundPass refundPass = this.getById(id); |
| | | if(refundPass.getPassStatus() != 2){ |
| | | return R.fail("操作失败"); |
| | | } |
| | | if(refundPass.getStatus() != 5){ |
| | | return R.fail("操作失败"); |
| | | } |
| | | refundPass.setStatus(2); |
| | | this.updateById(refundPass); |
| | | //仅退款的售后需要将支付金额原路返回,然后再扣减支付获得的积分 |
| | | Order order = orderService.getById(refundPass.getOrderId()); |
| | | order.setOrderStatus(6); |
| | | orderService.updateById(order); |
| | | //返回订单支付金额和回退积分和会员等级 |
| | | orderService.refundPayMoney(order); |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取售后详情 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @Override |
| | | public RefundPassInfo getRefundPassInfo(Long id) { |
| | | RefundPass refundPass = this.getById(id); |
| | | OrderInfoVo orderInfo = orderService.getOrderInfo(refundPass.getOrderId()); |
| | | RefundPassInfo refundPassInfo = new RefundPassInfo(); |
| | | BeanUtils.copyBeanProp(refundPassInfo, orderInfo); |
| | | refundPassInfo.setId(id.toString()); |
| | | refundPassInfo.setPassStatus(refundPassInfo.getPassStatus()); |
| | | refundPassInfo.setPassRemark(refundPassInfo.getPassRemark()); |
| | | refundPassInfo.setPassCreateTime(refundPass.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); |
| | | refundPassInfo.setRefundMethod(refundPass.getRefundMethod()); |
| | | refundPassInfo.setRefundReason(refundPass.getRefundReason()); |
| | | refundPassInfo.setUserRemark(refundPass.getUserRemark()); |
| | | refundPassInfo.setPics(refundPass.getPics()); |
| | | return refundPassInfo; |
| | | } |
| | | } |
| | |
| | | price.setEarnSpendingPoints(goodsSeckill.getEarnSpendingPoints()); |
| | | price.setSuperiorSubcommission(goodsSeckill.getSuperiorSubcommission()); |
| | | price.setSuperiorRebatePoints(goodsSeckill.getSuperiorRebatePoints()); |
| | | price.setSuperiorType(goodsSeckill.getSuperiorType()); |
| | | price.setSuperiorType(String.valueOf(goodsSeckill.getSuperiorType())); |
| | | price.setServuceShopCharges(goodsSeckill.getServuceShopCharges()); |
| | | price.setServuceShopPoints(goodsSeckill.getServuceShopPoints()); |
| | | price.setTechnicianPoints(goodsSeckill.getTechnicianPoints()); |
New file |
| | |
| | | package com.ruoyi.order.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2024/12/16 16:09 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class OrderRefundPassList { |
| | | @ApiModelProperty("售后数据id") |
| | | private String id; |
| | | @ApiModelProperty("订单编号") |
| | | private String orderNumber; |
| | | @ApiModelProperty("下单用户") |
| | | private String userName; |
| | | @ApiModelProperty("联系电话") |
| | | private String phone; |
| | | @ApiModelProperty("申请时间") |
| | | private String createTime; |
| | | @ApiModelProperty("售后类型(1退货退款2仅退款)") |
| | | private Integer refundMethod; |
| | | @ApiModelProperty("申请原因") |
| | | private String refundReason; |
| | | @ApiModelProperty("状态(1待审核2同意3拒绝)") |
| | | private Integer passStatus; |
| | | /** |
| | | * 用户id |
| | | */ |
| | | private Long appUserId; |
| | | } |
New file |
| | |
| | | package com.ruoyi.order.vo; |
| | | |
| | | import com.ruoyi.common.core.web.page.BasePage; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2024/12/16 16:09 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class OrderRefundPassListVo extends BasePage { |
| | | @ApiModelProperty("订单编号") |
| | | private String code; |
| | | @ApiModelProperty("下单用户姓名") |
| | | private String name; |
| | | @ApiModelProperty("联系电话") |
| | | private String phone; |
| | | @ApiModelProperty("售后类型(1退货退款2仅退款)") |
| | | private Integer refundMethod; |
| | | @ApiModelProperty("售后状态(1待审核2已完成3已拒绝4待退货5待平台收货)") |
| | | private Integer status; |
| | | } |
New file |
| | |
| | | package com.ruoyi.order.vo; |
| | | |
| | | import com.ruoyi.order.util.vo.QueryKD100Vo; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2024/12/16 17:11 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class RefundPassInfo { |
| | | @ApiModelProperty("数据id") |
| | | private String id; |
| | | @ApiModelProperty("订单编号") |
| | | private String orderNumber; |
| | | @ApiModelProperty("下单时间") |
| | | private String createTime; |
| | | @ApiModelProperty("订单状态(1待发货2待收货3待使用4已完成5已取消6已退款7售后中8已评价)") |
| | | private Integer orderStatus; |
| | | @ApiModelProperty("下单用户") |
| | | private String userName; |
| | | @ApiModelProperty("联系电话") |
| | | private String phone; |
| | | @ApiModelProperty("订单类型") |
| | | private String orderType; |
| | | @ApiModelProperty("核销门店") |
| | | private String shopName; |
| | | @ApiModelProperty("支付方式(1=微信,2=余额,3=积分)") |
| | | private Integer paymentMethod; |
| | | @ApiModelProperty("订单总金额") |
| | | private BigDecimal totalAmount; |
| | | @ApiModelProperty("优惠券") |
| | | private String couponName; |
| | | @ApiModelProperty("抵扣金额") |
| | | private BigDecimal discountAmount; |
| | | @ApiModelProperty("快递费") |
| | | private BigDecimal expressAmount; |
| | | @ApiModelProperty("支付金额") |
| | | private BigDecimal paymentAmount; |
| | | @ApiModelProperty("获得积分") |
| | | private Integer point; |
| | | @ApiModelProperty("商品数量") |
| | | private Integer goodsNum; |
| | | @ApiModelProperty("商品信息") |
| | | private String goodsJson; |
| | | @ApiModelProperty("审核状态(1待审核2同意3拒绝)") |
| | | private Integer passStatus; |
| | | @ApiModelProperty("审核注释") |
| | | private Integer passRemark; |
| | | @ApiModelProperty("售后申请时间") |
| | | private String passCreateTime; |
| | | @ApiModelProperty("售后类型(1退货退款2仅退款)") |
| | | private Integer refundMethod; |
| | | @ApiModelProperty("申请原因") |
| | | private String refundReason; |
| | | @ApiModelProperty("备注") |
| | | private String userRemark; |
| | | @ApiModelProperty("申请图片") |
| | | private String pics; |
| | | } |
| | |
| | | <?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.account.mapper.RefundPassMapper"> |
| | | <mapper namespace="com.ruoyi.order.mapper.RefundPassMapper"> |
| | | |
| | | |
| | | |
| | | <select id="getOrderRefundPassList" resultType="com.ruoyi.order.vo.OrderRefundPassList"> |
| | | select |
| | | a.id, |
| | | b.order_number as orderNumber, |
| | | b.app_user_id as appUserId, |
| | | DATE_FORMAT(a.create_time, '%Y-%m-%d %H:%m:%s') as createTime, |
| | | a.refund_method as refundMethod, |
| | | a.refund_reason as refundReason, |
| | | a.pass_status as passStatus |
| | | from t_refund_pass a |
| | | left join t_order b on (a.order_id = b.id) |
| | | where a.del_flag = 0 |
| | | <if test="null != code and '' != code"> |
| | | and b.order_number like CONCAT('%', #{code}, '%') |
| | | </if> |
| | | <if test="null != appUserIds and appUserIds.size() > 0"> |
| | | and b.app_user_id in |
| | | <foreach collection="appUserIds" item="item" index="index" open="(" separator="," close=")"> |
| | | #{item} |
| | | </foreach> |
| | | </if> |
| | | <if test="null != refundMethod"> |
| | | and a.refund_method = #{refundMethod} |
| | | </if> |
| | | <if test="null != status"> |
| | | and a.status = #{status} |
| | | </if> |
| | | <if test="null != shopId"> |
| | | and b.shop_id = #{shopId} and b.order_type = 1 |
| | | </if> |
| | | order by a.create_time desc |
| | | </select> |
| | | </mapper> |
| | |
| | | package com.ruoyi.other.controller; |
| | | |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.other.api.domain.BaseSetting; |
| | | import com.ruoyi.other.service.BaseSettingService; |
| | | import com.ruoyi.other.vo.RefundPassSettingVo; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.web.bind.annotation.*; |
| | |
| | | } |
| | | |
| | | |
| | | @PostMapping("/setRefundPassSetting") |
| | | @ApiOperation(value = "保存售后设置", tags = {"管理后台-售后管理"}) |
| | | public R setRefundPassSetting(@RequestBody RefundPassSettingVo settingVo){ |
| | | BaseSetting one = baseSettingService.getOne(new LambdaQueryWrapper<BaseSetting>().eq(BaseSetting::getId, 5)); |
| | | if(null == one){ |
| | | one = new BaseSetting(); |
| | | one.setId(5); |
| | | one.setContent(JSON.toJSONString(settingVo)); |
| | | baseSettingService.save(one); |
| | | }else{ |
| | | one.setContent(JSON.toJSONString(settingVo)); |
| | | baseSettingService.updateById(one); |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | |
| | | |
| | | @PostMapping("/getRefundPassSetting") |
| | | @ApiOperation(value = "获取售后设置", tags = {"管理后台-售后管理"}) |
| | | public R<RefundPassSettingVo> getRefundPassSetting(){ |
| | | BaseSetting one = baseSettingService.getOne(new LambdaQueryWrapper<BaseSetting>().eq(BaseSetting::getId, 5)); |
| | | if(null != one){ |
| | | RefundPassSettingVo refundPassSettingVo = JSON.parseObject(one.getContent(), RefundPassSettingVo.class); |
| | | return R.ok(refundPassSettingVo); |
| | | } |
| | | return R.ok(); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Arrays; |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.ArrayList; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | } |
| | | String personIds = byId.getPersonIds(); |
| | | if (StringUtils.isNotEmpty(personIds)){ |
| | | List<AppUser> appUserList = appUserClient.listByIds(Arrays.asList(personIds.split(","))); |
| | | List<Long> ids = Arrays.stream(personIds.split(",")).map(Long::valueOf).collect(Collectors.toList()); |
| | | List<AppUser> appUserList = appUserClient.listByIds(ids); |
| | | byId.setAppUserList(appUserList); |
| | | } |
| | | |
| | |
| | | import com.ruoyi.account.api.model.AppUser; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.core.web.controller.BaseController; |
| | | import com.ruoyi.common.core.web.page.TableDataInfo; |
| | | import com.ruoyi.common.security.service.TokenService; |
| | | import com.ruoyi.other.api.domain.*; |
| | | import com.ruoyi.other.api.vo.GetGoodsBargainPrice; |
| | | import com.ruoyi.other.service.*; |
| | | 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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.controller.BaseController; |
| | | import com.ruoyi.common.core.web.page.TableDataInfo; |
| | | import com.ruoyi.other.api.domain.GoodsShop; |
| | | import com.ruoyi.other.api.vo.GetGoodsShopByGoodsIds; |
| | | import com.ruoyi.other.service.GoodsShopService; |
| | | import com.ruoyi.other.vo.ShopGoodsList; |
| | | import com.ruoyi.other.vo.ShopGoodsListVo; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/goods-shop") |
| | | public class GoodsShopController { |
| | | public class GoodsShopController extends BaseController { |
| | | |
| | | @Resource |
| | | private GoodsShopService goodsShopService; |
| | |
| | | .in(goodsIds.getGoodsIds() !=null ,GoodsShop::getGoodsId, goodsIds.getGoodsIds())); |
| | | return R.ok(list); |
| | | } |
| | | |
| | | |
| | | |
| | | @ResponseBody |
| | | @GetMapping("/getShopGoodsList") |
| | | @ApiOperation(value = "获取商品管理列表", tags = {"门店后台-商品管理"}) |
| | | public TableDataInfo<ShopGoodsList> getShopGoodsList(ShopGoodsListVo shopGoodsListVo){ |
| | | startPage(); |
| | | List<ShopGoodsList> shopGoodsList = goodsShopService.getShopGoodsList(shopGoodsListVo); |
| | | return getDataTable(shopGoodsList); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | |
| | | import com.ruoyi.account.api.model.AppUser; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.other.api.domain.RedPackegeSet; |
| | | import com.ruoyi.other.dto.RedPackegeSetDto; |
| | | import com.ruoyi.other.service.RedPackegeSetService; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | |
| | | import org.springframework.web.bind.annotation.ResponseBody; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | */ |
| | | @ApiOperation(value = "获取红包配置", tags = {"管理后台-活动管理-签到红包"}) |
| | | @GetMapping("/getRedPackegeSet") |
| | | public R<RedPackegeSet> getRedPackegeSet(){ |
| | | return R.ok(redPackegeSetService.getOne(null)); |
| | | public R<RedPackegeSetDto> getRedPackegeSet(){ |
| | | List<RedPackegeSet> redPackegeSetList = redPackegeSetService.list(); |
| | | RedPackegeSetDto redPackegeSetDto = new RedPackegeSetDto(); |
| | | redPackegeSetDto.setRedPackegeSets(redPackegeSetList); |
| | | return R.ok(redPackegeSetDto); |
| | | } |
| | | |
| | | |
| | |
| | | * 添加红包配置 |
| | | */ |
| | | @ApiOperation(value = "添加红包配置", tags = {"管理后台-活动管理-签到红包"}) |
| | | @GetMapping("/addRedPackegeSet") |
| | | public R<Void> addRedPackegeSet(RedPackegeSet redPackegeSet){ |
| | | RedPackegeSet one = redPackegeSetService.getOne(null); |
| | | if (one==null){ |
| | | redPackegeSet.setId(1); |
| | | redPackegeSetService.save(redPackegeSet); |
| | | }else { |
| | | if (one.getId()==null){ |
| | | return R.fail("参数错误"); |
| | | } |
| | | redPackegeSetService.updateById(redPackegeSet); |
| | | } |
| | | @PostMapping("/addRedPackegeSet") |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public R<Void> addRedPackegeSet(@RequestBody RedPackegeSetDto redPackegeSets){ |
| | | redPackegeSetService.remove(null); |
| | | List<RedPackegeSet> redPackegeSetList = redPackegeSets.getRedPackegeSets(); |
| | | redPackegeSetService.saveBatch(redPackegeSetList); |
| | | return R.ok(); |
| | | } |
| | | |
| | |
| | | import com.ruoyi.other.service.ShopService; |
| | | import com.ruoyi.other.vo.NearbyShopVO; |
| | | import com.ruoyi.other.vo.ShopDetailVO; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.feignClient.SysUserClient; |
| | | import com.ruoyi.system.api.model.LoginUser; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | |
| | | private ShopScoreService shopScoreService; |
| | | @Resource |
| | | private TokenService tokenService; |
| | | @Resource |
| | | private SysUserClient sysUserClient; |
| | | |
| | | |
| | | |
| | |
| | | return R.ok(shopService.cheUserByPhone(phone)); |
| | | } |
| | | |
| | | /** |
| | | * 重置密码 |
| | | */ |
| | | @GetMapping ("/resetPassword") |
| | | @ApiOperation(value = "重置密码", tags = {"管理后台-门店管理"}) |
| | | public R<Void> resetPassword(@RequestParam(value = "ids") String ids) { |
| | | String[] idsArr = ids.split(","); |
| | | for (String id : idsArr) { |
| | | Shop shop = shopService.getById(Integer.valueOf(id)); |
| | | R<SysUser> sysUser = sysUserClient.getSysUser(shop.getAppUserId()); |
| | | SysUser userData = sysUser.getData(); |
| | | userData.setPassword(getLastSixDigits(userData.getPhonenumber())); |
| | | sysUserClient.resetPassword(userData); |
| | | } |
| | | return R.ok(); |
| | | } |
| | | |
| | | /** |
| | | * 获取手机号的后六位。 |
| | | * |
| | | * @param phoneNumber 以字符串形式提供的手机号 |
| | | * @return 手机号的后六位 |
| | | * @throws IllegalArgumentException 如果手机号长度不足六位 |
| | | */ |
| | | public String getLastSixDigits(String phoneNumber) { |
| | | if (phoneNumber == null || phoneNumber.length() < 6) { |
| | | throw new IllegalArgumentException("手机号长度不足六位"); |
| | | } |
| | | // 取字符串的最后六位 |
| | | return phoneNumber.substring(phoneNumber.length() - 6); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 附近门店列表 |
| | |
| | | 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.bean.BeanUtils; |
| | | import com.ruoyi.common.core.utils.poi.ExcelUtil; |
| | | import com.ruoyi.other.api.domain.ShopPoint; |
| | | import com.ruoyi.other.excel.ShopPointEX; |
| | | import com.ruoyi.other.service.ShopPointService; |
| | | import com.ruoyi.other.vo.ShopPointStatistics; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | /** |
| | | * 门店积分统计 |
| | | */ |
| | | public Object statistics() { |
| | | return shopPointService.statistics(); |
| | | @GetMapping("/statistics") |
| | | @ApiModelProperty("门店积分统计") |
| | | public R<ShopPointStatistics> statistics(ShopPoint shopPoint) { |
| | | ShopPointStatistics statistics = shopPointService.statistics(Page.of(shopPoint.getPageNum(), shopPoint.getPageSize()), shopPoint); |
| | | return R.ok(statistics); |
| | | } |
| | | |
| | | /** |
| | | * 导出门店积分统计 |
| | | */ |
| | | @GetMapping("/export") |
| | | @ApiModelProperty("导出门店积分统计") |
| | | public void export(HttpServletResponse response , ShopPoint shopPoint) { |
| | | ShopPointStatistics statistics = shopPointService.statistics(Page.of(1, Integer.MAX_VALUE), shopPoint); |
| | | if (statistics!=null){ |
| | | IPage<ShopPoint> shopPointIPage = statistics.getShopPointIPage(); |
| | | List<ShopPointEX> shopPointEXList = new ArrayList<>(); |
| | | if (shopPointIPage!=null){ |
| | | List<ShopPoint> records = shopPointIPage.getRecords(); |
| | | if (records!=null){ |
| | | for (ShopPoint record : records) { |
| | | ShopPointEX shopPointEX = new ShopPointEX(); |
| | | BeanUtils.copyBeanProp(shopPointEX, record); |
| | | Integer type = record.getType(); |
| | | switch (type) { |
| | | case 1: |
| | | shopPointEX.setType("门店业绩"); |
| | | break; |
| | | case 2: |
| | | shopPointEX.setType("门店返佣"); |
| | | break; |
| | | default: |
| | | shopPointEX.setType("下级门店返佣"); |
| | | break; |
| | | } |
| | | shopPointEXList.add(shopPointEX); |
| | | } |
| | | } |
| | | |
| | | ExcelUtil<ShopPointEX> util = new ExcelUtil<>(ShopPointEX.class); |
| | | util.exportExcel(response, shopPointEXList, "用户积分统计"); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | import com.ruoyi.other.api.domain.VipGood; |
| | | import com.ruoyi.other.api.domain.VipSetting; |
| | | import com.ruoyi.other.api.feignClient.GoodsClient; |
| | | import com.ruoyi.other.dto.SetDto; |
| | | import com.ruoyi.other.dto.VipSetDto; |
| | | import com.ruoyi.other.service.BaseSettingService; |
| | | import com.ruoyi.other.service.VipGoodService; |
| | |
| | | } |
| | | @PostMapping("/manage/level/set") |
| | | @ApiOperation(value = "设置", tags = {"后台-会员等级设置"}) |
| | | public R<Void> managelevelset(@RequestBody List<VipSetting> vipSettingList) { |
| | | vipSettingService.updateBatchById(vipSettingList); |
| | | public R<Void> managelevelset(@RequestBody SetDto setDto) { |
| | | vipSettingService.updateBatchById(setDto.getVipSettingList()); |
| | | return R.ok(); |
| | | } |
| | | |
New file |
| | |
| | | package com.ruoyi.other.dto; |
| | | |
| | | public class GoodsAreaDto { |
| | | } |
New file |
| | |
| | | package com.ruoyi.other.dto; |
| | | |
| | | import com.ruoyi.other.api.domain.RedPackegeSet; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | public class RedPackegeSetDto { |
| | | private List<RedPackegeSet> redPackegeSets; |
| | | } |
New file |
| | |
| | | package com.ruoyi.other.excel; |
| | | |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import lombok.Data; |
| | | |
| | | import java.time.LocalDateTime; |
| | | |
| | | @Data |
| | | public class ShopPointEX { |
| | | @Excel(name = "变动类型") |
| | | private String type; |
| | | |
| | | @Excel(name = "历史余额") |
| | | private Integer historicalPoint; |
| | | |
| | | @Excel(name = "变动金额") |
| | | private Integer variablePoint; |
| | | |
| | | @Excel(name = "变动时间") |
| | | private LocalDateTime createTime; |
| | | |
| | | @Excel(name = "变动用户id") |
| | | private Long createUserId; |
| | | |
| | | @Excel(name = "关联对象id") |
| | | private Long objectId; |
| | | |
| | | @Excel(name = "门店名称") |
| | | private String shopName; |
| | | |
| | | @Excel(name = "店长姓名") |
| | | private String shopLeaderName; |
| | | |
| | | @Excel(name = "联系电话") |
| | | private String phone; |
| | | |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.other.api.domain.GoodsShop; |
| | | import com.ruoyi.other.vo.ShopGoodsList; |
| | | import com.ruoyi.other.vo.ShopGoodsListVo; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | */ |
| | | public interface GoodsShopMapper extends BaseMapper<GoodsShop> { |
| | | |
| | | |
| | | /** |
| | | * 获取门店授权的服务商品 |
| | | * @param shopId |
| | | * @param goodsId |
| | | * @param goodsName |
| | | * @param goodsCategoryId |
| | | * @return |
| | | */ |
| | | List<ShopGoodsList> getShopGoodsList(@Param("shopId") Integer shopId, @Param("goodsId") String goodsId, |
| | | @Param("goodsName") String goodsName, @Param("goodsCategoryId") Integer goodsCategoryId); |
| | | |
| | | } |
| | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.ruoyi.other.api.domain.ShopPoint; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | | * Mapper 接口 |
| | |
| | | */ |
| | | public interface ShopPointMapper extends BaseMapper<ShopPoint> { |
| | | |
| | | List<ShopPoint> findLatestChangeByType(ShopPoint shopPoint); |
| | | |
| | | } |
| | |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.other.api.domain.GoodsShop; |
| | | import com.ruoyi.other.vo.ShopGoodsList; |
| | | import com.ruoyi.other.vo.ShopGoodsListVo; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | */ |
| | | public interface GoodsShopService extends IService<GoodsShop> { |
| | | |
| | | /** |
| | | * 获取门店授权的服务商品 |
| | | * @param shopGoodsListVo |
| | | * @return |
| | | */ |
| | | List<ShopGoodsList> getShopGoodsList(ShopGoodsListVo shopGoodsListVo); |
| | | } |
| | |
| | | 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.ShopPoint; |
| | | import com.ruoyi.other.vo.ShopPointStatistics; |
| | |
| | | */ |
| | | public interface ShopPointService extends IService<ShopPoint> { |
| | | |
| | | ShopPointStatistics statistics(); |
| | | ShopPointStatistics statistics(IPage<ShopPoint> page, ShopPoint shopPoint); |
| | | } |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | if (CollectionUtils.isEmpty(goodsShopList)){ |
| | | throw new NullPointerException("请选择指定门店"); |
| | | } |
| | | for (GoodsShop goodsShop : goodsShopList) { |
| | | goodsShop.setGoodsId(goods.getId()); |
| | | goodsShop.setId(null); |
| | | } |
| | | goodsShopService.saveBatch(goodsShopList); |
| | | } |
| | | |
| | | // 指定用户 |
| | | List<GoodsAppUser> goodsAppUserList = goods.getGoodsAppUserList(); |
| | | if (!CollectionUtils.isEmpty(goodsAppUserList)){ |
| | | for (GoodsAppUser goodsAppUser : goodsAppUserList) { |
| | | goodsAppUser.setId(null ); |
| | | goodsAppUser.setGoodsId(goods.getId()); |
| | | } |
| | | goodsAppUserService.saveBatch(goodsAppUserList); |
| | | } |
| | | |
| | | // 会员价格配置 |
| | | List<GoodsVip> goodsVipList = goods.getGoodsVipList(); |
| | | for (GoodsVip goodsVip : goodsVipList) { |
| | | goodsVip.setId(null); |
| | | goodsVip.setGoodsId(goods.getId()); |
| | | } |
| | | goodsVipService.saveBatch(goodsVipList); |
| | | |
| | | // 特殊地区售价设置 |
| | | List<GoodsArea> goodsAreaList = goods.getGoodsAreaList(); |
| | | if (!CollectionUtils.isEmpty(goodsAreaList)){ |
| | | goodsAreaService.saveBatch(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()); |
| | | goodsAreaList1.add(area); |
| | | } |
| | | goodsAreaService.saveBatch(goodsAreaList1); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | @Override |
| | |
| | | |
| | | // 特殊地区售价设置 |
| | | List<GoodsArea> goodsAreaList = goods.getGoodsAreaList(); |
| | | goodsAreaService.updateBatchById(goodsAreaList); |
| | | 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()); |
| | | goodsAreaList1.add(area); |
| | | } |
| | | goodsAreaService.updateBatchById(goodsAreaList1); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | // 特殊地区售价设置 |
| | | List<GoodsArea> goodsAreaList = goodsAreaService.list(new LambdaQueryWrapper<GoodsArea>() |
| | | .eq(GoodsArea::getGoodsId, goodsId)); |
| | | goods.setGoodsAreaList(goodsAreaList); |
| | | |
| | | Map<String, List<GoodsArea>> listMap = goodsAreaList.stream() |
| | | .collect(Collectors.groupingBy(goodsArea -> |
| | | goodsArea.getProvinceCode() + goodsArea.getCityCode() + goodsArea.getDistrictsCode())); |
| | | |
| | | List<GoodsArea> goodsAreaList1 = new ArrayList<>(); |
| | | listMap.forEach((s, goodsAreas) -> { |
| | | GoodsArea goodsArea = goodsAreas.get(0); |
| | | goodsArea.setGoodsAreaList(goodsAreas); |
| | | goodsAreaList1.add(goodsArea); |
| | | }); |
| | | |
| | | goods.setGoodsAreaList(goodsAreaList1); |
| | | return goods; |
| | | } |
| | | } |
| | |
| | | package com.ruoyi.other.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.ruoyi.common.security.service.TokenService; |
| | | import com.ruoyi.other.mapper.GoodsShopMapper; |
| | | import com.ruoyi.other.api.domain.GoodsShop; |
| | | import com.ruoyi.other.service.GoodsShopService; |
| | | import com.ruoyi.other.vo.ShopGoodsList; |
| | | import com.ruoyi.other.vo.ShopGoodsListVo; |
| | | 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.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | @Service |
| | | public class GoodsShopServiceImpl extends ServiceImpl<GoodsShopMapper, GoodsShop> implements GoodsShopService { |
| | | |
| | | @Resource |
| | | private TokenService tokenService; |
| | | |
| | | @Resource |
| | | private SysUserClient sysUserClient; |
| | | |
| | | |
| | | |
| | | /** |
| | | * 获取门店授权的服务商品 |
| | | * @param shopGoodsListVo |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<ShopGoodsList> getShopGoodsList(ShopGoodsListVo shopGoodsListVo) { |
| | | Long userid = tokenService.getLoginUser().getUserid(); |
| | | SysUser sysUser = sysUserClient.getSysUser(userid).getData(); |
| | | List<ShopGoodsList> shopGoodsList = this.baseMapper.getShopGoodsList(sysUser.getObjectId(), shopGoodsListVo.getId(), shopGoodsListVo.getName(), shopGoodsListVo.getGoodsCategoryId()); |
| | | return shopGoodsList; |
| | | } |
| | | } |
| | |
| | | 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.account.api.feignClient.AppUserClient; |
| | | import com.ruoyi.account.api.model.AppUser; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.other.api.domain.Shop; |
| | | import com.ruoyi.other.mapper.ShopPointMapper; |
| | | import com.ruoyi.other.api.domain.ShopPoint; |
| | | import com.ruoyi.other.service.ShopPointService; |
| | | import com.ruoyi.other.service.ShopService; |
| | | import com.ruoyi.other.vo.ShopPointStatistics; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | */ |
| | | @Service |
| | | public class ShopPointServiceImpl extends ServiceImpl<ShopPointMapper, ShopPoint> implements ShopPointService { |
| | | @Resource |
| | | private ShopPointMapper shopPointMapper; |
| | | @Resource |
| | | private ShopService shopService; |
| | | |
| | | @Override |
| | | public ShopPointStatistics statistics() { |
| | | public ShopPointStatistics statistics(IPage<ShopPoint> page, ShopPoint shopPoint) { |
| | | |
| | | String shopName = shopPoint.getShopName(); |
| | | String phone = shopPoint.getPhone(); |
| | | String shopLeaderName = shopPoint.getShopLeaderName(); |
| | | if (StringUtils.isNotEmpty(shopName) || StringUtils.isNotEmpty(phone) || StringUtils.isNotEmpty(shopLeaderName)) { |
| | | List<Integer> shopIds = shopService.listObjs(new LambdaQueryWrapper<Shop>() |
| | | .select(Shop::getId) |
| | | .like(StringUtils.isNotEmpty(shopName), Shop::getName, shopName) |
| | | .like(StringUtils.isNotEmpty(phone), Shop::getPhone, phone) |
| | | .like(StringUtils.isNotEmpty(shopLeaderName), Shop::getShopManager, shopLeaderName)) |
| | | .stream().map(o -> (Integer) o).collect(Collectors.toList()); |
| | | |
| | | shopPoint.setShopIds(shopIds); |
| | | } |
| | | |
| | | |
| | | ShopPointStatistics shopPointStatistics = new ShopPointStatistics(); |
| | | return null; |
| | | List<ShopPoint> latestChangeByType = shopPointMapper.findLatestChangeByType(shopPoint); |
| | | for (ShopPoint sp : latestChangeByType) { |
| | | switch (sp.getType()) { |
| | | case 1: |
| | | shopPointStatistics.setShopPoint(sp.getVariablePoint()); |
| | | break; |
| | | case 2: |
| | | shopPointStatistics.setShopCommissionPoint(sp.getVariablePoint()); |
| | | break; |
| | | case 3: |
| | | shopPointStatistics.setSubShopCommissionPoint(sp.getVariablePoint()); |
| | | break; |
| | | } |
| | | } |
| | | shopPointStatistics.setTotalPoint(shopPointStatistics.getShopPoint() + shopPointStatistics.getShopCommissionPoint() + shopPointStatistics.getSubShopCommissionPoint()); |
| | | |
| | | |
| | | boolean condition = shopPoint.getStartTime() != null && shopPoint.getEndTime() != null; |
| | | IPage<ShopPoint> shopPointIPage = page(page, new LambdaQueryWrapper<ShopPoint>() |
| | | .in(!CollectionUtils.isEmpty(shopPoint.getShopIds()), ShopPoint::getShopId, shopPoint.getShopIds()) |
| | | .eq(shopPoint.getType() != null, ShopPoint::getType, shopPoint.getType()) |
| | | .between(condition, ShopPoint::getCreateTime, shopPoint.getStartTime(), shopPoint.getEndTime()) |
| | | .orderByDesc(ShopPoint::getCreateTime)); |
| | | List<ShopPoint> shopPoints = shopPointIPage.getRecords(); |
| | | for (ShopPoint sp : shopPoints) { |
| | | Shop shop = shopService.getById(sp.getShopId()); |
| | | sp.setShopName(shop.getName()); |
| | | sp.setShopLeaderName(shop.getShopManager()); |
| | | sp.setPhone(shop.getPhone()); |
| | | } |
| | | shopPointStatistics.setShopPointIPage(shopPointIPage); |
| | | return shopPointStatistics; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.other.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2024/12/16 15:55 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class RefundPassSettingVo { |
| | | @ApiModelProperty("收货人姓名") |
| | | private String name; |
| | | @ApiModelProperty("收货人电话") |
| | | private String phone; |
| | | @ApiModelProperty("收货地址") |
| | | private String address; |
| | | @ApiModelProperty("售后周期") |
| | | private Integer days; |
| | | } |
New file |
| | |
| | | package com.ruoyi.other.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2024/12/16 17:32 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class ShopGoodsList { |
| | | @ApiModelProperty("商品id") |
| | | private String id; |
| | | @ApiModelProperty("商品名称") |
| | | private String name; |
| | | @ApiModelProperty("商品分类") |
| | | private String goodsCategory; |
| | | } |
New file |
| | |
| | | package com.ruoyi.other.vo; |
| | | |
| | | import com.ruoyi.common.core.web.page.BasePage; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * @author zhibing.pu |
| | | * @Date 2024/12/16 17:32 |
| | | */ |
| | | @Data |
| | | @ApiModel |
| | | public class ShopGoodsListVo extends BasePage { |
| | | @ApiModelProperty("商品id") |
| | | private String id; |
| | | @ApiModelProperty("商品名称") |
| | | private String name; |
| | | @ApiModelProperty("商品分类id") |
| | | private Integer goodsCategoryId; |
| | | } |
| | |
| | | package com.ruoyi.other.vo; |
| | | |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.ruoyi.other.api.domain.ShopPoint; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | |
| | | @ApiModelProperty("下级门店返佣积分") |
| | | private Integer subShopCommissionPoint; |
| | | |
| | | private List<ShopPoint> shopPointList; |
| | | private IPage<ShopPoint> shopPointIPage; |
| | | } |
| | |
| | | tgc.`name`, |
| | | tg.operating_cost, |
| | | tg.shop_cost, |
| | | tg.`status` |
| | | tg.`status`, |
| | | tg.purchase_limit, |
| | | tg.sale_num |
| | | FROM |
| | | t_goods tg |
| | | LEFT JOIN t_goods_category tgc ON tg.goods_category_id = tgc.id |
| | | <where> |
| | | tg.del_flag = 0 |
| | | <if test="goods.id != null"> |
| | | <if test="goods.id != null"> |
| | | and tg.id = #{goods.id} |
| | | </if> |
| | |
| | | and tg.type = #{goods.type} |
| | | </if> |
| | | <if test="goods.goodsCategoryId != null"> |
| | | and tg.goodsCategoryId = #{goods.goodsCategoryId} |
| | | and tg.goods_category_id = #{goods.goodsCategoryId} |
| | | </if> |
| | | <if test="goods.status != null"> |
| | | and tg.`status` = #{goods.status} |
| | | </if> |
| | | </if> |
| | | </where> |
| | | </select> |
New file |
| | |
| | | <?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.GoodsShopMapper"> |
| | | |
| | | <select id="getShopGoodsList" resultType="com.ruoyi.other.vo.ShopGoodsList"> |
| | | select |
| | | a.id, |
| | | a.name, |
| | | b.name as goodsCategory |
| | | from t_goods a |
| | | left join t_goods_category b on (a.goods_category_id = b.id) |
| | | where a.type = 1 and a.del_flag = 0 and a.status = 2 and (a.appoint_store = 2 or a.id in (select goods_id from t_goods_shop where shop_id = #{shopId})) |
| | | <if test="null != goodsId and '' != goodsId"> |
| | | and a.id like CONCAT('%', #{goodsId}, '%') |
| | | </if> |
| | | <if test="null != goodsName and '' != goodsName"> |
| | | and a.name like CONCAT('%', #{goodsName}, '%') |
| | | </if> |
| | | <if test="null != goodsCategoryId"> |
| | | and a.goods_category_id = #{goodsCategoryId} |
| | | </if> |
| | | order by a.create_time desc |
| | | </select> |
| | | </mapper> |
New file |
| | |
| | | <?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.ShopPointMapper"> |
| | | |
| | | <select id="findLatestChangeByType" resultType="com.ruoyi.other.api.domain.ShopPoint"> |
| | | SELECT |
| | | id, |
| | | shop_id, |
| | | type, |
| | | historical_point, |
| | | variable_point, |
| | | create_time, |
| | | create_user_id, |
| | | object_id |
| | | FROM |
| | | ( |
| | | SELECT |
| | | id, |
| | | shop_id, |
| | | type, |
| | | historical_point, |
| | | variable_point, |
| | | create_time, |
| | | create_user_id, |
| | | object_id, |
| | | ROW_NUMBER() OVER ( PARTITION BY type ORDER BY create_time DESC ) AS rn |
| | | FROM |
| | | t_shop_point |
| | | |
| | | <where> |
| | | <if test="shopIds != null and shopIds.size() > 0"> |
| | | AND shop_id IN |
| | | <foreach collection="shopIds" item="shopId" open="(" close=")" separator=","> |
| | | #{shopId} |
| | | </foreach> |
| | | </if> |
| | | <if test="type != null"> |
| | | AND `type` = #{type} |
| | | </if> |
| | | <if test="startTime != null and endTime != null"> |
| | | AND create_time BETWEEN #{startTime} AND #{endTime} |
| | | </if> |
| | | </where> |
| | | ) AS subquery |
| | | WHERE |
| | | rn = 1 |
| | | </select> |
| | | </mapper> |