diff --git a/src/main/java/com/gxwebsoft/shop/controller/ShopDealerApplyController.java b/src/main/java/com/gxwebsoft/shop/controller/ShopDealerApplyController.java index 41cde3a..e7c1807 100644 --- a/src/main/java/com/gxwebsoft/shop/controller/ShopDealerApplyController.java +++ b/src/main/java/com/gxwebsoft/shop/controller/ShopDealerApplyController.java @@ -109,6 +109,11 @@ public class ShopDealerApplyController extends BaseController { @PutMapping() public ApiResult update(@RequestBody ShopDealerApply shopDealerApply) { shopDealerApply.setAuditTime(null); + if(shopDealerApply.getRate() != null){ + final ShopDealerUser dealerUser = new ShopDealerUser(); + dealerUser.setRate(shopDealerApply.getRate()); + shopDealerUserService.update(dealerUser, new LambdaQueryWrapper().eq(ShopDealerUser::getUserId, shopDealerApply.getUserId())); + } if (shopDealerApplyService.updateById(shopDealerApply)) { if (shopDealerApply.getApplyStatus().equals(20)) { LocalDateTime now = LocalDateTime.now(); diff --git a/src/main/java/com/gxwebsoft/shop/controller/ShopDealerRecordController.java b/src/main/java/com/gxwebsoft/shop/controller/ShopDealerRecordController.java new file mode 100644 index 0000000..69cc1fa --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/controller/ShopDealerRecordController.java @@ -0,0 +1,128 @@ +package com.gxwebsoft.shop.controller; + +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.shop.entity.ShopDealerRecord; +import com.gxwebsoft.shop.param.ShopDealerRecordParam; +import com.gxwebsoft.shop.service.ShopDealerRecordService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 客户跟进情况控制器 + * + * @author 科技小王子 + * @since 2025-10-02 12:21:50 + */ +@Api(tags = "客户跟进情况管理") +@RestController +@RequestMapping("/api/shop/shop-dealer-record") +public class ShopDealerRecordController extends BaseController { + @Resource + private ShopDealerRecordService shopDealerRecordService; + + @PreAuthorize("hasAuthority('shop:shopDealerRecord:list')") + @ApiOperation("分页查询客户跟进情况") + @GetMapping("/page") + public ApiResult> page(ShopDealerRecordParam param) { + // 使用关联查询 + return success(shopDealerRecordService.pageRel(param)); + } + + @PreAuthorize("hasAuthority('shop:shopDealerRecord:list')") + @ApiOperation("查询全部客户跟进情况") + @GetMapping() + public ApiResult> list(ShopDealerRecordParam param) { + // 使用关联查询 + return success(shopDealerRecordService.listRel(param)); + } + + @PreAuthorize("hasAuthority('shop:shopDealerRecord:list')") + @ApiOperation("根据id查询客户跟进情况") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(shopDealerRecordService.getByIdRel(id)); + } + + @PreAuthorize("hasAuthority('shop:shopDealerRecord:save')") + @OperationLog + @ApiOperation("添加客户跟进情况") + @PostMapping() + public ApiResult save(@RequestBody ShopDealerRecord shopDealerRecord) { + // 记录当前登录用户id + User loginUser = getLoginUser(); + if (loginUser != null) { + shopDealerRecord.setUserId(loginUser.getUserId()); + } + if (shopDealerRecordService.save(shopDealerRecord)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('shop:shopDealerRecord:update')") + @OperationLog + @ApiOperation("修改客户跟进情况") + @PutMapping() + public ApiResult update(@RequestBody ShopDealerRecord shopDealerRecord) { + if (shopDealerRecordService.updateById(shopDealerRecord)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('shop:shopDealerRecord:remove')") + @OperationLog + @ApiOperation("删除客户跟进情况") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (shopDealerRecordService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('shop:shopDealerRecord:save')") + @OperationLog + @ApiOperation("批量添加客户跟进情况") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (shopDealerRecordService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('shop:shopDealerRecord:update')") + @OperationLog + @ApiOperation("批量修改客户跟进情况") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(shopDealerRecordService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('shop:shopDealerRecord:remove')") + @OperationLog + @ApiOperation("批量删除客户跟进情况") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (shopDealerRecordService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } + +} diff --git a/src/main/java/com/gxwebsoft/shop/entity/ShopDealerApply.java b/src/main/java/com/gxwebsoft/shop/entity/ShopDealerApply.java index 7e1c250..ca0c9bb 100644 --- a/src/main/java/com/gxwebsoft/shop/entity/ShopDealerApply.java +++ b/src/main/java/com/gxwebsoft/shop/entity/ShopDealerApply.java @@ -60,6 +60,10 @@ public class ShopDealerApply implements Serializable { @Schema(description = "详细地址") private String address; + @Schema(description = "佣金比例") + @TableField(exist = false) + private BigDecimal rate; + @Schema(description = "推荐人用户ID") private Integer refereeId; diff --git a/src/main/java/com/gxwebsoft/shop/entity/ShopDealerRecord.java b/src/main/java/com/gxwebsoft/shop/entity/ShopDealerRecord.java new file mode 100644 index 0000000..347d1a3 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/entity/ShopDealerRecord.java @@ -0,0 +1,64 @@ +package com.gxwebsoft.shop.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 客户跟进情况 + * + * @author 科技小王子 + * @since 2025-10-02 12:21:50 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "ShopDealerRecord对象", description = "客户跟进情况") +public class ShopDealerRecord implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "ID") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "上级id, 0是顶级") + private Integer parentId; + + @ApiModelProperty(value = "客户ID") + private Integer dealerId; + + @ApiModelProperty(value = "内容") + private String content; + + @ApiModelProperty(value = "用户ID") + private Integer userId; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "状态, 0待处理, 1已完成") + private Integer status; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @TableLogic + private Integer deleted; + + @ApiModelProperty(value = "租户id") + private Integer tenantId; + + @ApiModelProperty(value = "创建时间") + private LocalDateTime createTime; + + @ApiModelProperty(value = "修改时间") + private LocalDateTime updateTime; + +} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/ShopDealerRecordMapper.java b/src/main/java/com/gxwebsoft/shop/mapper/ShopDealerRecordMapper.java new file mode 100644 index 0000000..09f365f --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/ShopDealerRecordMapper.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.shop.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.gxwebsoft.shop.entity.ShopDealerRecord; +import com.gxwebsoft.shop.param.ShopDealerRecordParam; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 客户跟进情况Mapper + * + * @author 科技小王子 + * @since 2025-10-02 12:21:50 + */ +public interface ShopDealerRecordMapper extends BaseMapper { + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") ShopDealerRecordParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") ShopDealerRecordParam param); + +} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerApplyMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerApplyMapper.xml index 60402e4..809e68a 100644 --- a/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerApplyMapper.xml +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerApplyMapper.xml @@ -4,10 +4,11 @@ - SELECT a.*, b.nickname as nickName, b.phone, c.nickname as refereeName + SELECT a.*, b.nickname as nickName, b.phone, c.nickname as refereeName, d.rate FROM shop_dealer_apply a LEFT JOIN gxwebsoft_core.sys_user b ON a.user_id = b.user_id LEFT JOIN gxwebsoft_core.sys_user c ON a.referee_id = c.user_id + LEFT JOIN shop_dealer_user d ON a.user_id = d.user_id AND a.apply_id = #{param.applyId} diff --git a/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerRecordMapper.xml b/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerRecordMapper.xml new file mode 100644 index 0000000..41c8c3a --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/mapper/xml/ShopDealerRecordMapper.xml @@ -0,0 +1,63 @@ + + + + + + + SELECT a.* + FROM shop_dealer_record a + + + AND a.id = #{param.id} + + + AND a.parent_id = #{param.parentId} + + + AND a.dealer_id = #{param.dealerId} + + + AND a.content LIKE CONCAT('%', #{param.content}, '%') + + + AND a.user_id = #{param.userId} + + + AND a.sort_number = #{param.sortNumber} + + + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') + + + AND a.status = #{param.status} + + + AND a.deleted = #{param.deleted} + + + AND a.deleted = 0 + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + AND (a.comments LIKE CONCAT('%', #{param.keywords}, '%') + ) + + + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/shop/param/ShopDealerRecordParam.java b/src/main/java/com/gxwebsoft/shop/param/ShopDealerRecordParam.java new file mode 100644 index 0000000..7fb4344 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/param/ShopDealerRecordParam.java @@ -0,0 +1,59 @@ +package com.gxwebsoft.shop.param; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 客户跟进情况查询参数 + * + * @author 科技小王子 + * @since 2025-10-02 12:21:50 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "ShopDealerRecordParam对象", description = "客户跟进情况查询参数") +public class ShopDealerRecordParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "ID") + @QueryField(type = QueryType.EQ) + private Integer id; + + @ApiModelProperty(value = "上级id, 0是顶级") + @QueryField(type = QueryType.EQ) + private Integer parentId; + + @ApiModelProperty(value = "客户ID") + @QueryField(type = QueryType.EQ) + private Integer dealerId; + + @ApiModelProperty(value = "内容") + private String content; + + @ApiModelProperty(value = "用户ID") + @QueryField(type = QueryType.EQ) + private Integer userId; + + @ApiModelProperty(value = "排序(数字越小越靠前)") + @QueryField(type = QueryType.EQ) + private Integer sortNumber; + + @ApiModelProperty(value = "备注") + private String comments; + + @ApiModelProperty(value = "状态, 0待处理, 1已完成") + @QueryField(type = QueryType.EQ) + private Integer status; + + @ApiModelProperty(value = "是否删除, 0否, 1是") + @QueryField(type = QueryType.EQ) + private Integer deleted; + +} diff --git a/src/main/java/com/gxwebsoft/shop/service/ShopDealerRecordService.java b/src/main/java/com/gxwebsoft/shop/service/ShopDealerRecordService.java new file mode 100644 index 0000000..d27357b --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/ShopDealerRecordService.java @@ -0,0 +1,42 @@ +package com.gxwebsoft.shop.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.entity.ShopDealerRecord; +import com.gxwebsoft.shop.param.ShopDealerRecordParam; + +import java.util.List; + +/** + * 客户跟进情况Service + * + * @author 科技小王子 + * @since 2025-10-02 12:21:50 + */ +public interface ShopDealerRecordService extends IService { + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(ShopDealerRecordParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(ShopDealerRecordParam param); + + /** + * 根据id查询 + * + * @param id ID + * @return ShopDealerRecord + */ + ShopDealerRecord getByIdRel(Integer id); + +} diff --git a/src/main/java/com/gxwebsoft/shop/service/impl/ShopDealerRecordServiceImpl.java b/src/main/java/com/gxwebsoft/shop/service/impl/ShopDealerRecordServiceImpl.java new file mode 100644 index 0000000..1b875e7 --- /dev/null +++ b/src/main/java/com/gxwebsoft/shop/service/impl/ShopDealerRecordServiceImpl.java @@ -0,0 +1,47 @@ +package com.gxwebsoft.shop.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.shop.entity.ShopDealerRecord; +import com.gxwebsoft.shop.mapper.ShopDealerRecordMapper; +import com.gxwebsoft.shop.param.ShopDealerRecordParam; +import com.gxwebsoft.shop.service.ShopDealerRecordService; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 客户跟进情况Service实现 + * + * @author 科技小王子 + * @since 2025-10-02 12:21:50 + */ +@Service +public class ShopDealerRecordServiceImpl extends ServiceImpl implements ShopDealerRecordService { + + @Override + public PageResult pageRel(ShopDealerRecordParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("sort_number asc, create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(ShopDealerRecordParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("sort_number asc, create_time desc"); + return page.sortRecords(list); + } + + @Override + public ShopDealerRecord getByIdRel(Integer id) { + ShopDealerRecordParam param = new ShopDealerRecordParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } + +}