Kaynağa Gözat

售后管理

yzc 1 yıl önce
ebeveyn
işleme
52a6595507

+ 71 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/after/AfterSalesController.java

@@ -0,0 +1,71 @@
+package com.fjhx.sale.controller.after;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.after.dto.AfterSalesDto;
+import com.fjhx.sale.entity.after.dto.AfterSalesSelectDto;
+import com.fjhx.sale.entity.after.vo.AfterSalesVo;
+import com.fjhx.sale.service.after.AfterSalesService;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * <p>
+ * sale_售后管理 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2024-01-31
+ */
+@RestController
+@RequestMapping("/afterSales")
+public class AfterSalesController {
+
+    @Autowired
+    private AfterSalesService afterSalesService;
+
+    /**
+     * 售后管理分页
+     */
+    @PostMapping("/page")
+    public Page<AfterSalesVo> page(@RequestBody AfterSalesSelectDto dto) {
+        return afterSalesService.getPage(dto);
+    }
+
+    /**
+     * 售后管理明细
+     */
+    @PostMapping("/detail")
+    public AfterSalesVo detail(@RequestBody BaseSelectDto dto) {
+        return afterSalesService.detail(dto.getId());
+    }
+
+    /**
+     * 售后管理新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody AfterSalesDto afterSalesDto) {
+        afterSalesService.add(afterSalesDto);
+    }
+
+    /**
+     * sale_售后管理编辑
+     */
+    @PostMapping("/edit")
+    public void edit(@RequestBody AfterSalesDto afterSalesDto) {
+        afterSalesService.edit(afterSalesDto);
+    }
+
+    /**
+     * sale_售后管理删除
+     */
+    @PostMapping("/delete")
+    public void delete(@RequestBody BaseSelectDto dto) {
+        afterSalesService.delete(dto.getId());
+    }
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/after/dto/AfterSalesDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.after.dto;
+
+import com.fjhx.sale.entity.after.po.AfterSales;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * sale_售后管理新增编辑入参实体
+ *
+ * @author
+ * @since 2024-01-31
+ */
+@Getter
+@Setter
+public class AfterSalesDto extends AfterSales {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/after/dto/AfterSalesSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.after.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * sale_售后管理列表查询入参实体
+ *
+ * @author
+ * @since 2024-01-31
+ */
+@Getter
+@Setter
+public class AfterSalesSelectDto extends BaseSelectDto {
+
+}

+ 71 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/after/po/AfterSales.java

@@ -0,0 +1,71 @@
+package com.fjhx.sale.entity.after.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BasePo;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * sale_售后管理
+ * </p>
+ *
+ * @author
+ * @since 2024-01-31
+ */
+@Getter
+@Setter
+@TableName("after_sales")
+public class AfterSales extends BasePo {
+
+    /**
+     * 合同id
+     */
+    private Long contractId;
+
+    /**
+     * 售后类型 字典
+     */
+    private String type;
+
+    /**
+     * 售后人id
+     */
+    private Long userId;
+
+    /**
+     * 联系人名称
+     */
+    private String contactName;
+
+    /**
+     * 联系方式
+     */
+    private String contactWay;
+
+    /**
+     * 说明
+     */
+    private String remark;
+
+    /**
+     * 售后状态 0进行中1关闭
+     */
+    private Integer status;
+
+    /**
+     * 合同产品明细id
+     */
+    private Long contractProductId;
+
+    /**
+     * 产品id
+     */
+    private Long productId;
+
+    /**
+     * 售后数量
+     */
+    private Long quantity;
+
+}

+ 45 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/after/vo/AfterSalesVo.java

@@ -0,0 +1,45 @@
+package com.fjhx.sale.entity.after.vo;
+
+import com.fjhx.sale.entity.after.po.AfterSales;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * sale_售后管理列表查询返回值实体
+ *
+ * @author
+ * @since 2024-01-31
+ */
+@Getter
+@Setter
+public class AfterSalesVo extends AfterSales {
+
+    /**
+     * 产品名称
+     */
+    private String productName;
+    /**
+     * 产品编号
+     */
+    private String productCode;
+    /**
+     * 产品长
+     */
+    private BigDecimal productLength;
+    /**
+     * 产品宽
+     */
+    private BigDecimal productWidth;
+    /**
+     * 产品高
+     */
+    private BigDecimal productHeight;
+
+    /**
+     * 售后人员名称
+     */
+    private String userName;
+
+}

+ 5 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/purchase/vo/PurchaseBackVo.java

@@ -39,4 +39,9 @@ public class PurchaseBackVo extends PurchaseBack {
      */
     private String supplierName;
 
+    /**
+     * 采购单号
+     */
+    private String purchaseCode;
+
 }

+ 26 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/after/AfterSalesMapper.java

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

+ 46 - 0
hx-sale/src/main/java/com/fjhx/sale/service/after/AfterSalesService.java

@@ -0,0 +1,46 @@
+package com.fjhx.sale.service.after;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.after.dto.AfterSalesDto;
+import com.fjhx.sale.entity.after.dto.AfterSalesSelectDto;
+import com.fjhx.sale.entity.after.po.AfterSales;
+import com.fjhx.sale.entity.after.vo.AfterSalesVo;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * sale_售后管理 服务类
+ * </p>
+ *
+ * @author
+ * @since 2024-01-31
+ */
+public interface AfterSalesService extends BaseService<AfterSales> {
+
+    /**
+     * sale_售后管理分页
+     */
+    Page<AfterSalesVo> getPage(AfterSalesSelectDto dto);
+
+    /**
+     * sale_售后管理明细
+     */
+    AfterSalesVo detail(Long id);
+
+    /**
+     * sale_售后管理新增
+     */
+    void add(AfterSalesDto afterSalesDto);
+
+    /**
+     * sale_售后管理编辑
+     */
+    void edit(AfterSalesDto afterSalesDto);
+
+    /**
+     * sale_售后管理删除
+     */
+    void delete(Long id);
+
+}

+ 100 - 0
hx-sale/src/main/java/com/fjhx/sale/service/after/impl/AfterSalesServiceImpl.java

@@ -0,0 +1,100 @@
+package com.fjhx.sale.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.common.utils.Assert;
+import com.fjhx.item.service.product.ProductInfoService;
+import com.fjhx.sale.entity.after.dto.AfterSalesDto;
+import com.fjhx.sale.entity.after.dto.AfterSalesSelectDto;
+import com.fjhx.sale.entity.after.po.AfterSales;
+import com.fjhx.sale.entity.after.vo.AfterSalesVo;
+import com.fjhx.sale.entity.contract.po.ContractProduct;
+import com.fjhx.sale.mapper.after.AfterSalesMapper;
+import com.fjhx.sale.service.after.AfterSalesService;
+import com.fjhx.sale.service.contract.ContractProductService;
+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>
+ * sale_售后管理 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2024-01-31
+ */
+@Service
+public class AfterSalesServiceImpl extends ServiceImpl<AfterSalesMapper, AfterSales> implements AfterSalesService {
+
+    private final ContractProductService contractProductService;
+    private final ProductInfoService productInfoService;
+
+    @Autowired
+    public AfterSalesServiceImpl(ContractProductService contractProductService, ProductInfoService productInfoService) {
+        this.contractProductService = contractProductService;
+        this.productInfoService = productInfoService;
+    }
+
+    @Override
+    public Page<AfterSalesVo> getPage(AfterSalesSelectDto dto) {
+        IWrapper<AfterSales> wrapper = getWrapper();
+        wrapper.orderByDesc("as1", AfterSales::getId);
+        Page<AfterSalesVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<AfterSalesVo> records = page.getRecords();
+        if (ObjectUtil.isEmpty(records)) {
+            return page;
+        }
+
+        //赋值产品信息
+        productInfoService.attributeAssign(records, AfterSalesVo::getProductId, (detail, product) -> {
+            detail.setProductCode(product.getCustomCode());
+            detail.setProductName(product.getName());
+            detail.setProductLength(product.getLength());
+            detail.setProductWidth(product.getWidth());
+            detail.setProductHeight(product.getHeight());
+        });
+
+        //赋值售后人员名称
+        UserUtil.assignmentNickName(records, AfterSalesVo::getUserId, AfterSalesVo::setUserName);
+
+        return page;
+    }
+
+    @Override
+    public AfterSalesVo detail(Long id) {
+        AfterSales AfterSales = this.getById(id);
+        AfterSalesVo result = BeanUtil.toBean(AfterSales, AfterSalesVo.class);
+        return result;
+    }
+
+    @Override
+    public void add(AfterSalesDto afterSalesDto) {
+        Long contractProductId = afterSalesDto.getContractProductId();
+        ContractProduct contractProduct = contractProductService.getById(contractProductId);
+        Assert.notEmpty(contractProduct, "查询不到订单产品信息!");
+
+        //赋值信息
+        afterSalesDto.setContractId(contractProduct.getContractId());
+        afterSalesDto.setProductId(contractProduct.getProductId());
+
+        this.save(afterSalesDto);
+    }
+
+    @Override
+    public void edit(AfterSalesDto afterSalesDto) {
+        this.updateById(afterSalesDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 14 - 17
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractProductServiceImpl.java

@@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
-import com.fjhx.common.enums.FlowStatusEnum1;
 import com.fjhx.common.service.contract.ContractTemplateService;
 import com.fjhx.common.service.corporation.CorporationService;
 import com.fjhx.customer.service.customer.CustomerService;
@@ -19,7 +18,6 @@ import com.fjhx.purchase.entity.purchase.vo.PurchaseDetailVo;
 import com.fjhx.purchase.service.purchase.PurchaseDetailService;
 import com.fjhx.sale.entity.contract.dto.ContractProductDto;
 import com.fjhx.sale.entity.contract.dto.ContractProductSelectDto;
-import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.po.ContractProduct;
 import com.fjhx.sale.entity.contract.vo.ContractProductVo;
 import com.fjhx.sale.entity.purchase.po.EhsdPurchaseProduct;
@@ -93,20 +91,20 @@ public class ContractProductServiceImpl extends ServiceImpl<ContractProductMappe
     public Page<ContractProductVo> getPage(ContractProductSelectDto dto) {
         IWrapper<ContractProduct> wrapper = getWrapper();
         wrapper.orderByDesc("t1", ContractProduct::getCreateTime);
-        wrapper.ne("t1", ContractProduct::getExpendQuantity, 0);
-        wrapper.between("t2", Contract::getStatus, FlowStatusEnum1.PASS.getKey(), FlowStatusEnum1.CANCELLATION.getKey() - 1);
-        if (ObjectUtil.isNotEmpty(dto.getDataType()) && dto.getDataType() == 0) {//合同交接单
-            wrapper.ne("t1", ContractProduct::getExpendQuantity, BigDecimal.ZERO);
-        }
-        if (ObjectUtil.isNotEmpty(dto.getPurchaseStatus()) && dto.getPurchaseStatus() == 2) {//已采购
-            wrapper.eq("t1", ContractProduct::getExpendQuantity, BigDecimal.ZERO);
-        } else if (ObjectUtil.isNotEmpty(dto.getPurchaseStatus()) && dto.getPurchaseStatus() == 1) {//部分采购
-            wrapper.gt("t1", ContractProduct::getExpendQuantity, BigDecimal.ZERO);
-            wrapper.apply("t1.expend_quantity <t1.quantity");
-        } else if (ObjectUtil.isNotEmpty(dto.getPurchaseStatus()) && dto.getPurchaseStatus() == 0) {//未采购
-            wrapper.apply("t1.expend_quantity = t1.quantity");
-        }
-        wrapper.eq("t2", Contract::getIssue, 1);
+//        wrapper.ne("t1", ContractProduct::getExpendQuantity, 0);
+//        wrapper.between("t2", Contract::getStatus, FlowStatusEnum1.PASS.getKey(), FlowStatusEnum1.CANCELLATION.getKey() - 1);
+//        if (ObjectUtil.isNotEmpty(dto.getDataType()) && dto.getDataType() == 0) {//合同交接单
+//            wrapper.ne("t1", ContractProduct::getExpendQuantity, BigDecimal.ZERO);
+//        }
+//        if (ObjectUtil.isNotEmpty(dto.getPurchaseStatus()) && dto.getPurchaseStatus() == 2) {//已采购
+//            wrapper.eq("t1", ContractProduct::getExpendQuantity, BigDecimal.ZERO);
+//        } else if (ObjectUtil.isNotEmpty(dto.getPurchaseStatus()) && dto.getPurchaseStatus() == 1) {//部分采购
+//            wrapper.gt("t1", ContractProduct::getExpendQuantity, BigDecimal.ZERO);
+//            wrapper.apply("t1.expend_quantity <t1.quantity");
+//        } else if (ObjectUtil.isNotEmpty(dto.getPurchaseStatus()) && dto.getPurchaseStatus() == 0) {//未采购
+//            wrapper.apply("t1.expend_quantity = t1.quantity");
+//        }
+//        wrapper.eq("t2", Contract::getIssue, 1);
         if (StringUtils.isNotEmpty(dto.getKeyword())) {
             wrapper.keyword(dto.getKeyword(), new SqlField("t2.`code`"), new SqlField("t2.`user_name`"));
         }
@@ -121,7 +119,6 @@ public class ContractProductServiceImpl extends ServiceImpl<ContractProductMappe
         wrapper.groupBy("t1.id");
         Page<ContractProductVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<ContractProductVo> list = page.getRecords();
-        List<Long> idList = list.stream().map(ContractProductVo::getId).collect(Collectors.toList());
         if (list.size() == 0) {
             return page;
         }

+ 24 - 0
hx-sale/src/main/resources/mapper/after/AfterSalesMapper.xml

@@ -0,0 +1,24 @@
+<?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.sale.mapper.after.AfterSalesMapper">
+    <select id="getPage" resultType="com.fjhx.sale.entity.after.vo.AfterSalesVo">
+        SELECT as1.id,
+               as1.contract_id,
+               as1.type,
+               as1.user_id,
+               as1.contact_name,
+               as1.contact_way,
+               as1.remark,
+               as1.`status`,
+               as1.create_user,
+               as1.create_time,
+               as1.update_user,
+               as1.update_time,
+               as1.contract_product_id,
+               as1.product_id,
+               as1.quantity
+        FROM after_sales as1
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>