Ver código fonte

售后管理

24282 2 anos atrás
pai
commit
e6f7d15994
26 arquivos alterados com 901 adições e 2 exclusões
  1. 43 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/controller/after/AfterSaleHandleController.java
  2. 68 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/controller/after/AfterSaleRecordController.java
  3. 25 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/dto/AfterSaleHandleDto.java
  4. 25 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/dto/AfterSaleHandleSelectDto.java
  5. 29 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/dto/AfterSaleRecordDto.java
  6. 27 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/dto/AfterSaleRecordSelectDto.java
  7. 46 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/po/AfterSaleDetail.java
  8. 53 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/po/AfterSaleHandle.java
  9. 71 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/po/AfterSaleRecord.java
  10. 32 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/vo/AfterSaleDetailVo.java
  11. 27 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/vo/AfterSaleHandleVo.java
  12. 37 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/vo/AfterSaleRecordVo.java
  13. 17 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/mapper/after/AfterSaleDetailMapper.java
  14. 26 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/mapper/after/AfterSaleHandleMapper.java
  15. 26 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/mapper/after/AfterSaleRecordMapper.java
  16. 17 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/after/AfterSaleDetailService.java
  17. 31 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/after/AfterSaleHandleService.java
  18. 46 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/after/AfterSaleRecordService.java
  19. 21 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/after/impl/AfterSaleDetailServiceImpl.java
  20. 67 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/after/impl/AfterSaleHandleServiceImpl.java
  21. 118 0
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/after/impl/AfterSaleRecordServiceImpl.java
  22. 1 1
      hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/group/impl/GroupRecordDetailsServiceImpl.java
  23. 4 0
      hx-victoriatourist/src/main/resources/mapper/after/AfterSaleDetailMapper.xml
  24. 20 0
      hx-victoriatourist/src/main/resources/mapper/after/AfterSaleHandleMapper.xml
  25. 23 0
      hx-victoriatourist/src/main/resources/mapper/after/AfterSaleRecordMapper.xml
  26. 1 1
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java

+ 43 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/controller/after/AfterSaleHandleController.java

@@ -0,0 +1,43 @@
+package com.fjhx.victoriatourist.controller.after;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.victoriatourist.entity.after.vo.AfterSaleHandleVo;
+import com.fjhx.victoriatourist.entity.after.dto.AfterSaleHandleSelectDto;
+import com.fjhx.victoriatourist.entity.after.dto.AfterSaleHandleDto;
+import com.fjhx.victoriatourist.service.after.AfterSaleHandleService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 售后管理-跟进记录 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@RestController
+@RequestMapping("/afterSaleHandle")
+public class AfterSaleHandleController {
+
+    @Autowired
+    private AfterSaleHandleService afterSaleHandleService;
+
+    /**
+     * 售后管理-跟进记录分页
+     */
+    @PostMapping("/page")
+    public Page<AfterSaleHandleVo> page(@RequestBody AfterSaleHandleSelectDto dto) {
+        return afterSaleHandleService.getPage(dto);
+    }
+
+    /**
+     * 售后管理-跟进记录新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody AfterSaleHandleDto afterSaleHandleDto) {
+        afterSaleHandleService.add(afterSaleHandleDto);
+    }
+
+}

+ 68 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/controller/after/AfterSaleRecordController.java

@@ -0,0 +1,68 @@
+package com.fjhx.victoriatourist.controller.after;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.victoriatourist.entity.after.vo.AfterSaleRecordVo;
+import com.fjhx.victoriatourist.entity.after.dto.AfterSaleRecordSelectDto;
+import com.fjhx.victoriatourist.entity.after.dto.AfterSaleRecordDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.victoriatourist.service.after.AfterSaleRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 售后管理 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@RestController
+@RequestMapping("/afterSaleRecord")
+public class AfterSaleRecordController {
+
+    @Autowired
+    private AfterSaleRecordService afterSaleRecordService;
+
+    /**
+     * 售后管理分页
+     */
+    @PostMapping("/page")
+    public Page<AfterSaleRecordVo> page(@RequestBody AfterSaleRecordSelectDto dto) {
+        return afterSaleRecordService.getPage(dto);
+    }
+
+    /**
+     * 售后管理明细
+     */
+    @PostMapping("/detail")
+    public AfterSaleRecordVo detail(@RequestBody BaseSelectDto dto) {
+        return afterSaleRecordService.detail(dto.getId());
+    }
+
+    /**
+     * 售后管理新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody AfterSaleRecordDto afterSaleRecordDto) {
+        afterSaleRecordService.add(afterSaleRecordDto);
+    }
+
+    /**
+     * 售后管理编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody AfterSaleRecordDto afterSaleRecordDto) {
+        afterSaleRecordService.edit(afterSaleRecordDto);
+    }
+
+    /**
+     * 售后管理删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        afterSaleRecordService.delete(dto.getId());
+    }
+
+}

+ 25 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/dto/AfterSaleHandleDto.java

@@ -0,0 +1,25 @@
+package com.fjhx.victoriatourist.entity.after.dto;
+
+import com.fjhx.file.entity.ObsFile;
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleHandle;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 售后管理-跟进记录新增编辑入参实体
+ *
+ * @author
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+public class AfterSaleHandleDto extends AfterSaleHandle {
+
+    /**
+     * 文件列表
+     */
+    private List<ObsFile> fileList;
+
+}

+ 25 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/dto/AfterSaleHandleSelectDto.java

@@ -0,0 +1,25 @@
+package com.fjhx.victoriatourist.entity.after.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 售后管理-跟进记录列表查询入参实体
+ *
+ * @author
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+public class AfterSaleHandleSelectDto extends BaseSelectDto {
+
+    /**
+     * 售后管理id
+     */
+    @NotNull(message = "售后管理id不能为空")
+    private Long afterSaleRecordId;
+
+}

+ 29 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/dto/AfterSaleRecordDto.java

@@ -0,0 +1,29 @@
+package com.fjhx.victoriatourist.entity.after.dto;
+
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleDetail;
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleRecord;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 售后管理新增编辑入参实体
+ *
+ * @author
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+public class AfterSaleRecordDto extends AfterSaleRecord {
+
+    /**
+     * 关联商品
+     */
+    @Valid
+    @NotEmpty(message = "关联商品不能为空")
+    private List<AfterSaleDetail> afterSaleDetailList;
+
+}

+ 27 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/dto/AfterSaleRecordSelectDto.java

@@ -0,0 +1,27 @@
+package com.fjhx.victoriatourist.entity.after.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 售后管理列表查询入参实体
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+public class AfterSaleRecordSelectDto extends BaseSelectDto {
+
+    /**
+     * 售后类型
+     */
+    private Integer type;
+
+    /**
+     * 售后状态
+     */
+    private Integer status;
+
+}

+ 46 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/po/AfterSaleDetail.java

@@ -0,0 +1,46 @@
+package com.fjhx.victoriatourist.entity.after.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 售后管理-关联商品
+ * </p>
+ *
+ * @author
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+@TableName("after_sale_detail")
+public class AfterSaleDetail extends BasePo {
+
+    /**
+     * 售后管理id
+     */
+    private Long afterSaleRecordId;
+
+    /**
+     * 产品id
+     */
+    @NotNull(message = "产品id不能为空")
+    private Long productId;
+
+    /**
+     * 数量
+     */
+    @NotNull(message = "产品数量不能为空")
+    private BigDecimal quantity;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 53 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/po/AfterSaleHandle.java

@@ -0,0 +1,53 @@
+package com.fjhx.victoriatourist.entity.after.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 售后管理-跟进记录
+ * </p>
+ *
+ * @author
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+@TableName("after_sale_handle")
+public class AfterSaleHandle extends BasePo {
+
+    /**
+     * 售后管理id
+     */
+    private Long afterSaleRecordId;
+
+    /**
+     * 售后状态
+     */
+    private Integer status;
+
+    /**
+     * 跟进人id
+     */
+    private Long handleUserId;
+
+    /**
+     * 跟进时间
+     */
+    private Date handleTime;
+
+    /**
+     * 下一跟进人
+     */
+    private Long nextUserId;
+
+    /**
+     * 跟进记录
+     */
+    private String remark;
+
+}

+ 71 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/po/AfterSaleRecord.java

@@ -0,0 +1,71 @@
+package com.fjhx.victoriatourist.entity.after.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * <p>
+ * 售后管理
+ * </p>
+ *
+ * @author
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+@TableName("after_sale_record")
+public class AfterSaleRecord extends BasePo {
+
+    /**
+     * 售后类型
+     */
+    @NotNull(message = "售后类型不能为空")
+    private Integer type;
+
+    /**
+     * 客户id
+     */
+    @NotNull(message = "客户id不能为空")
+    private Long customerId;
+
+    /**
+     * 国家
+     */
+    @NotNull(message = "国家id不能为空")
+    private String countryId;
+
+    /**
+     * 省
+     */
+    @NotNull(message = "省id不能为空")
+    private String provinceId;
+
+    /**
+     * 市
+     */
+    @NotNull(message = "市id不能为空")
+    private String cityId;
+
+    /**
+     * 详细地址
+     */
+    private String detailedAddress;
+
+    /**
+     * 售后原因
+     */
+    @NotBlank(message = "售后原因不能为空")
+    private String cause;
+
+    /**
+     * 售后状态
+     */
+    @NotNull(message = "售后状态不能为空")
+    private Integer status;
+
+}

+ 32 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/vo/AfterSaleDetailVo.java

@@ -0,0 +1,32 @@
+package com.fjhx.victoriatourist.entity.after.vo;
+
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleDetail;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 售后管理-关联商品列表查询返回值实体
+ *
+ * @author
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+public class AfterSaleDetailVo extends AfterSaleDetail {
+
+    /**
+     * 产品编号
+     */
+    private String productCode;
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+
+    /**
+     * 产品规格型号
+     */
+    private String productSpec;
+
+}

+ 27 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/vo/AfterSaleHandleVo.java

@@ -0,0 +1,27 @@
+package com.fjhx.victoriatourist.entity.after.vo;
+
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleHandle;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 售后管理-跟进记录列表查询返回值实体
+ *
+ * @author
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+public class AfterSaleHandleVo extends AfterSaleHandle {
+
+    /**
+     * 跟进人名称
+     */
+    private String handleUserName;
+
+    /**
+     * 下一跟进人名称
+     */
+    private String nextUserName;
+
+}

+ 37 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/entity/after/vo/AfterSaleRecordVo.java

@@ -0,0 +1,37 @@
+package com.fjhx.victoriatourist.entity.after.vo;
+
+import com.fjhx.area.service.ISetAreaName;
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleDetail;
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleRecord;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 售后管理列表查询返回值实体
+ *
+ * @author
+ * @since 2023-04-19
+ */
+@Getter
+@Setter
+public class AfterSaleRecordVo extends AfterSaleRecord implements ISetAreaName {
+
+    /**
+     * 客户名称
+     */
+    private String customerName;
+
+    private String countryName;
+
+    private String provinceName;
+
+    private String cityName;
+
+    /**
+     * 关联商品
+     */
+    private List<AfterSaleDetailVo> afterSaleDetailList;
+
+}

+ 17 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/mapper/after/AfterSaleDetailMapper.java

@@ -0,0 +1,17 @@
+package com.fjhx.victoriatourist.mapper.after;
+
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+
+/**
+ * <p>
+ * 售后管理-关联商品 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+public interface AfterSaleDetailMapper extends BaseMapper<AfterSaleDetail> {
+
+}

+ 26 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/mapper/after/AfterSaleHandleMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.victoriatourist.mapper.after;
+
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleHandle;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.victoriatourist.entity.after.vo.AfterSaleHandleVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 售后管理-跟进记录 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+public interface AfterSaleHandleMapper extends BaseMapper<AfterSaleHandle> {
+
+    /**
+     * 售后管理-跟进记录分页
+     */
+    Page<AfterSaleHandleVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<AfterSaleHandle> wrapper);
+
+}

+ 26 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/mapper/after/AfterSaleRecordMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.victoriatourist.mapper.after;
+
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.victoriatourist.entity.after.vo.AfterSaleRecordVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 售后管理 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+public interface AfterSaleRecordMapper extends BaseMapper<AfterSaleRecord> {
+
+    /**
+     * 售后管理分页
+     */
+    Page<AfterSaleRecordVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<AfterSaleRecord> wrapper);
+
+}

+ 17 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/after/AfterSaleDetailService.java

@@ -0,0 +1,17 @@
+package com.fjhx.victoriatourist.service.after;
+
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleDetail;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 售后管理-关联商品 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+public interface AfterSaleDetailService extends BaseService<AfterSaleDetail> {
+
+}

+ 31 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/after/AfterSaleHandleService.java

@@ -0,0 +1,31 @@
+package com.fjhx.victoriatourist.service.after;
+
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleHandle;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.victoriatourist.entity.after.vo.AfterSaleHandleVo;
+import com.fjhx.victoriatourist.entity.after.dto.AfterSaleHandleSelectDto;
+import com.fjhx.victoriatourist.entity.after.dto.AfterSaleHandleDto;
+
+
+/**
+ * <p>
+ * 售后管理-跟进记录 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+public interface AfterSaleHandleService extends BaseService<AfterSaleHandle> {
+
+    /**
+     * 售后管理-跟进记录分页
+     */
+    Page<AfterSaleHandleVo> getPage(AfterSaleHandleSelectDto dto);
+
+    /**
+     * 售后管理-跟进记录新增
+     */
+    void add(AfterSaleHandleDto afterSaleHandleDto);
+
+}

+ 46 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/after/AfterSaleRecordService.java

@@ -0,0 +1,46 @@
+package com.fjhx.victoriatourist.service.after;
+
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleRecord;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.victoriatourist.entity.after.vo.AfterSaleRecordVo;
+import com.fjhx.victoriatourist.entity.after.dto.AfterSaleRecordSelectDto;
+import com.fjhx.victoriatourist.entity.after.dto.AfterSaleRecordDto;
+
+
+/**
+ * <p>
+ * 售后管理 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+public interface AfterSaleRecordService extends BaseService<AfterSaleRecord> {
+
+    /**
+     * 售后管理分页
+     */
+    Page<AfterSaleRecordVo> getPage(AfterSaleRecordSelectDto dto);
+
+    /**
+     * 售后管理明细
+     */
+    AfterSaleRecordVo detail(Long id);
+
+    /**
+     * 售后管理新增
+     */
+    void add(AfterSaleRecordDto afterSaleRecordDto);
+
+    /**
+     * 售后管理编辑
+     */
+    void edit(AfterSaleRecordDto afterSaleRecordDto);
+
+    /**
+     * 售后管理删除
+     */
+    void delete(Long id);
+
+}

+ 21 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/after/impl/AfterSaleDetailServiceImpl.java

@@ -0,0 +1,21 @@
+package com.fjhx.victoriatourist.service.after.impl;
+
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleDetail;
+import com.fjhx.victoriatourist.mapper.after.AfterSaleDetailMapper;
+import com.fjhx.victoriatourist.service.after.AfterSaleDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ * 售后管理-关联商品 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-04-19
+ */
+@Service
+public class AfterSaleDetailServiceImpl extends ServiceImpl<AfterSaleDetailMapper, AfterSaleDetail> implements AfterSaleDetailService {
+
+}

+ 67 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/after/impl/AfterSaleHandleServiceImpl.java

@@ -0,0 +1,67 @@
+package com.fjhx.victoriatourist.service.after.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.file.utils.ObsFileUtil;
+import com.fjhx.victoriatourist.entity.after.dto.AfterSaleHandleDto;
+import com.fjhx.victoriatourist.entity.after.dto.AfterSaleHandleSelectDto;
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleHandle;
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleRecord;
+import com.fjhx.victoriatourist.entity.after.vo.AfterSaleHandleVo;
+import com.fjhx.victoriatourist.mapper.after.AfterSaleHandleMapper;
+import com.fjhx.victoriatourist.service.after.AfterSaleHandleService;
+import com.fjhx.victoriatourist.service.after.AfterSaleRecordService;
+import com.ruoyi.common.core.domain.BaseIdPo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.ruoyi.system.utils.UserUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 售后管理-跟进记录 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-19
+ */
+@Service
+public class AfterSaleHandleServiceImpl extends ServiceImpl<AfterSaleHandleMapper, AfterSaleHandle> implements AfterSaleHandleService {
+
+    @Autowired
+    private AfterSaleRecordService afterSaleRecordService;
+
+    @Override
+    public Page<AfterSaleHandleVo> getPage(AfterSaleHandleSelectDto dto) {
+        IWrapper<AfterSaleHandle> wrapper = getWrapper();
+        wrapper.eq("ash", AfterSaleHandle::getAfterSaleRecordId, dto.getAfterSaleRecordId());
+        wrapper.orderByDesc("ash", AfterSaleHandle::getId);
+        Page<AfterSaleHandleVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+
+        List<AfterSaleHandleVo> records = page.getRecords();
+        if (records.size() == 0) {
+            return page;
+        }
+
+        UserUtil.assignmentNickName(records, AfterSaleHandle::getHandleUserId, AfterSaleHandleVo::setHandleUserName);
+        UserUtil.assignmentNickName(records, AfterSaleHandle::getNextUserId, AfterSaleHandleVo::setNextUserName);
+
+        return page;
+    }
+
+    @DSTransactional
+    @Override
+    public void add(AfterSaleHandleDto afterSaleHandleDto) {
+        this.save(afterSaleHandleDto);
+        ObsFileUtil.saveFile(afterSaleHandleDto.getFileList(), afterSaleHandleDto.getId());
+        afterSaleRecordService.update(q -> q
+                .eq(BaseIdPo::getId, afterSaleHandleDto.getAfterSaleRecordId())
+                .set(AfterSaleRecord::getStatus, afterSaleHandleDto.getStatus())
+        );
+    }
+
+}

+ 118 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/after/impl/AfterSaleRecordServiceImpl.java

@@ -0,0 +1,118 @@
+package com.fjhx.victoriatourist.service.after.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.area.utils.AreaUtil;
+import com.fjhx.customer.service.customer.CustomerService;
+import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.victoriatourist.entity.after.dto.AfterSaleRecordDto;
+import com.fjhx.victoriatourist.entity.after.dto.AfterSaleRecordSelectDto;
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleDetail;
+import com.fjhx.victoriatourist.entity.after.po.AfterSaleRecord;
+import com.fjhx.victoriatourist.entity.after.vo.AfterSaleDetailVo;
+import com.fjhx.victoriatourist.entity.after.vo.AfterSaleRecordVo;
+import com.fjhx.victoriatourist.mapper.after.AfterSaleRecordMapper;
+import com.fjhx.victoriatourist.service.after.AfterSaleDetailService;
+import com.fjhx.victoriatourist.service.after.AfterSaleRecordService;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 售后管理 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-19
+ */
+@Service
+public class AfterSaleRecordServiceImpl extends ServiceImpl<AfterSaleRecordMapper, AfterSaleRecord> implements AfterSaleRecordService {
+
+    @Autowired
+    private CustomerService customerService;
+
+    @Autowired
+    private AfterSaleDetailService afterSaleDetailService;
+
+    @Autowired
+    private ProductInfoService productInfoService;
+
+    @Override
+    public Page<AfterSaleRecordVo> getPage(AfterSaleRecordSelectDto dto) {
+        IWrapper<AfterSaleRecord> wrapper = getWrapper();
+        wrapper.eq("asr", AfterSaleRecord::getType, dto.getType());
+        wrapper.eq("asr", AfterSaleRecord::getStatus, dto.getStatus());
+        wrapper.orderByDesc("asr", AfterSaleRecord::getId);
+        Page<AfterSaleRecordVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+
+        List<AfterSaleRecordVo> records = page.getRecords();
+        if (records.size() == 0) {
+            return page;
+        }
+
+        // 赋值客户名称
+        customerService.attributeAssign(records, AfterSaleRecord::getCustomerId, (item, customer) -> {
+            item.setCustomerName(customer.getName());
+        });
+
+        // 赋值国省市名称
+        AreaUtil.setAreaName(records);
+
+        return page;
+    }
+
+    @Override
+    public AfterSaleRecordVo detail(Long id) {
+        AfterSaleRecord AfterSaleRecord = this.getById(id);
+        AfterSaleRecordVo result = BeanUtil.toBean(AfterSaleRecord, AfterSaleRecordVo.class);
+
+        List<AfterSaleDetail> list = afterSaleDetailService.list(q -> q.eq(AfterSaleDetail::getAfterSaleRecordId, id));
+        List<AfterSaleDetailVo> afterSaleDetailVoList = BeanUtil.copyToList(list, AfterSaleDetailVo.class);
+        productInfoService.attributeAssign(afterSaleDetailVoList, AfterSaleDetail::getProductId, (item, product) -> {
+            item.setProductCode(product.getCode());
+            item.setProductName(product.getName());
+            item.setProductSpec(product.getSpec());
+        });
+        result.setAfterSaleDetailList(afterSaleDetailVoList);
+        return result;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(AfterSaleRecordDto afterSaleRecordDto) {
+        this.save(afterSaleRecordDto);
+
+        List<AfterSaleDetail> afterSaleDetailList = afterSaleRecordDto.getAfterSaleDetailList();
+        afterSaleDetailList.forEach(item -> item.setAfterSaleRecordId(afterSaleRecordDto.getId()));
+        afterSaleDetailService.saveBatch(afterSaleDetailList);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(AfterSaleRecordDto afterSaleRecordDto) {
+        Long id = afterSaleRecordDto.getId();
+        if (ObjectUtil.isEmpty(id)) {
+            throw new ServiceException("id不能为空");
+        }
+
+        this.updateById(afterSaleRecordDto);
+        List<AfterSaleDetail> afterSaleDetailList = afterSaleRecordDto.getAfterSaleDetailList();
+        afterSaleDetailService.editLinked(afterSaleDetailList, AfterSaleDetail::getAfterSaleRecordId, id);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+        afterSaleDetailService.remove(q -> q.eq(AfterSaleDetail::getAfterSaleRecordId, id));
+    }
+
+}

+ 1 - 1
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/group/impl/GroupRecordDetailsServiceImpl.java

@@ -198,7 +198,7 @@ public class GroupRecordDetailsServiceImpl extends ServiceImpl<GroupRecordDetail
 
             // 半成品出库或入库
             stockService.inOut(boList,
-                    dto.getGroupWarehouseId(),
+                    dto.getProductWarehouseId(),
                     dto.getType() == 1 ? JournalType.COMBINATION_OUT : JournalType.SPLIT_IN,
                     groupRecordDetails.getId());
         }

+ 4 - 0
hx-victoriatourist/src/main/resources/mapper/after/AfterSaleDetailMapper.xml

@@ -0,0 +1,4 @@
+<?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.fjhx.victoriatourist.mapper.after.AfterSaleDetailMapper">
+</mapper>

+ 20 - 0
hx-victoriatourist/src/main/resources/mapper/after/AfterSaleHandleMapper.xml

@@ -0,0 +1,20 @@
+<?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.fjhx.victoriatourist.mapper.after.AfterSaleHandleMapper">
+    <select id="getPage" resultType="com.fjhx.victoriatourist.entity.after.vo.AfterSaleHandleVo">
+        select
+            ash.id,
+            ash.status,
+            ash.handle_user_id,
+            ash.handle_time,
+            ash.next_user_id,
+            ash.remark,
+            ash.create_user,
+            ash.create_time,
+            ash.update_user,
+            ash.update_time
+        from after_sale_handle ash
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 23 - 0
hx-victoriatourist/src/main/resources/mapper/after/AfterSaleRecordMapper.xml

@@ -0,0 +1,23 @@
+<?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.fjhx.victoriatourist.mapper.after.AfterSaleRecordMapper">
+    <select id="getPage" resultType="com.fjhx.victoriatourist.entity.after.vo.AfterSaleRecordVo">
+        select
+            asr.id,
+            asr.type,
+            asr.customer_id,
+            asr.country_id,
+            asr.province_id,
+            asr.city_id,
+            asr.detailed_address,
+            asr.cause,
+            asr.status,
+            asr.create_user,
+            asr.create_time,
+            asr.update_user,
+            asr.update_time
+        from after_sale_record asr
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 1 - 1
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java

@@ -384,7 +384,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
                 if (!update) {
                     ProductInfo productInfo = productInfoService.getById(productId);
                     if (productInfo == null) {
-                        throw new ServiceException("产品id" + productId + "不存在");
+                        throw new ServiceException("产品id" + productId + "不存在");
                     }
 
                     String err = "产品 {} 库存不足,出库失败";