Преглед изворни кода

添加了报价单的数据

wxf пре 2 година
родитељ
комит
cd1f70b8b7
49 измењених фајлова са 1680 додато и 1 уклоњено
  1. 14 0
      hx-account/src/main/java/com/fjhx/account/controller/account/AccountDeptRunningWaterController.java
  2. 44 0
      hx-account/src/main/java/com/fjhx/account/controller/utils/DateUtils.java
  3. 8 0
      hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountDeptRunningWaterSelectDto.java
  4. 3 0
      hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountRunningWater.java
  5. 21 0
      hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountRunningWaterVo.java
  6. 6 0
      hx-account/src/main/java/com/fjhx/account/mapper/account/AccountDeptRunningWaterMapper.java
  7. 9 0
      hx-account/src/main/java/com/fjhx/account/service/account/AccountDeptRunningWaterService.java
  8. 89 0
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountDeptRunningWaterServiceImpl.java
  9. 1 1
      hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentServiceImpl.java
  10. 14 0
      hx-account/src/main/resources/mapper/account/AccountDeptRunningWaterMapper.xml
  11. 56 0
      hx-sale/src/main/java/com/fjhx/sale/controller/serviceContract/ServiceContractController.java
  12. 34 0
      hx-sale/src/main/java/com/fjhx/sale/controller/serviceContract/ServiceContractPayController.java
  13. 34 0
      hx-sale/src/main/java/com/fjhx/sale/controller/serviceContract/ServiceContractProductController.java
  14. 52 0
      hx-sale/src/main/java/com/fjhx/sale/controller/serviceContract/ServiceContractRecordController.java
  15. 30 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractDto.java
  16. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractPayDto.java
  17. 22 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractPaySelectDto.java
  18. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractProductDto.java
  19. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractProductSelectDto.java
  20. 21 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractRecordDto.java
  21. 21 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractRecordSelectDto.java
  22. 26 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractSelectDto.java
  23. 173 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/po/ServiceContract.java
  24. 44 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/po/ServiceContractPay.java
  25. 63 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/po/ServiceContractProduct.java
  26. 47 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/po/ServiceContractRecord.java
  27. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/vo/ServiceContractPayVo.java
  28. 17 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/vo/ServiceContractProductVo.java
  29. 21 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/vo/ServiceContractRecordVo.java
  30. 47 0
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/vo/ServiceContractVo.java
  31. 50 0
      hx-sale/src/main/java/com/fjhx/sale/enums/ServiceContractEnum.java
  32. 93 0
      hx-sale/src/main/java/com/fjhx/sale/flow/ServiceContractFlow.java
  33. 27 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/serviceContract/ServiceContractMapper.java
  34. 27 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/serviceContract/ServiceContractPayMapper.java
  35. 26 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/serviceContract/ServiceContractProductMapper.java
  36. 27 0
      hx-sale/src/main/java/com/fjhx/sale/mapper/serviceContract/ServiceContractRecordMapper.java
  37. 25 0
      hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/ServiceContractPayService.java
  38. 25 0
      hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/ServiceContractProductService.java
  39. 36 0
      hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/ServiceContractRecordService.java
  40. 46 0
      hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/ServiceContractService.java
  41. 37 0
      hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/impl/ServiceContractPayServiceImpl.java
  42. 33 0
      hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/impl/ServiceContractProductServiceImpl.java
  43. 63 0
      hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/impl/ServiceContractRecordServiceImpl.java
  44. 99 0
      hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/impl/ServiceContractServiceImpl.java
  45. 3 0
      hx-sale/src/main/java/com/fjhx/sale/util/code/CodeEnum.java
  46. 16 0
      hx-sale/src/main/resources/mapper/serviceContract/ServiceContractMapper.xml
  47. 19 0
      hx-sale/src/main/resources/mapper/serviceContract/ServiceContractPayMapper.xml
  48. 23 0
      hx-sale/src/main/resources/mapper/serviceContract/ServiceContractProductMapper.xml
  49. 20 0
      hx-sale/src/main/resources/mapper/serviceContract/ServiceContractRecordMapper.xml

+ 14 - 0
hx-account/src/main/java/com/fjhx/account/controller/account/AccountDeptRunningWaterController.java

@@ -12,6 +12,9 @@ import com.ruoyi.common.core.domain.BaseSelectDto;
 import com.fjhx.account.service.account.AccountDeptRunningWaterService;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.List;
+import java.util.Map;
+
 
 /**
  * <p>
@@ -47,4 +50,15 @@ public class AccountDeptRunningWaterController {
         accountDeptRunningWaterService.add(accountDeptRunningWaterDto);
     }
 
+    /**
+     * 部门-资金流水报表
+     * @param dto
+     * @return
+     */
+    @PostMapping("/DeptRunningWaterReport")
+    public  List<Map<String,Object>> DeptRunningWaterReport(@RequestBody AccountDeptRunningWaterSelectDto dto){
+        return accountDeptRunningWaterService.DeptRunningWaterReport(dto);
+    }
+
+
 }

+ 44 - 0
hx-account/src/main/java/com/fjhx/account/controller/utils/DateUtils.java

@@ -0,0 +1,44 @@
+package com.fjhx.account.controller.utils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+public class DateUtils {
+    /**
+     * 获取两个日期之间的所有月份 (年月)
+     *
+     * @param
+     * @param
+     * @return:YYYY-MM
+     */
+    public static List<String> getMonthBetweenDate(Date startDate, Date endDate) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+        // 声明保存日期集合
+        List<String> list = new ArrayList<String>();
+        try {
+//            // 转化成日期类型
+//            Date startDate = sdf.parse(startTime);
+//            Date endDate = sdf.parse(endTime);
+
+            //用Calendar 进行日期比较判断
+            Calendar calendar = Calendar.getInstance();
+            while (startDate.getTime() <= endDate.getTime()) {
+                // 把日期添加到集合
+                list.add(sdf.format(startDate));
+                // 设置日期
+                calendar.setTime(startDate);
+                //把日期增加一天
+                calendar.add(Calendar.MONTH, 1);
+                // 获取增加后的日期
+                startDate = calendar.getTime();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return list;
+    }
+}

+ 8 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/dto/AccountDeptRunningWaterSelectDto.java

@@ -32,4 +32,12 @@ public class AccountDeptRunningWaterSelectDto extends BaseSelectDto {
      *是否分拆(10未分拆  20 已分拆)
      */
     private String type;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+
+
 }

+ 3 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/po/AccountRunningWater.java

@@ -7,6 +7,8 @@ import java.util.Date;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotBlank;
+
 /**
  * <p>
  * 账户资金流水表
@@ -43,6 +45,7 @@ public class AccountRunningWater extends BasePo {
     /**
      * 币种(字典account_currency)
      */
+    @NotBlank(message = "币种不能为null")
     private String currency;
 
     /**

+ 21 - 0
hx-account/src/main/java/com/fjhx/account/entity/account/vo/AccountRunningWaterVo.java

@@ -6,6 +6,7 @@ import com.fjhx.account.entity.account.po.AccountRunningWater;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -47,4 +48,24 @@ public class AccountRunningWaterVo extends AccountRunningWater {
      */
     private List<AccountDeptRunningWaterDetail> deptRunningWaterDetailList;
 
+    /**
+     * 收入金额
+     */
+    private BigDecimal incomeAmount;
+
+    /**
+     * 支出金额
+     */
+    private BigDecimal expenditureAmount;
+
+
+    /**
+     * 结余金额
+     */
+    private BigDecimal balanceAmount;
+
+    /**
+     * 日期
+     */
+    private String time;
 }

+ 6 - 0
hx-account/src/main/java/com/fjhx/account/mapper/account/AccountDeptRunningWaterMapper.java

@@ -9,6 +9,8 @@ import com.fjhx.account.entity.account.vo.AccountRunningWaterVo;
 import com.ruoyi.common.utils.wrapper.IWrapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 
 /**
  * <p>
@@ -25,4 +27,8 @@ public interface AccountDeptRunningWaterMapper extends BaseMapper<AccountDeptRun
      */
     Page<AccountRunningWaterVo> getPage(@Param("page") Page<Object> page,@Param("ew") QueryWrapper<Object> wrapper);
 
+    /**
+     * 部门-资金流水统计列表
+     */
+    List<AccountRunningWaterVo> DeptRunningWaterReport(@Param("ew") QueryWrapper<Object> query);
 }

+ 9 - 0
hx-account/src/main/java/com/fjhx/account/service/account/AccountDeptRunningWaterService.java

@@ -8,6 +8,9 @@ import com.fjhx.account.entity.account.vo.AccountDeptRunningWaterVo;
 import com.fjhx.account.entity.account.dto.AccountDeptRunningWaterSelectDto;
 import com.fjhx.account.entity.account.dto.AccountDeptRunningWaterDto;
 
+import java.util.List;
+import java.util.Map;
+
 
 /**
  * <p>
@@ -44,4 +47,10 @@ public interface AccountDeptRunningWaterService extends BaseService<AccountDeptR
      */
     void delete(Long id);
 
+    /**
+     * 部门-资金流水报表
+     * @param dto
+     * @return
+     */
+    List<Map<String,Object>> DeptRunningWaterReport(AccountDeptRunningWaterSelectDto dto);
 }

+ 89 - 0
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountDeptRunningWaterServiceImpl.java

@@ -2,8 +2,10 @@ package com.fjhx.account.service.account.impl;
 
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import com.baomidou.mybatisplus.core.conditions.interfaces.Func;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.account.controller.utils.DateUtils;
 import com.fjhx.account.entity.account.po.AccountDeptRunningWater;
 import com.fjhx.account.entity.account.vo.AccountRequestFundsVo;
 import com.fjhx.account.entity.account.vo.AccountRunningWaterVo;
@@ -11,6 +13,7 @@ import com.fjhx.account.mapper.account.AccountDeptRunningWaterMapper;
 import com.fjhx.account.service.account.AccountDeptRunningWaterService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.common.constant.SourceConstant;
+import com.obs.services.internal.ServiceException;
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.system.service.ISysDeptService;
@@ -23,6 +26,9 @@ import com.ruoyi.common.utils.wrapper.IWrapper;
 import com.fjhx.account.entity.account.dto.AccountDeptRunningWaterDto;
 import cn.hutool.core.bean.BeanUtil;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -99,4 +105,87 @@ public class AccountDeptRunningWaterServiceImpl extends ServiceImpl<AccountDeptR
         this.removeById(id);
     }
 
+    /**
+     * 部门-资金流水报表
+     * @param dto
+     * @return
+     */
+    @Override
+    public  List<Map<String,Object>> DeptRunningWaterReport(AccountDeptRunningWaterSelectDto dto) {
+        if (ObjectUtil.isEmpty(dto.getBeginTime())&&ObjectUtil.isEmpty(dto.getEndTime())) {
+            throw new ServiceException("查询的时间范围不能为空!");
+        }
+        //获取月份集合
+        List<String> months = DateUtils.getMonthBetweenDate(dto.getBeginTime(), dto.getEndTime());
+        //存放部门信息
+        List<SysDept> sysDeptList = new ArrayList<>();
+        //查询部门信息
+        if (ObjectUtil.isNotEmpty(dto.getDeptId())){
+            //切换数据源
+            DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+            //判断是否存在子集的部门信息
+            sysDeptList =  sysDeptService.list(Wrappers.<SysDept>lambdaQuery().like(SysDept::getAncestors,dto.getDeptId())
+                    .orderByDesc(SysDept::getParentId));
+            SysDept sysDept = sysDeptService.getById(dto.getDeptId());
+            sysDeptList.add(sysDept);
+        }else {
+            //切换数据源
+            DynamicDataSourceContextHolder.push(SourceConstant.BASE);
+            sysDeptList =  sysDeptService.list(Wrappers.<SysDept>lambdaQuery().orderByDesc(SysDept::getParentId));
+        }
+        //获取到部门ID
+        List<Long> deptIds = sysDeptList.stream().map(sysDept -> sysDept.getDeptId()).collect(Collectors.toList());
+
+        //查询资金流水表的信息
+        QueryWrapper<Object> query = Wrappers.query();
+        query.ge("DATE_FORMAT(ar.create_time,'%Y-%m')",dto.getBeginTime());
+        query.le("DATE_FORMAT(ar.create_time,'%Y-%m')",dto.getEndTime());
+        query.in("wd.dept_id",deptIds);
+        query.groupBy("wd.dept_id","time");
+        //切换数据源
+        DynamicDataSourceContextHolder.push(SourceConstant.ACCOUNT);
+        List<AccountRunningWaterVo> accountRunningWaterVos = baseMapper.DeptRunningWaterReport(query);
+        Map<Long, List<AccountRunningWaterVo>> accountRunningWaterMap = accountRunningWaterVos.stream()
+                .collect(Collectors.groupingBy(AccountRunningWaterVo::getDeptId));
+
+        //存放部门费用统计的数据
+       List<Map<String,Object>> mapList = new ArrayList<>();
+        for (SysDept sysDept : sysDeptList) {
+            Map<String,Object> map = new HashMap<>();
+            map.put("deptName",sysDept.getDeptName());
+            //获取到这个部门的费用统计报表
+            List<AccountRunningWaterVo> accountRunningWaterVoList = accountRunningWaterMap.get(sysDept.getDeptId());
+            //如果这个部门没有费用统计表的数据则将统计相关数据表设计为0
+            if (ObjectUtil.isEmpty(accountRunningWaterVoList)){
+                accountRunningWaterVoList = new ArrayList<>();
+                for (String month : months) {
+                   AccountRunningWaterVo accountRunningWaterVo = new AccountRunningWaterVo();
+                   accountRunningWaterVo.setIncomeAmount(new BigDecimal(0));
+                   accountRunningWaterVo.setExpenditureAmount(new BigDecimal(0));
+                   accountRunningWaterVo.setBalanceAmount(new BigDecimal(0));
+                   accountRunningWaterVo.setTime(month);
+                   accountRunningWaterVoList.add(accountRunningWaterVo);
+                }
+            }else {
+                Map<String, List<AccountRunningWaterVo>> waterMap = accountRunningWaterVoList.stream()
+                        .collect(Collectors.groupingBy(AccountRunningWaterVo::getTime));
+
+                for (String month : months) {//判断这个月份中是否有这个数据,如果没有则赋值为0
+                    List<AccountRunningWaterVo> accountRunningWaterVos1 = waterMap.get(month);
+                    if (ObjectUtil.isEmpty(accountRunningWaterVos1)){
+                        AccountRunningWaterVo accountRunningWaterVo = new AccountRunningWaterVo();
+                        accountRunningWaterVo.setIncomeAmount(new BigDecimal(0));
+                        accountRunningWaterVo.setExpenditureAmount(new BigDecimal(0));
+                        accountRunningWaterVo.setBalanceAmount(new BigDecimal(0));
+                        accountRunningWaterVo.setTime(month);
+                        accountRunningWaterVoList.add(accountRunningWaterVo);
+                    }
+                }
+            }
+           map.put("accountRunningWaterVoList",accountRunningWaterVoList);
+            mapList.add(map);
+        }
+        return mapList;
+    }
+
 }

+ 1 - 1
hx-account/src/main/java/com/fjhx/account/service/account/impl/AccountPaymentServiceImpl.java

@@ -66,7 +66,7 @@ public class AccountPaymentServiceImpl extends ServiceImpl<AccountPaymentMapper,
     public Page<AccountPaymentVo> getPage(AccountRequestFundsSelectDto dto) {
         QueryWrapper<Object> wrapper = Wrappers.query();
         wrapper.eq(ObjectUtil.isNotEmpty(dto.getPaymentStatus()),"ap.status",dto.getPaymentStatus());
-        wrapper.like(ObjectUtil.isNotEmpty(dto.getKeyword()),"ap.payment_remarks",dto.getKeyword());
+        wrapper.like(ObjectUtil.isNotEmpty(dto.getKeyword()),"ap.payment_remark",dto.getKeyword());
         wrapper.orderByDesc("ap.status","ap.payment_time","ap.create_time");
         Page<AccountPaymentVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
 

+ 14 - 0
hx-account/src/main/resources/mapper/account/AccountDeptRunningWaterMapper.xml

@@ -27,4 +27,18 @@
             ${ew.customSqlSegment}
     </select>
 
+    <select id="DeptRunningWaterReport" resultType="com.fjhx.account.entity.account.vo.AccountRunningWaterVo">
+        SELECT
+            IF(ar.`status` = 10,SUM(wd.amount),0) incomeAmount,
+            IF(ar.`status` = 20,SUM(wd.amount),0) expenditureAmount,
+            wd.dept_id deptId,
+            DATE_FORMAT(ar.create_time,'%Y-%m') time,
+	        (IF(ar.`status` = 10,SUM(wd.amount),0) - IF(ar.`status` = 20,SUM(wd.amount),0)) balanceAmount
+        FROM
+            account_dept_running_water rw
+            JOIN account_dept_running_water_detail wd  ON rw.id = wd.dept_running_water_id
+            LEFT JOIN account_running_water ar ON rw.running_water_id = ar.id
+            ${ew.customSqlSegment}
+    </select>
+
 </mapper>

+ 56 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/serviceContract/ServiceContractController.java

@@ -0,0 +1,56 @@
+package com.fjhx.sale.controller.serviceContract;
+
+import com.fjhx.sale.entity.serviceContract.po.ServiceContract;
+import com.fjhx.sale.enums.ServiceContractEnum;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractVo;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractSelectDto;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.sale.service.serviceContract.ServiceContractService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 服务合同表 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@RestController
+@RequestMapping("/serviceContract")
+public class ServiceContractController {
+
+    @Autowired
+    private ServiceContractService serviceContractService;
+
+    /**
+     * 服务合同表分页
+     */
+    @PostMapping("/page")
+    public Page<ServiceContractVo> page(@RequestBody ServiceContractSelectDto dto) {
+        return serviceContractService.getPage(dto);
+    }
+
+    /**
+     * 服务合同表明细
+     */
+    @PostMapping("/detail")
+    public ServiceContractVo detail(@RequestBody BaseSelectDto dto) {
+        return serviceContractService.detail(dto.getId());
+    }
+
+    /**
+     * 作废功能(修改合同的状态为作废)
+     */
+    @PostMapping("/cancel")
+    public void cancel(@RequestBody ServiceContractDto serviceContractDto){
+        serviceContractDto.setStatus(ServiceContractEnum.CANCEL.getKey());
+        serviceContractService.updateById(serviceContractDto);
+    }
+
+
+}

+ 34 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/serviceContract/ServiceContractPayController.java

@@ -0,0 +1,34 @@
+package com.fjhx.sale.controller.serviceContract;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractPayVo;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractPaySelectDto;
+import com.fjhx.sale.service.serviceContract.ServiceContractPayService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 服务合同 -收费项目表 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@RestController
+@RequestMapping("/serviceContractPay")
+public class ServiceContractPayController {
+
+    @Autowired
+    private ServiceContractPayService serviceContractPayService;
+
+    /**
+     * 服务合同 -收费项目表分页
+     */
+    @PostMapping("/page")
+    public Page<ServiceContractPayVo> page(@RequestBody ServiceContractPaySelectDto dto) {
+        return serviceContractPayService.getPage(dto);
+    }
+
+}

+ 34 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/serviceContract/ServiceContractProductController.java

@@ -0,0 +1,34 @@
+package com.fjhx.sale.controller.serviceContract;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractProductVo;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractProductSelectDto;
+import com.fjhx.sale.service.serviceContract.ServiceContractProductService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 服务合同-报价单关联表 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@RestController
+@RequestMapping("/serviceContractProduct")
+public class ServiceContractProductController {
+
+    @Autowired
+    private ServiceContractProductService serviceContractProductService;
+
+    /**
+     * 服务合同-报价单关联表分页
+     */
+    @PostMapping("/page")
+    public Page<ServiceContractProductVo> page(@RequestBody ServiceContractProductSelectDto dto) {
+        return serviceContractProductService.getPage(dto);
+    }
+
+}

+ 52 - 0
hx-sale/src/main/java/com/fjhx/sale/controller/serviceContract/ServiceContractRecordController.java

@@ -0,0 +1,52 @@
+package com.fjhx.sale.controller.serviceContract;
+
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractRecordVo;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractRecordSelectDto;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractRecordDto;
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import com.fjhx.sale.service.serviceContract.ServiceContractRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+/**
+ * <p>
+ * 服务合同记录表 前端控制器
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@RestController
+@RequestMapping("/serviceContractRecord")
+public class ServiceContractRecordController {
+
+    @Autowired
+    private ServiceContractRecordService serviceContractRecordService;
+
+    /**
+     * 服务合同记录表分页
+     */
+    @PostMapping("/page")
+    public Page<ServiceContractRecordVo> page(@RequestBody ServiceContractRecordSelectDto dto) {
+        return serviceContractRecordService.getPage(dto);
+    }
+
+    /**
+     * 服务合同记录表明细
+     */
+    @PostMapping("/detail")
+    public ServiceContractRecordVo detail(@RequestBody BaseSelectDto dto) {
+        return serviceContractRecordService.detail(dto.getId());
+    }
+
+    /**
+     * 服务合同记录表新增
+     */
+    @PostMapping("/add")
+    public void add(@RequestBody ServiceContractRecordDto serviceContractRecordDto) {
+        serviceContractRecordService.add(serviceContractRecordDto);
+    }
+
+}

+ 30 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractDto.java

@@ -0,0 +1,30 @@
+package com.fjhx.sale.entity.serviceContract.dto;
+
+import com.fjhx.sale.entity.serviceContract.po.ServiceContract;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractPay;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractProduct;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 服务合同表新增编辑入参实体
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+public class ServiceContractDto extends ServiceContract {
+
+    /**
+     * 服务合同-收费项目表
+     */
+    private List<ServiceContractPay> serviceContractPayList;
+
+    /**
+     * 服务合同-商品表
+     */
+    private List<ServiceContractProduct> serviceContractProductList;
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractPayDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.serviceContract.dto;
+
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractPay;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 服务合同 -收费项目表新增编辑入参实体
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+public class ServiceContractPayDto extends ServiceContractPay {
+
+}

+ 22 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractPaySelectDto.java

@@ -0,0 +1,22 @@
+package com.fjhx.sale.entity.serviceContract.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 服务合同 -收费项目表列表查询入参实体
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+public class ServiceContractPaySelectDto extends BaseSelectDto {
+
+    /**
+     * 收费项目
+
+     */
+    private String payName;
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractProductDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.serviceContract.dto;
+
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractProduct;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 服务合同-报价单关联表新增编辑入参实体
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+public class ServiceContractProductDto extends ServiceContractProduct {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractProductSelectDto.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.serviceContract.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 服务合同-报价单关联表列表查询入参实体
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+public class ServiceContractProductSelectDto extends BaseSelectDto {
+
+}

+ 21 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractRecordDto.java

@@ -0,0 +1,21 @@
+package com.fjhx.sale.entity.serviceContract.dto;
+
+import com.fjhx.file.entity.ObsFile;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractRecord;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * 服务合同记录表新增编辑入参实体
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+public class ServiceContractRecordDto extends ServiceContractRecord {
+
+    private List<ObsFile> fileList;
+}

+ 21 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractRecordSelectDto.java

@@ -0,0 +1,21 @@
+package com.fjhx.sale.entity.serviceContract.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 服务合同记录表列表查询入参实体
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+public class ServiceContractRecordSelectDto extends BaseSelectDto {
+
+    /**
+     * 服务合同表ID
+     */
+    private Long serviceContractId;
+}

+ 26 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/dto/ServiceContractSelectDto.java

@@ -0,0 +1,26 @@
+package com.fjhx.sale.entity.serviceContract.dto;
+
+import com.ruoyi.common.core.domain.BaseSelectDto;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 服务合同表列表查询入参实体
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+public class ServiceContractSelectDto extends BaseSelectDto {
+    /**
+     * 审批状态。10:审批中。20驳回。30 通过   999 作废
+     */
+    private String status;
+
+    /**
+     * 服务状态。10:服务中  20 已完结
+     */
+    private String ServiceStatus;
+
+}

+ 173 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/po/ServiceContract.java

@@ -0,0 +1,173 @@
+package com.fjhx.sale.entity.serviceContract.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.Version;
+import java.math.BigDecimal;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 服务合同表
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+@TableName("service_contract")
+public class ServiceContract extends BasePo {
+
+    /**
+     * 编码
+     */
+    private String code;
+
+    /**
+     * 合同模版ID
+     */
+    private Long contractTemplateId;
+
+    /**
+     * 卖方公司ID
+     */
+    private Long sellCorporationId;
+
+    /**
+     * 卖方联系人名称
+     */
+    private String sellContactName;
+
+    /**
+     * 卖方联系人电话
+     */
+    private String sellContactNumber;
+
+    /**
+     * 卖方国家表id
+     */
+    private String sellCountryId;
+
+    /**
+     * 卖方省份id
+     */
+    private String sellProvinceId;
+
+    /**
+     * 卖方城市id
+     */
+    private String sellCityId;
+
+    /**
+     * 卖方详细地址
+     */
+    private String sellAddress;
+
+    /**
+     * 买方公司ID
+     */
+    private Long buyCorporationId;
+
+    /**
+     * 买方联系人名称
+     */
+    private String buyContactName;
+
+    /**
+     * 买方联系人电话
+     */
+    private String buyContactNumber;
+
+    /**
+     * 买方国家表id
+     */
+    private String buyCountryId;
+
+    /**
+     * 买方省份id
+     */
+    private String buyProvinceId;
+
+    /**
+     * 买方城市id
+     */
+    private String buyCityId;
+
+    /**
+     * 买方详细地址
+     */
+    private String buyAddress;
+
+    /**
+     * 买方邮编
+     */
+    private String buyPostalCode;
+
+    /**
+     * 币种(字典account_currency)
+     */
+    private String currency;
+
+    /**
+     * 付款金额(打款中的实际打款金额)
+     */
+    private BigDecimal amount;
+
+    /**
+     * 付款方式(字典funds_payment_method(多余的业务字段)
+     */
+    private String paymentMethod;
+
+    /**
+     * 预付比例
+     */
+    private String advanceRatio;
+
+    /**
+     * 运输方式(字典  shipping_method)
+     */
+    private String transportMethod;
+
+    /**
+     * 运输备注
+     */
+    private String transportRemark;
+
+    /**
+     * 有效期
+     */
+    private Integer effective;
+
+    /**
+     * 质保期
+     */
+    private Integer warranty;
+
+    /**
+     * 审批状态。10:审批中。20驳回。30通过
+     */
+    private String status;
+
+    /**
+     * 卖方信息
+     */
+    private String remark;
+
+    /**
+     * 收款账号ID
+     */
+    private Long shroffAccountId;
+
+    /**
+     * 版本号
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @Version
+    private String version;
+
+}

+ 44 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/po/ServiceContractPay.java

@@ -0,0 +1,44 @@
+package com.fjhx.sale.entity.serviceContract.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 服务合同 -收费项目表
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+@TableName("service_contract_pay")
+public class ServiceContractPay extends BasePo {
+
+    /**
+     * 服务合同表ID
+     */
+    private Long serviceContractId;
+
+    /**
+     * 收费项目
+
+     */
+    private String payName;
+
+    /**
+     * 金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 63 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/po/ServiceContractProduct.java

@@ -0,0 +1,63 @@
+package com.fjhx.sale.entity.serviceContract.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.math.BigDecimal;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 服务合同-报价单关联表
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+@TableName("service_contract_product")
+public class ServiceContractProduct extends BasePo {
+
+    /**
+     * 服务合同表ID
+     */
+    private Long serviceContractId;
+
+    /**
+     * 商品ID
+     */
+    private Long productId;
+
+    /**
+     * 商品名称
+     */
+    private String productName;
+
+    /**
+     * 商品型号
+     */
+    private String productModel;
+
+    /**
+     * 商品数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 商品单价
+     */
+    private BigDecimal price;
+
+    /**
+     * 商品金额
+     */
+    private BigDecimal amount;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+}

+ 47 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/po/ServiceContractRecord.java

@@ -0,0 +1,47 @@
+package com.fjhx.sale.entity.serviceContract.po;
+
+import com.ruoyi.common.core.domain.BasePo;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 服务合同记录表
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+@TableName("service_contract_record")
+public class ServiceContractRecord extends BasePo {
+
+    /**
+     * 服务合同表ID
+     */
+    private Long serviceContractId;
+
+    /**
+     * 服务人员ID
+     */
+    private Long userId;
+
+    /**
+     * 服务时间
+     */
+    private Date serviceTime;
+
+    /**
+     * 服务状态(10服务中。20 已完结)
+     */
+    private String status;
+
+    /**
+     * 服务记录
+     */
+    private String remark;
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/vo/ServiceContractPayVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.serviceContract.vo;
+
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractPay;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 服务合同 -收费项目表列表查询返回值实体
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+public class ServiceContractPayVo extends ServiceContractPay {
+
+}

+ 17 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/vo/ServiceContractProductVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.sale.entity.serviceContract.vo;
+
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractProduct;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 服务合同-报价单关联表列表查询返回值实体
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+public class ServiceContractProductVo extends ServiceContractProduct {
+
+}

+ 21 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/vo/ServiceContractRecordVo.java

@@ -0,0 +1,21 @@
+package com.fjhx.sale.entity.serviceContract.vo;
+
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractRecord;
+import lombok.Getter;
+import lombok.Setter;
+
+/**setUserName
+ * 服务合同记录表列表查询返回值实体
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+public class ServiceContractRecordVo extends ServiceContractRecord {
+
+    /**
+     * 用户名称
+     */
+    private String userName;
+}

+ 47 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/vo/ServiceContractVo.java

@@ -0,0 +1,47 @@
+package com.fjhx.sale.entity.serviceContract.vo;
+
+import com.fjhx.sale.entity.serviceContract.po.ServiceContract;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractPay;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractProduct;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 服务合同表列表查询返回值实体
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Getter
+@Setter
+public class ServiceContractVo extends ServiceContract {
+
+    /**
+     * 服务状态。10:服务中  20 已完结
+     */
+    private String ServiceStatus;
+
+    /**
+     * 到账金额
+     */
+    private BigDecimal claimAmount;
+
+
+    /**
+     * 业务员名称
+     */
+    private String userName;
+
+    /**
+     * 服务合同-收费项目表
+     */
+    private List<ServiceContractPay> serviceContractPayList;
+
+    /**
+     * 服务合同-商品表
+     */
+    private List<ServiceContractProduct> serviceContractProductList;
+}

+ 50 - 0
hx-sale/src/main/java/com/fjhx/sale/enums/ServiceContractEnum.java

@@ -0,0 +1,50 @@
+package com.fjhx.sale.enums;
+
+import org.apache.commons.collections4.MapUtils;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 服务合同状态
+ */
+public enum ServiceContractEnum {
+    UNDER_REVIEW("10", "审批中"),
+    REJECT("20", "驳回"),
+    PASS("30","通过"),
+    CANCEL("999","作废"),
+    ;
+    private String key;
+
+    private String value;
+
+    private static Map<String, String> map = new LinkedHashMap<>();
+
+    ServiceContractEnum(String key, String value) {
+        this.key = key;
+        this.value = value;
+    }
+
+    /**
+     * 获取枚举map
+     *
+     * @return
+     */
+    public static Map<String, String> getMap() {
+        if (MapUtils.isNotEmpty(map)) {
+            return map;
+        }
+        for (ServiceContractEnum ms : values()) {
+            map.put(ms.key, ms.value);
+        }
+        return map;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public String getValue() {
+        return value;
+    }
+}

+ 93 - 0
hx-sale/src/main/java/com/fjhx/sale/flow/ServiceContractFlow.java

@@ -0,0 +1,93 @@
+package com.fjhx.sale.flow;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.flow.core.FlowDelegate;
+import com.fjhx.sale.entity.quotation.po.QuotationPay;
+import com.fjhx.sale.entity.quotation.po.QuotationProduct;
+import com.fjhx.sale.entity.sale.dto.SaleQuotationDto;
+import com.fjhx.sale.entity.sale.po.SaleQuotation;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractDto;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContract;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractPay;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractProduct;
+import com.fjhx.sale.enums.SaleQuotationEnum;
+import com.fjhx.sale.enums.ServiceContractEnum;
+import com.fjhx.sale.service.quotation.QuotationPayService;
+import com.fjhx.sale.service.quotation.QuotationProductService;
+import com.fjhx.sale.service.sale.SaleQuotationService;
+import com.fjhx.sale.service.serviceContract.ServiceContractPayService;
+import com.fjhx.sale.service.serviceContract.ServiceContractProductService;
+import com.fjhx.sale.service.serviceContract.ServiceContractService;
+import com.fjhx.sale.util.code.CodeEnum;
+import com.obs.services.internal.ServiceException;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * 服务合同流程
+ */
+@DS(SourceConstant.SALE)
+@Component
+public class ServiceContractFlow extends FlowDelegate {
+    @Override
+    public String getFlowKey() {
+        return "service_contract_flow";
+    }
+
+    /**
+     * 发起流程
+     * @param flowId 流程ID
+     * @param submitData 采购付款数据
+     * @return
+     */
+    @Override
+    public Long start(Long flowId, JSONObject submitData) {
+        ServiceContractService serviceContractService = SpringUtil.getBean(ServiceContractService.class);
+        ServiceContractPayService serviceContractPayService = SpringUtil.getBean(ServiceContractPayService.class);
+        ServiceContractProductService serviceContractProductService = SpringUtil.getBean(ServiceContractProductService.class);
+        ServiceContractDto contract = submitData.toJavaObject(ServiceContractDto.class);
+        //添加服务合同编码
+        contract.setCode(CodeEnum.SALE_QUOTATION.getCode());
+        //添加服务合同状态
+        contract.setStatus(ServiceContractEnum.UNDER_REVIEW.getKey());
+        //添加服务合同信息
+        serviceContractService.save(contract);
+        List<ServiceContractProduct> serviceContractProductList = contract.getServiceContractProductList();
+        if(CollectionUtils.isNotEmpty(serviceContractProductList)){//保存报价产品信息
+            serviceContractProductList.forEach(serviceContractProduct -> serviceContractProduct.setServiceContractId(contract.getId()));
+            serviceContractProductService.saveBatch(serviceContractProductList);
+        }
+        List<ServiceContractPay> serviceContractPayList = contract.getServiceContractPayList();
+        if(CollectionUtils.isNotEmpty(serviceContractPayList)){//保存报价项目信息
+            serviceContractPayList.forEach(contractPay -> contractPay.setServiceContractId(contract.getId()));
+            serviceContractPayService.saveBatch(serviceContractPayList);
+        }
+
+        return contract.getId();
+    }
+
+    /**
+     * 结束流程
+     * @param flowId 流程ID
+     * @param businessId 业务ID
+     * @param submitData 数据
+     */
+    @Override
+    public void end(Long flowId, Long businessId, JSONObject submitData) {
+        ServiceContractService contractService = SpringUtil.getBean(ServiceContractService.class);
+        //通过业务ID查询合同数据
+        ServiceContract contract = contractService.getById(businessId);
+        if(ObjectUtils.isEmpty(contract)){
+            throw new ServiceException("服务合同不存在");
+        }
+        //修改采购状态为审批通过
+        contract.setStatus(ServiceContractEnum.PASS.getKey());
+        contractService.updateById(contract);
+    }
+}

+ 27 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/serviceContract/ServiceContractMapper.java

@@ -0,0 +1,27 @@
+package com.fjhx.sale.mapper.serviceContract;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContract;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 服务合同表 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+public interface ServiceContractMapper extends BaseMapper<ServiceContract> {
+
+    /**
+     * 服务合同表分页
+     */
+    Page<ServiceContractVo> getPage(@Param("page") Page<Object> page, @Param("ew") QueryWrapper<Object> wrapper);
+
+}

+ 27 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/serviceContract/ServiceContractPayMapper.java

@@ -0,0 +1,27 @@
+package com.fjhx.sale.mapper.serviceContract;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractPay;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractPayVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 服务合同 -收费项目表 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+public interface ServiceContractPayMapper extends BaseMapper<ServiceContractPay> {
+
+    /**
+     * 服务合同 -收费项目表分页
+     */
+    Page<ServiceContractPayVo> getPage(@Param("page") Page<Object> page, @Param("ew") LambdaQueryWrapper<ServiceContractPay> wrapper);
+
+}

+ 26 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/serviceContract/ServiceContractProductMapper.java

@@ -0,0 +1,26 @@
+package com.fjhx.sale.mapper.serviceContract;
+
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractProduct;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractProductVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 服务合同-报价单关联表 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+public interface ServiceContractProductMapper extends BaseMapper<ServiceContractProduct> {
+
+    /**
+     * 服务合同-报价单关联表分页
+     */
+    Page<ServiceContractProductVo> getPage(@Param("page") Page<Object> page, @Param("ew") IWrapper<ServiceContractProduct> wrapper);
+
+}

+ 27 - 0
hx-sale/src/main/java/com/fjhx/sale/mapper/serviceContract/ServiceContractRecordMapper.java

@@ -0,0 +1,27 @@
+package com.fjhx.sale.mapper.serviceContract;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractRecordVo;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import org.apache.ibatis.annotations.Param;
+
+
+/**
+ * <p>
+ * 服务合同记录表 Mapper 接口
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+public interface ServiceContractRecordMapper extends BaseMapper<ServiceContractRecord> {
+
+    /**
+     * 服务合同记录表分页
+     */
+    Page<ServiceContractRecordVo> getPage(@Param("page") Page<Object> page, @Param("ew") LambdaQueryWrapper<ServiceContractRecord> wrapper);
+
+}

+ 25 - 0
hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/ServiceContractPayService.java

@@ -0,0 +1,25 @@
+package com.fjhx.sale.service.serviceContract;
+
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractPay;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractPayVo;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractPaySelectDto;
+
+
+/**
+ * <p>
+ * 服务合同 -收费项目表 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+public interface ServiceContractPayService extends BaseService<ServiceContractPay> {
+
+    /**
+     * 服务合同 -收费项目表分页
+     */
+    Page<ServiceContractPayVo> getPage(ServiceContractPaySelectDto dto);
+
+}

+ 25 - 0
hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/ServiceContractProductService.java

@@ -0,0 +1,25 @@
+package com.fjhx.sale.service.serviceContract;
+
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractProduct;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractProductVo;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractProductSelectDto;
+
+
+/**
+ * <p>
+ * 服务合同-报价单关联表 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+public interface ServiceContractProductService extends BaseService<ServiceContractProduct> {
+
+    /**
+     * 服务合同-报价单关联表分页
+     */
+    Page<ServiceContractProductVo> getPage(ServiceContractProductSelectDto dto);
+
+}

+ 36 - 0
hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/ServiceContractRecordService.java

@@ -0,0 +1,36 @@
+package com.fjhx.sale.service.serviceContract;
+
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractRecord;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractRecordVo;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractRecordSelectDto;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractRecordDto;
+
+
+/**
+ * <p>
+ * 服务合同记录表 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+public interface ServiceContractRecordService extends BaseService<ServiceContractRecord> {
+
+    /**
+     * 服务合同记录表分页
+     */
+    Page<ServiceContractRecordVo> getPage(ServiceContractRecordSelectDto dto);
+
+    /**
+     * 服务合同记录表明细
+     */
+    ServiceContractRecordVo detail(Long id);
+
+    /**
+     * 服务合同记录表新增
+     */
+    void add(ServiceContractRecordDto serviceContractRecordDto);
+
+}

+ 46 - 0
hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/ServiceContractService.java

@@ -0,0 +1,46 @@
+package com.fjhx.sale.service.serviceContract;
+
+import com.fjhx.sale.entity.serviceContract.po.ServiceContract;
+import com.ruoyi.common.core.service.BaseService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractVo;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractSelectDto;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractDto;
+
+
+/**
+ * <p>
+ * 服务合同表 服务类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+public interface ServiceContractService extends BaseService<ServiceContract> {
+
+    /**
+     * 服务合同表分页
+     */
+    Page<ServiceContractVo> getPage(ServiceContractSelectDto dto);
+
+    /**
+     * 服务合同表明细
+     */
+    ServiceContractVo detail(Long id);
+
+    /**
+     * 服务合同表新增
+     */
+    void add(ServiceContractDto serviceContractDto);
+
+    /**
+     * 服务合同表编辑
+     */
+    void edit(ServiceContractDto serviceContractDto);
+
+    /**
+     * 服务合同表删除
+     */
+    void delete(Long id);
+
+}

+ 37 - 0
hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/impl/ServiceContractPayServiceImpl.java

@@ -0,0 +1,37 @@
+package com.fjhx.sale.service.serviceContract.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractPay;
+import com.fjhx.sale.mapper.serviceContract.ServiceContractPayMapper;
+import com.fjhx.sale.service.serviceContract.ServiceContractPayService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractPayVo;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractPaySelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+
+
+/**
+ * <p>
+ * 服务合同 -收费项目表 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Service
+public class ServiceContractPayServiceImpl extends ServiceImpl<ServiceContractPayMapper, ServiceContractPay> implements ServiceContractPayService {
+
+    @Override
+    public Page<ServiceContractPayVo> getPage(ServiceContractPaySelectDto dto) {
+        LambdaQueryWrapper<ServiceContractPay> wrapper = Wrappers.<ServiceContractPay>lambdaQuery();
+        wrapper.orderByDesc(ServiceContractPay::getCreateTime);
+        wrapper.like(ObjectUtil.isNotEmpty(dto.getPayName()),ServiceContractPay::getPayName,dto.getPayName());
+        Page<ServiceContractPayVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+}

+ 33 - 0
hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/impl/ServiceContractProductServiceImpl.java

@@ -0,0 +1,33 @@
+package com.fjhx.sale.service.serviceContract.impl;
+
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractProduct;
+import com.fjhx.sale.mapper.serviceContract.ServiceContractProductMapper;
+import com.fjhx.sale.service.serviceContract.ServiceContractProductService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractProductVo;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractProductSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+
+
+/**
+ * <p>
+ * 服务合同-报价单关联表 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Service
+public class ServiceContractProductServiceImpl extends ServiceImpl<ServiceContractProductMapper, ServiceContractProduct> implements ServiceContractProductService {
+
+    @Override
+    public Page<ServiceContractProductVo> getPage(ServiceContractProductSelectDto dto) {
+        IWrapper<ServiceContractProduct> wrapper = getWrapper();
+        wrapper.orderByDesc("scp", ServiceContractProduct::getId);
+        Page<ServiceContractProductVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        return page;
+    }
+
+}

+ 63 - 0
hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/impl/ServiceContractRecordServiceImpl.java

@@ -0,0 +1,63 @@
+package com.fjhx.sale.service.serviceContract.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.file.utils.ObsFileUtil;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractRecord;
+import com.fjhx.sale.mapper.serviceContract.ServiceContractRecordMapper;
+import com.fjhx.sale.service.serviceContract.ServiceContractRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.BasePo;
+import com.ruoyi.system.utils.UserUtil;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractRecordVo;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractRecordSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractRecordDto;
+import cn.hutool.core.bean.BeanUtil;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 服务合同记录表 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Service
+public class ServiceContractRecordServiceImpl extends ServiceImpl<ServiceContractRecordMapper, ServiceContractRecord> implements ServiceContractRecordService {
+
+    @Override
+    public Page<ServiceContractRecordVo> getPage(ServiceContractRecordSelectDto dto) {
+        LambdaQueryWrapper<ServiceContractRecord> wrapper = Wrappers.<ServiceContractRecord>lambdaQuery();
+        wrapper.orderByDesc(ServiceContractRecord::getServiceTime);
+        wrapper.eq(ServiceContractRecord::getServiceContractId,dto.getServiceContractId());
+        Page<ServiceContractRecordVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
+        List<ServiceContractRecordVo> records = page.getRecords();
+        // 赋值用户名称
+        UserUtil.assignmentNickName(records, BasePo::getCreateUser,ServiceContractRecordVo::setUserName);
+        return page;
+    }
+
+    @Override
+    public ServiceContractRecordVo detail(Long id) {
+        ServiceContractRecord ServiceContractRecord = this.getById(id);
+        ServiceContractRecordVo result = BeanUtil.toBean(ServiceContractRecord, ServiceContractRecordVo.class);
+
+        return result;
+    }
+
+    @Override
+    public void add(ServiceContractRecordDto serviceContractRecordDto) {
+        this.save(serviceContractRecordDto);
+
+        //添加附件信息
+        ObsFileUtil.saveFile(serviceContractRecordDto.getFileList(),serviceContractRecordDto.getId());
+
+    }
+
+}

+ 99 - 0
hx-sale/src/main/java/com/fjhx/sale/service/serviceContract/impl/ServiceContractServiceImpl.java

@@ -0,0 +1,99 @@
+package com.fjhx.sale.service.serviceContract.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.sale.entity.sale.vo.SaleQuotationVo;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContract;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractPay;
+import com.fjhx.sale.entity.serviceContract.po.ServiceContractProduct;
+import com.fjhx.sale.mapper.serviceContract.ServiceContractMapper;
+import com.fjhx.sale.service.serviceContract.ServiceContractPayService;
+import com.fjhx.sale.service.serviceContract.ServiceContractProductService;
+import com.fjhx.sale.service.serviceContract.ServiceContractService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.domain.BasePo;
+import com.ruoyi.system.utils.UserUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.sale.entity.serviceContract.vo.ServiceContractVo;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractSelectDto;
+import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractDto;
+import cn.hutool.core.bean.BeanUtil;
+
+import java.util.List;
+
+
+/**
+ * <p>
+ * 服务合同表 服务实现类
+ * </p>
+ *
+ * @author
+ * @since 2023-04-18
+ */
+@Service
+public class ServiceContractServiceImpl extends ServiceImpl<ServiceContractMapper, ServiceContract> implements ServiceContractService {
+    @Autowired
+    private ServiceContractProductService serviceContractProductService;
+
+    @Autowired
+    private ServiceContractPayService serviceContractPayService;
+
+
+    /**
+     * 服务合同表分页
+     */
+    @Override
+    public Page<ServiceContractVo> getPage(ServiceContractSelectDto dto) {
+        QueryWrapper<Object> query = Wrappers.query();
+        query.orderByDesc("sc.create_time");
+        query.eq(ObjectUtil.isNotEmpty(dto.getStatus()),"sc.status",dto.getStatus());
+        query.eq(ObjectUtil.isNotEmpty(dto.getServiceStatus()),"cc.status",dto.getServiceStatus());
+        Page<ServiceContractVo> page = this.baseMapper.getPage(dto.getPage(), query);
+        List<ServiceContractVo> records = page.getRecords();
+        //赋值用户名称
+        UserUtil.assignmentNickName(records, BasePo::getCreateUser, ServiceContractVo::setUserName);
+        return page;
+    }
+
+    /**
+     * 服务合同表明细
+     */
+    @Override
+    public ServiceContractVo detail(Long id) {
+        //查询服务合同表的信息
+        ServiceContract ServiceContract = this.getById(id);
+        ServiceContractVo result = BeanUtil.toBean(ServiceContract, ServiceContractVo.class);
+
+        //查询服务合同-商品表的数据
+        List<ServiceContractProduct> contractProductList = serviceContractProductService.list(Wrappers.<ServiceContractProduct>lambdaQuery()
+                .eq(ServiceContractProduct::getServiceContractId, result.getId()));
+
+        //查询服务合同-收费项目
+        List<ServiceContractPay> contractPayList = serviceContractPayService.list(Wrappers.<ServiceContractPay>lambdaQuery()
+                .eq(ServiceContractPay::getServiceContractId, result.getId()));
+
+        result.setServiceContractProductList(contractProductList);
+        result.setServiceContractPayList(contractPayList);
+        return result;
+    }
+
+    @Override
+    public void add(ServiceContractDto serviceContractDto) {
+        this.save(serviceContractDto);
+    }
+
+    @Override
+    public void edit(ServiceContractDto serviceContractDto) {
+        this.updateById(serviceContractDto);
+    }
+
+    @Override
+    public void delete(Long id) {
+        this.removeById(id);
+    }
+
+}

+ 3 - 0
hx-sale/src/main/java/com/fjhx/sale/util/code/CodeEnum.java

@@ -20,8 +20,11 @@ public enum CodeEnum {
 
     //外销合同
     CONTRACT("SC-", "yyMM-", "code", 3, ContractService.class),
+    //报价单
     SALE_QUOTATION("GSQT-", "yyMM-", "code", 3, ContractService.class),
     PACK("PACK-", "yyMM-", "code", 3, PackService.class),
+    //服务合同
+    SERVICE_CONTRACT("PO-", "yyMM-", "code", 3, ContractService.class),
     ;
 
     CodeEnum(String prefix, String dateFormat, String codeFieldName, Integer length, Class<? extends IService<?>> serviceCls) {

+ 16 - 0
hx-sale/src/main/resources/mapper/serviceContract/ServiceContractMapper.xml

@@ -0,0 +1,16 @@
+<?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.serviceContract.ServiceContractMapper">
+    <select id="getPage" resultType="com.fjhx.sale.entity.serviceContract.vo.ServiceContractVo">
+        SELECT
+            sc.*,
+            sum(cc.money) claimAmount,
+            cr.status ServiceStatus
+        FROM
+            service_contract sc
+                LEFT JOIN claim_contract cc on sc.id = cc.contract_id
+                left join service_contract_record cr on sc.id = cr.service_contract_id
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 19 - 0
hx-sale/src/main/resources/mapper/serviceContract/ServiceContractPayMapper.xml

@@ -0,0 +1,19 @@
+<?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.serviceContract.ServiceContractPayMapper">
+    <select id="getPage" resultType="com.fjhx.sale.entity.serviceContract.vo.ServiceContractPayVo">
+        select
+            scp.id,
+            scp.service_contract_id,
+            scp.pay_name,
+            scp.amount,
+            scp.remark,
+            scp.create_user,
+            scp.create_time,
+            scp.update_user,
+            scp.update_time
+        from service_contract_pay scp
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 23 - 0
hx-sale/src/main/resources/mapper/serviceContract/ServiceContractProductMapper.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.sale.mapper.serviceContract.ServiceContractProductMapper">
+    <select id="getPage" resultType="com.fjhx.sale.entity.serviceContract.vo.ServiceContractProductVo">
+        select
+            scp.id,
+            scp.service_contract_id,
+            scp.product_id,
+            scp.product_name,
+            scp.product_model,
+            scp.quantity,
+            scp.price,
+            scp.amount,
+            scp.remark,
+            scp.create_user,
+            scp.create_time,
+            scp.update_user,
+            scp.update_time
+        from service_contract_product scp
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>

+ 20 - 0
hx-sale/src/main/resources/mapper/serviceContract/ServiceContractRecordMapper.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.sale.mapper.serviceContract.ServiceContractRecordMapper">
+    <select id="getPage" resultType="com.fjhx.sale.entity.serviceContract.vo.ServiceContractRecordVo">
+        select
+            scr.id,
+            scr.service_contract_id,
+            scr.user_id,
+            scr.service_time,
+            scr.status,
+            scr.remark,
+            scr.create_user,
+            scr.create_time,
+            scr.update_user,
+            scr.update_time
+        from service_contract_record scr
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>