Browse Source
feat(inspection): 新增费用管理系统功能
feat(inspection): 新增费用管理系统功能
- 创建费用管理相关实体类(SrmFeeHeaderEntity、SrmFeeDetailEntity、SrmInspectRequestFeeEntity) - 实现费用管理控制器(SrmFeeController),提供完整的CRUD操作接口 - 开发费用管理服务层(SrmFeeService及其实现类),包含业务逻辑处理 - 设计费用明细与申请单关联的数据结构和批量操作功能 - 集成MyBatis-Plus进行数据库操作,支持分页查询和事务处理 - 实现费用单号自动生成机制和总金额自动计算更新功能master
9 changed files with 913 additions and 0 deletions
-
197src/main/java/com/xujie/modules/inspection/controller/SrmFeeController.java
-
17src/main/java/com/xujie/modules/inspection/data/AddRequestFeeVO.java
-
40src/main/java/com/xujie/modules/inspection/entity/SrmFeeDetailEntity.java
-
41src/main/java/com/xujie/modules/inspection/entity/SrmFeeHeaderEntity.java
-
25src/main/java/com/xujie/modules/inspection/entity/SrmInspectRequestFeeEntity.java
-
98src/main/java/com/xujie/modules/inspection/mapper/SrmFeeMapper.java
-
78src/main/java/com/xujie/modules/inspection/service/SrmFeeService.java
-
204src/main/java/com/xujie/modules/inspection/service/impl/SrmFeeServiceImpl.java
-
213src/main/resources/mapper/inspection/SrmFeeMapper.xml
@ -0,0 +1,197 @@ |
|||||
|
package com.xujie.modules.inspection.controller; |
||||
|
|
||||
|
import com.xujie.common.utils.PageUtils; |
||||
|
import com.xujie.common.utils.R; |
||||
|
import com.xujie.modules.inspection.data.AddRequestFeeVO; |
||||
|
import com.xujie.modules.inspection.entity.SrmFeeDetailEntity; |
||||
|
import com.xujie.modules.inspection.entity.SrmFeeHeaderEntity; |
||||
|
import com.xujie.modules.inspection.entity.SrmInspectRequestFeeEntity; |
||||
|
import com.xujie.modules.inspection.service.SrmFeeService; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
import java.util.List; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
/** |
||||
|
* 费用管理Controller |
||||
|
*/ |
||||
|
@RestController |
||||
|
@RequestMapping("/inspection/fee") |
||||
|
public class SrmFeeController { |
||||
|
|
||||
|
@Autowired |
||||
|
private SrmFeeService srmFeeService; |
||||
|
|
||||
|
/** |
||||
|
* 分页查询费用主记录列表 |
||||
|
*/ |
||||
|
@PostMapping("/searchFeeHeaderList") |
||||
|
@ResponseBody |
||||
|
public R searchFeeHeaderList(@RequestBody SrmFeeHeaderEntity data) { |
||||
|
PageUtils page = srmFeeService.searchFeeHeaderList(data); |
||||
|
return R.ok().put("page", page); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 根据费用单号查询主记录 |
||||
|
*/ |
||||
|
@PostMapping("/getFeeHeaderByNo") |
||||
|
@ResponseBody |
||||
|
public R getFeeHeaderByNo(@RequestBody SrmFeeHeaderEntity header) { |
||||
|
SrmFeeHeaderEntity result = |
||||
|
srmFeeService.getFeeHeaderByNo( |
||||
|
header.getSite(), |
||||
|
header.getFeeNo() |
||||
|
); |
||||
|
|
||||
|
return R.ok().put("header", result); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 创建费用主记录 |
||||
|
*/ |
||||
|
@PostMapping("/createFeeHeader") |
||||
|
@ResponseBody |
||||
|
public R createFeeHeader(@RequestBody SrmFeeHeaderEntity header) { |
||||
|
srmFeeService.createFeeHeader(header); |
||||
|
return R.ok(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 更新费用主记录 |
||||
|
*/ |
||||
|
@PostMapping("/updateFeeHeader") |
||||
|
@ResponseBody |
||||
|
public R updateFeeHeader(@RequestBody SrmFeeHeaderEntity header) { |
||||
|
|
||||
|
srmFeeService.updateFeeHeader(header); |
||||
|
|
||||
|
return R.ok(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除费用记录 |
||||
|
*/ |
||||
|
@PostMapping("/deleteFeeRecord") |
||||
|
@ResponseBody |
||||
|
public R deleteFeeRecord(@RequestBody SrmFeeHeaderEntity header) { |
||||
|
srmFeeService.deleteFeeRecord( |
||||
|
header.getSite(), |
||||
|
header.getFeeNo() |
||||
|
); |
||||
|
|
||||
|
return R.ok(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 查询费用明细列表 |
||||
|
*/ |
||||
|
@PostMapping("/getFeeDetailList") |
||||
|
@ResponseBody |
||||
|
public R getFeeDetailList(@RequestBody SrmFeeDetailEntity detail) { |
||||
|
List<SrmFeeDetailEntity> details = |
||||
|
srmFeeService.getFeeDetailList( |
||||
|
detail.getSite(), |
||||
|
detail.getFeeNo() |
||||
|
); |
||||
|
|
||||
|
return R.ok().put("details", details); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 根据表单查询费用明细 |
||||
|
*/ |
||||
|
@PostMapping("/getFeeDetailByRequestNo") |
||||
|
@ResponseBody |
||||
|
public R getFeeDetailByRequestNo(@RequestBody SrmFeeDetailEntity detail) { |
||||
|
List<SrmFeeDetailEntity> details = srmFeeService.getFeeDetailByRequestNo( |
||||
|
detail.getSite(), |
||||
|
detail.getFeeNo(), |
||||
|
detail.getRequestNo() |
||||
|
); |
||||
|
return R.ok().put("details", details); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 添加费用明细 |
||||
|
*/ |
||||
|
@PostMapping("/addFeeDetail") |
||||
|
@ResponseBody |
||||
|
public R addFeeDetail(@RequestBody SrmFeeDetailEntity detail) { |
||||
|
srmFeeService.addFeeDetail( |
||||
|
detail, |
||||
|
detail.getCreateBy() |
||||
|
); |
||||
|
|
||||
|
return R.ok(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 更新费用明细 |
||||
|
*/ |
||||
|
@PostMapping("/updateFeeDetail") |
||||
|
@ResponseBody |
||||
|
public R updateFeeDetail(@RequestBody SrmFeeDetailEntity detail) { |
||||
|
srmFeeService.updateFeeDetail( |
||||
|
detail, |
||||
|
detail.getUpdateBy() |
||||
|
); |
||||
|
|
||||
|
return R.ok(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 删除费用明细 |
||||
|
*/ |
||||
|
@PostMapping("/deleteFeeDetail") |
||||
|
@ResponseBody |
||||
|
public R deleteFeeDetail(@RequestBody SrmFeeDetailEntity detail) { |
||||
|
srmFeeService.deleteFeeDetail( |
||||
|
detail.getSite(), |
||||
|
detail.getFeeNo(), |
||||
|
detail.getItemNo() |
||||
|
); |
||||
|
|
||||
|
return R.ok(); |
||||
|
} |
||||
|
/** |
||||
|
* 查询关联申请单列表 |
||||
|
*/ |
||||
|
@PostMapping("/getRequestFeeList") |
||||
|
@ResponseBody |
||||
|
public R getRequestFeeList(@RequestBody SrmInspectRequestFeeEntity entity) { |
||||
|
List<SrmInspectRequestFeeEntity> requestFees = srmFeeService.getRequestFeeList(entity.getSite(), entity.getFeeNo()); |
||||
|
return R.ok().put("requestFees", requestFees); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 添加关联申请单(批量) |
||||
|
*/ |
||||
|
@PostMapping("/addRequestFees") |
||||
|
@ResponseBody |
||||
|
public R addRequestFees(@RequestBody AddRequestFeeVO vo) { |
||||
|
srmFeeService.addRequestFees( |
||||
|
vo.getSite(), |
||||
|
vo.getFeeNo(), |
||||
|
vo.getRequestNos(), |
||||
|
vo.getCurrentUser() |
||||
|
); |
||||
|
|
||||
|
return R.ok(); |
||||
|
} |
||||
|
/** |
||||
|
* 删除关联申请单 |
||||
|
*/ |
||||
|
@PostMapping("/deleteRequestFee") |
||||
|
@ResponseBody |
||||
|
public R deleteRequestFee(@RequestBody SrmInspectRequestFeeEntity entity) { |
||||
|
srmFeeService.deleteRequestFee( |
||||
|
entity.getSite(), |
||||
|
entity.getFeeNo(), |
||||
|
entity.getRequestNo() |
||||
|
); |
||||
|
return R.ok(); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,17 @@ |
|||||
|
package com.xujie.modules.inspection.data; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
@Data |
||||
|
public class AddRequestFeeVO { |
||||
|
|
||||
|
private String site; |
||||
|
|
||||
|
private String feeNo; |
||||
|
|
||||
|
private String currentUser; |
||||
|
|
||||
|
private List<String> requestNos; |
||||
|
} |
||||
@ -0,0 +1,40 @@ |
|||||
|
package com.xujie.modules.inspection.entity; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
|
import lombok.Data; |
||||
|
import org.springframework.format.annotation.DateTimeFormat; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import java.util.Date; |
||||
|
|
||||
|
@Data |
||||
|
@TableName("srm_fee_detail") |
||||
|
public class SrmFeeDetailEntity { |
||||
|
|
||||
|
private String site; |
||||
|
|
||||
|
private String feeNo; |
||||
|
|
||||
|
private Integer itemNo; |
||||
|
|
||||
|
private String feeType; |
||||
|
|
||||
|
private BigDecimal amount; |
||||
|
|
||||
|
private String remark; |
||||
|
|
||||
|
private String createBy; |
||||
|
|
||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
|
private Date createDate; |
||||
|
|
||||
|
private String updateBy; |
||||
|
|
||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
|
private Date updateDate; |
||||
|
|
||||
|
private String requestNo; |
||||
|
} |
||||
@ -0,0 +1,41 @@ |
|||||
|
package com.xujie.modules.inspection.entity; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
|
import com.xujie.common.utils.QueryPage; |
||||
|
import lombok.Data; |
||||
|
import org.springframework.format.annotation.DateTimeFormat; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import java.util.Date; |
||||
|
|
||||
|
@Data |
||||
|
@TableName("srm_fee_header") |
||||
|
public class SrmFeeHeaderEntity extends QueryPage { |
||||
|
|
||||
|
private String site; |
||||
|
|
||||
|
private String feeNo; |
||||
|
|
||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
|
private Date feeDate; |
||||
|
|
||||
|
private BigDecimal totalAmount; |
||||
|
|
||||
|
private String createdBy; |
||||
|
|
||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
|
private Date createdDate; |
||||
|
|
||||
|
private String updateBy; |
||||
|
|
||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
|
private Date updateDate; |
||||
|
|
||||
|
private String applyUser; |
||||
|
|
||||
|
private String remark; |
||||
|
} |
||||
@ -0,0 +1,25 @@ |
|||||
|
package com.xujie.modules.inspection.entity; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.fasterxml.jackson.annotation.JsonFormat; |
||||
|
import lombok.Data; |
||||
|
import org.springframework.format.annotation.DateTimeFormat; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
@Data |
||||
|
@TableName("srm_inspect_request_fee") |
||||
|
public class SrmInspectRequestFeeEntity { |
||||
|
|
||||
|
private String site; |
||||
|
|
||||
|
private String feeNo; |
||||
|
|
||||
|
private String requestNo; |
||||
|
|
||||
|
private String createBy; |
||||
|
|
||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd") |
||||
|
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
||||
|
private Date createDate; |
||||
|
} |
||||
@ -0,0 +1,98 @@ |
|||||
|
package com.xujie.modules.inspection.mapper; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
|
import com.xujie.modules.inspection.entity.SrmFeeDetailEntity; |
||||
|
import com.xujie.modules.inspection.entity.SrmFeeHeaderEntity; |
||||
|
import com.xujie.modules.inspection.entity.SrmInspectRequestFeeEntity; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.apache.ibatis.annotations.Param; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 费用管理Mapper |
||||
|
*/ |
||||
|
@Mapper |
||||
|
public interface SrmFeeMapper extends BaseMapper<SrmFeeHeaderEntity> { |
||||
|
|
||||
|
/** |
||||
|
* 分页查询费用主记录列表 |
||||
|
*/ |
||||
|
IPage<SrmFeeHeaderEntity> searchFeeHeaderList(Page<SrmFeeHeaderEntity> page, @Param("query") SrmFeeHeaderEntity data); |
||||
|
|
||||
|
/** |
||||
|
* 根据费用单号查询主记录 |
||||
|
*/ |
||||
|
SrmFeeHeaderEntity getFeeHeaderByNo(@Param("site") String site, @Param("feeNo") String feeNo); |
||||
|
|
||||
|
/** |
||||
|
* 插入费用主记录 |
||||
|
*/ |
||||
|
void insertFeeHeader(SrmFeeHeaderEntity header); |
||||
|
|
||||
|
/** |
||||
|
* 更新费用主记录 |
||||
|
*/ |
||||
|
void updateFeeHeader(SrmFeeHeaderEntity header); |
||||
|
|
||||
|
/** |
||||
|
* 删除费用主记录 |
||||
|
*/ |
||||
|
void deleteFeeHeader(@Param("site") String site, @Param("feeNo") String feeNo); |
||||
|
|
||||
|
/** |
||||
|
* 查询费用明细列表 |
||||
|
*/ |
||||
|
List<SrmFeeDetailEntity> getFeeDetailList(@Param("site") String site, @Param("feeNo") String feeNo); |
||||
|
|
||||
|
/** |
||||
|
* 插入费用明细(单条) |
||||
|
*/ |
||||
|
void insertFeeDetail(SrmFeeDetailEntity detail); |
||||
|
|
||||
|
/** |
||||
|
* 批量插入费用明细 |
||||
|
*/ |
||||
|
void batchInsertFeeDetail(@Param("list") List<SrmFeeDetailEntity> list); |
||||
|
|
||||
|
/** |
||||
|
* 更新费用明细 |
||||
|
*/ |
||||
|
void updateFeeDetail(SrmFeeDetailEntity detail); |
||||
|
|
||||
|
/** |
||||
|
* 删除费用明细 |
||||
|
*/ |
||||
|
void deleteFeeDetail(@Param("site") String site, @Param("feeNo") String feeNo); |
||||
|
|
||||
|
/** |
||||
|
* 删除指定行的费用明细 |
||||
|
*/ |
||||
|
void deleteFeeDetailByItemNo(@Param("site") String site, @Param("feeNo") String feeNo, @Param("itemNo") Integer itemNo); |
||||
|
|
||||
|
/** |
||||
|
* 查询关联的申请单列表 |
||||
|
*/ |
||||
|
List<SrmInspectRequestFeeEntity> getRequestFeeList(@Param("site") String site, @Param("feeNo") String feeNo); |
||||
|
|
||||
|
/** |
||||
|
* 删除费用与申请单关联 |
||||
|
*/ |
||||
|
void deleteRequestFee(@Param("site") String site, @Param("feeNo") String feeNo); |
||||
|
|
||||
|
/** |
||||
|
* 删除指定的费用与申请单关联 |
||||
|
*/ |
||||
|
void deleteRequestFeeByRequestNo(@Param("site") String site, @Param("feeNo") String feeNo, @Param("requestNo") String requestNo); |
||||
|
|
||||
|
/** |
||||
|
* 获取下一个费用单号 |
||||
|
*/ |
||||
|
String getNextFeeNo(@Param("site") String site); |
||||
|
|
||||
|
void batchInsertRequestFee(@Param("list") List<SrmInspectRequestFeeEntity> list); |
||||
|
|
||||
|
List<SrmFeeDetailEntity> getFeeDetailByRequestNo(@Param("site") String site,@Param("feeNo") String feeNo, @Param("requestNo") String requestNo); |
||||
|
} |
||||
@ -0,0 +1,78 @@ |
|||||
|
package com.xujie.modules.inspection.service; |
||||
|
|
||||
|
import com.xujie.common.utils.PageUtils; |
||||
|
import com.xujie.modules.inspection.entity.SrmFeeDetailEntity; |
||||
|
import com.xujie.modules.inspection.entity.SrmFeeHeaderEntity; |
||||
|
import com.xujie.modules.inspection.entity.SrmInspectRequestFeeEntity; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 费用管理Service |
||||
|
*/ |
||||
|
public interface SrmFeeService { |
||||
|
|
||||
|
/** |
||||
|
* 分页查询费用主记录列表 |
||||
|
*/ |
||||
|
PageUtils searchFeeHeaderList(SrmFeeHeaderEntity data); |
||||
|
|
||||
|
/** |
||||
|
* 根据费用单号查询主记录 |
||||
|
*/ |
||||
|
SrmFeeHeaderEntity getFeeHeaderByNo(String site, String feeNo); |
||||
|
|
||||
|
/** |
||||
|
* 创建费用主记录 |
||||
|
*/ |
||||
|
void createFeeHeader(SrmFeeHeaderEntity header); |
||||
|
|
||||
|
/** |
||||
|
* 更新费用主记录 |
||||
|
*/ |
||||
|
void updateFeeHeader(SrmFeeHeaderEntity header); |
||||
|
|
||||
|
/** |
||||
|
* 删除费用记录(包括明细和关联申请单) |
||||
|
*/ |
||||
|
void deleteFeeRecord(String site, String feeNo); |
||||
|
|
||||
|
/** |
||||
|
* 查询费用明细列表 |
||||
|
*/ |
||||
|
List<SrmFeeDetailEntity> getFeeDetailList(String site, String feeNo); |
||||
|
|
||||
|
/** |
||||
|
* 添加费用明细(单条) |
||||
|
*/ |
||||
|
void addFeeDetail(SrmFeeDetailEntity detail, String currentUser); |
||||
|
|
||||
|
/** |
||||
|
* 更新费用明细 |
||||
|
*/ |
||||
|
void updateFeeDetail(SrmFeeDetailEntity detail, String currentUser); |
||||
|
|
||||
|
/** |
||||
|
* 删除费用明细 |
||||
|
*/ |
||||
|
void deleteFeeDetail(String site, String feeNo, Integer itemNo); |
||||
|
|
||||
|
/** |
||||
|
* 查询关联的申请单列表 |
||||
|
*/ |
||||
|
List<SrmInspectRequestFeeEntity> getRequestFeeList(String site, String feeNo); |
||||
|
|
||||
|
/** |
||||
|
* 删除关联申请单 |
||||
|
*/ |
||||
|
void deleteRequestFee(String site, String feeNo, String requestNo); |
||||
|
|
||||
|
/** |
||||
|
* 生成费用单号 |
||||
|
*/ |
||||
|
String generateFeeNo(String site); |
||||
|
|
||||
|
void addRequestFees(String site, String feeNo, List<String> requestNos, String currentUser); |
||||
|
|
||||
|
List<SrmFeeDetailEntity> getFeeDetailByRequestNo(String site, String feeNo, String requestNo); |
||||
|
} |
||||
@ -0,0 +1,204 @@ |
|||||
|
package com.xujie.modules.inspection.service.impl; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.metadata.IPage; |
||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
||||
|
import com.xujie.common.utils.PageUtils; |
||||
|
import com.xujie.modules.inspection.entity.SrmFeeDetailEntity; |
||||
|
import com.xujie.modules.inspection.entity.SrmFeeHeaderEntity; |
||||
|
import com.xujie.modules.inspection.entity.SrmInspectRequestFeeEntity; |
||||
|
import com.xujie.modules.inspection.mapper.SrmFeeMapper; |
||||
|
import com.xujie.modules.inspection.service.SrmFeeService; |
||||
|
import com.xujie.modules.srm.mapper.SrmSupplierMapper; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import java.util.Date; |
||||
|
import java.util.List; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
/** |
||||
|
* 费用管理Service实现类 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class SrmFeeServiceImpl implements SrmFeeService { |
||||
|
|
||||
|
@Autowired |
||||
|
private SrmFeeMapper srmFeeMapper; |
||||
|
|
||||
|
@Autowired |
||||
|
private SrmSupplierMapper srmSupplierMapper; |
||||
|
|
||||
|
@Override |
||||
|
public PageUtils searchFeeHeaderList(SrmFeeHeaderEntity data) { |
||||
|
IPage<SrmFeeHeaderEntity> page = srmFeeMapper.searchFeeHeaderList( |
||||
|
new Page<>(data.getPage(), data.getLimit()), data); |
||||
|
return new PageUtils(page); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public SrmFeeHeaderEntity getFeeHeaderByNo(String site, String feeNo) { |
||||
|
return srmFeeMapper.getFeeHeaderByNo(site, feeNo); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
@Transactional |
||||
|
public void createFeeHeader(SrmFeeHeaderEntity header) { |
||||
|
// 生成费用单号 |
||||
|
if (header.getFeeNo() == null || header.getFeeNo().isEmpty()) { |
||||
|
header.setFeeNo(generateFeeNo(header.getSite())); |
||||
|
} |
||||
|
|
||||
|
// 设置默认值 |
||||
|
if (header.getTotalAmount() == null) { |
||||
|
header.setTotalAmount(BigDecimal.ZERO); |
||||
|
} |
||||
|
|
||||
|
srmFeeMapper.insertFeeHeader(header); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
@Transactional |
||||
|
public void updateFeeHeader(SrmFeeHeaderEntity header) { |
||||
|
srmFeeMapper.updateFeeHeader(header); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
@Transactional |
||||
|
public void deleteFeeRecord(String site, String feeNo) { |
||||
|
// 删除明细 |
||||
|
srmFeeMapper.deleteFeeDetail(site, feeNo); |
||||
|
// 删除关联申请单 |
||||
|
srmFeeMapper.deleteRequestFee(site, feeNo); |
||||
|
// 删除主记录 |
||||
|
srmFeeMapper.deleteFeeHeader(site, feeNo); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public List<SrmFeeDetailEntity> getFeeDetailList(String site, String feeNo) { |
||||
|
return srmFeeMapper.getFeeDetailList(site, feeNo); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
@Transactional |
||||
|
public void addFeeDetail(SrmFeeDetailEntity detail, String currentUser) { |
||||
|
// 获取当前最大行号 |
||||
|
List<SrmFeeDetailEntity> existingDetails = srmFeeMapper.getFeeDetailList(detail.getSite(), detail.getFeeNo()); |
||||
|
int maxItemNo = existingDetails.stream() |
||||
|
.mapToInt(SrmFeeDetailEntity::getItemNo) |
||||
|
.max() |
||||
|
.orElse(0); |
||||
|
|
||||
|
// 设置新明细的属性 |
||||
|
detail.setItemNo(maxItemNo + 1); |
||||
|
detail.setCreateBy(currentUser); |
||||
|
detail.setUpdateBy(currentUser); |
||||
|
|
||||
|
// 插入明细 |
||||
|
srmFeeMapper.insertFeeDetail(detail); |
||||
|
|
||||
|
// 更新主表总金额 |
||||
|
updateTotalAmount(detail.getSite(), detail.getFeeNo()); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
@Transactional |
||||
|
public void updateFeeDetail(SrmFeeDetailEntity detail, String currentUser) { |
||||
|
detail.setUpdateBy(currentUser); |
||||
|
srmFeeMapper.updateFeeDetail(detail); |
||||
|
|
||||
|
// 更新主表总金额 |
||||
|
updateTotalAmount(detail.getSite(), detail.getFeeNo()); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
@Transactional |
||||
|
public void deleteFeeDetail(String site, String feeNo, Integer itemNo) { |
||||
|
srmFeeMapper.deleteFeeDetailByItemNo(site, feeNo, itemNo); |
||||
|
|
||||
|
// 重新排序行号 |
||||
|
resortItemNos(site, feeNo); |
||||
|
|
||||
|
// 更新主表总金额 |
||||
|
updateTotalAmount(site, feeNo); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public List<SrmInspectRequestFeeEntity> getRequestFeeList(String site, String feeNo) { |
||||
|
return srmFeeMapper.getRequestFeeList(site, feeNo); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
@Transactional |
||||
|
public void addRequestFees(String site, String feeNo, List<String> requestNos, String currentUser) { |
||||
|
if (requestNos == null || requestNos.isEmpty()) { |
||||
|
return; |
||||
|
} |
||||
|
List<SrmInspectRequestFeeEntity> list = requestNos.stream().map(requestNo -> { |
||||
|
SrmInspectRequestFeeEntity entity = new SrmInspectRequestFeeEntity(); |
||||
|
entity.setSite(site); |
||||
|
entity.setFeeNo(feeNo); |
||||
|
entity.setRequestNo(requestNo); |
||||
|
entity.setCreateBy(currentUser); |
||||
|
return entity; |
||||
|
}).collect(Collectors.toList()); |
||||
|
|
||||
|
srmFeeMapper.batchInsertRequestFee(list); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public List<SrmFeeDetailEntity> getFeeDetailByRequestNo(String site, String feeNo, String requestNo) { |
||||
|
return srmFeeMapper.getFeeDetailByRequestNo(site, feeNo, requestNo); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
@Override |
||||
|
@Transactional |
||||
|
public void deleteRequestFee(String site, String feeNo, String requestNo) { |
||||
|
srmFeeMapper.deleteRequestFeeByRequestNo(site, feeNo, requestNo); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 生成费用单号 - 模仿任务单编号生成方式 |
||||
|
*/ |
||||
|
@Override |
||||
|
public String generateFeeNo(String site) { |
||||
|
srmSupplierMapper.updateTransNo(site, "FEE"); |
||||
|
String transNo = srmSupplierMapper.getTransNo(site, "FEE"); |
||||
|
return transNo; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 更新主表总金额 |
||||
|
*/ |
||||
|
private void updateTotalAmount(String site, String feeNo) { |
||||
|
List<SrmFeeDetailEntity> details = srmFeeMapper.getFeeDetailList(site, feeNo); |
||||
|
BigDecimal totalAmount = details.stream() |
||||
|
.map(SrmFeeDetailEntity::getAmount) |
||||
|
.filter(amount -> amount != null) |
||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add); |
||||
|
|
||||
|
// 使用MyBatis-Plus的UpdateWrapper只更新total_amount字段,避免其他字段被覆盖为null |
||||
|
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper<SrmFeeHeaderEntity> updateWrapper = |
||||
|
new com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper<>(); |
||||
|
updateWrapper.eq("site", site) |
||||
|
.eq("fee_no", feeNo) |
||||
|
.set("total_amount", totalAmount) |
||||
|
.set("update_date", new Date()); |
||||
|
|
||||
|
srmFeeMapper.update(null, updateWrapper); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 重新排序行号 |
||||
|
*/ |
||||
|
private void resortItemNos(String site, String feeNo) { |
||||
|
List<SrmFeeDetailEntity> details = srmFeeMapper.getFeeDetailList(site, feeNo); |
||||
|
int itemNo = 1; |
||||
|
for (SrmFeeDetailEntity detail : details) { |
||||
|
detail.setItemNo(itemNo++); |
||||
|
srmFeeMapper.updateFeeDetail(detail); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,213 @@ |
|||||
|
<?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.xujie.modules.inspection.mapper.SrmFeeMapper"> |
||||
|
|
||||
|
<!-- 费用主记录ResultMap --> |
||||
|
<resultMap id="feeHeaderMap" type="com.xujie.modules.inspection.entity.SrmFeeHeaderEntity"> |
||||
|
<result property="site" column="site"/> |
||||
|
<result property="feeNo" column="fee_no"/> |
||||
|
<result property="feeDate" column="fee_date"/> |
||||
|
<result property="totalAmount" column="total_amount"/> |
||||
|
<result property="createdBy" column="created_by"/> |
||||
|
<result property="createdDate" column="created_date"/> |
||||
|
<result property="updateBy" column="update_by"/> |
||||
|
<result property="updateDate" column="update_date"/> |
||||
|
<result property="applyUser" column="apply_user"/> |
||||
|
<result property="remark" column="remark"/> |
||||
|
</resultMap> |
||||
|
|
||||
|
<!-- 费用明细ResultMap --> |
||||
|
<resultMap id="feeDetailMap" type="com.xujie.modules.inspection.entity.SrmFeeDetailEntity"> |
||||
|
<result property="site" column="site"/> |
||||
|
<result property="feeNo" column="fee_no"/> |
||||
|
<result property="itemNo" column="item_no"/> |
||||
|
<result property="feeType" column="fee_type"/> |
||||
|
<result property="amount" column="amount"/> |
||||
|
<result property="remark" column="remark"/> |
||||
|
<result property="createBy" column="create_by"/> |
||||
|
<result property="createDate" column="create_date"/> |
||||
|
<result property="updateBy" column="update_by"/> |
||||
|
<result property="updateDate" column="update_date"/> |
||||
|
</resultMap> |
||||
|
|
||||
|
<!-- 费用与申请单关联ResultMap --> |
||||
|
<resultMap id="requestFeeMap" type="com.xujie.modules.inspection.entity.SrmInspectRequestFeeEntity"> |
||||
|
<result property="site" column="site"/> |
||||
|
<result property="feeNo" column="fee_no"/> |
||||
|
<result property="requestNo" column="request_no"/> |
||||
|
<result property="createBy" column="create_by"/> |
||||
|
<result property="createDate" column="create_date"/> |
||||
|
</resultMap> |
||||
|
|
||||
|
<!-- 分页查询费用主记录列表 --> |
||||
|
<select id="searchFeeHeaderList" resultMap="feeHeaderMap"> |
||||
|
SELECT site, fee_no, fee_date, total_amount, created_by, created_date, |
||||
|
update_by, update_date, apply_user, remark |
||||
|
FROM srm_fee_header |
||||
|
WHERE site = #{query.site} |
||||
|
<if test="query.feeNo != null and query.feeNo != ''"> |
||||
|
AND fee_no LIKE '%' + #{query.feeNo} + '%' |
||||
|
</if> |
||||
|
<if test="query.applyUser != null and query.applyUser != ''"> |
||||
|
AND apply_user LIKE '%' + #{query.applyUser} + '%' |
||||
|
</if> |
||||
|
<if test="query.feeDate != null"> |
||||
|
AND fee_date >= #{query.feeDate} |
||||
|
</if> |
||||
|
ORDER BY created_date DESC |
||||
|
</select> |
||||
|
|
||||
|
<!-- 根据费用单号查询主记录 --> |
||||
|
<select id="getFeeHeaderByNo" resultMap="feeHeaderMap"> |
||||
|
SELECT site, fee_no, fee_date, total_amount, created_by, created_date, |
||||
|
update_by, update_date, apply_user, remark |
||||
|
FROM srm_fee_header |
||||
|
WHERE site = #{site} AND fee_no = #{feeNo} |
||||
|
</select> |
||||
|
|
||||
|
<!-- 插入费用主记录 --> |
||||
|
<insert id="insertFeeHeader"> |
||||
|
INSERT INTO srm_fee_header ( |
||||
|
site, fee_no, fee_date, total_amount, created_by, created_date, |
||||
|
update_by, update_date, apply_user, remark |
||||
|
) VALUES ( |
||||
|
#{site}, #{feeNo}, #{feeDate}, #{totalAmount}, #{createdBy}, GETDATE(), |
||||
|
#{updateBy}, GETDATE(), #{applyUser}, #{remark} |
||||
|
) |
||||
|
</insert> |
||||
|
|
||||
|
<!-- 更新费用主记录 --> |
||||
|
<update id="updateFeeHeader"> |
||||
|
UPDATE srm_fee_header |
||||
|
SET fee_date = #{feeDate}, |
||||
|
total_amount = #{totalAmount}, |
||||
|
update_by = #{updateBy}, |
||||
|
update_date = GETDATE(), |
||||
|
apply_user = #{applyUser}, |
||||
|
remark = #{remark} |
||||
|
WHERE site = #{site} AND fee_no = #{feeNo} |
||||
|
</update> |
||||
|
|
||||
|
<!-- 删除费用主记录 --> |
||||
|
<delete id="deleteFeeHeader"> |
||||
|
DELETE FROM srm_fee_header |
||||
|
WHERE site = #{site} AND fee_no = #{feeNo} |
||||
|
</delete> |
||||
|
|
||||
|
<!-- 查询费用明细列表 --> |
||||
|
<select id="getFeeDetailList" resultMap="feeDetailMap"> |
||||
|
SELECT site, fee_no, item_no, fee_type, amount, remark, |
||||
|
create_by, create_date, update_by, update_date |
||||
|
FROM srm_fee_detail |
||||
|
WHERE site = #{site} AND fee_no = #{feeNo} |
||||
|
ORDER BY item_no |
||||
|
</select> |
||||
|
|
||||
|
<!-- 插入费用明细(单条) --> |
||||
|
<insert id="insertFeeDetail"> |
||||
|
INSERT INTO srm_fee_detail ( |
||||
|
site, fee_no, item_no, fee_type, amount, remark, |
||||
|
create_by, create_date, update_by, update_date |
||||
|
) VALUES ( |
||||
|
#{site}, #{feeNo}, #{itemNo}, #{feeType}, #{amount}, #{remark}, |
||||
|
#{createBy}, GETDATE(), #{updateBy}, GETDATE() |
||||
|
) |
||||
|
</insert> |
||||
|
|
||||
|
<!-- 批量插入费用明细 --> |
||||
|
<insert id="batchInsertFeeDetail"> |
||||
|
INSERT INTO srm_fee_detail ( |
||||
|
site, fee_no, item_no, fee_type, amount, remark, |
||||
|
create_by, create_date, update_by, update_date |
||||
|
) VALUES |
||||
|
<foreach collection="list" item="item" separator=","> |
||||
|
( |
||||
|
#{item.site}, #{item.feeNo}, #{item.itemNo}, #{item.feeType}, |
||||
|
#{item.amount}, #{item.remark}, #{item.createBy}, GETDATE(), |
||||
|
#{item.updateBy}, GETDATE() |
||||
|
) |
||||
|
</foreach> |
||||
|
</insert> |
||||
|
|
||||
|
<!-- 更新费用明细 --> |
||||
|
<update id="updateFeeDetail"> |
||||
|
UPDATE srm_fee_detail |
||||
|
SET fee_type = #{feeType}, |
||||
|
amount = #{amount}, |
||||
|
remark = #{remark}, |
||||
|
update_by = #{updateBy}, |
||||
|
update_date = GETDATE() |
||||
|
WHERE site = #{site} AND fee_no = #{feeNo} AND item_no = #{itemNo} |
||||
|
</update> |
||||
|
|
||||
|
<!-- 删除费用明细 --> |
||||
|
<delete id="deleteFeeDetail"> |
||||
|
DELETE FROM srm_fee_detail |
||||
|
WHERE site = #{site} AND fee_no = #{feeNo} |
||||
|
</delete> |
||||
|
|
||||
|
<!-- 删除指定行的费用明细 --> |
||||
|
<delete id="deleteFeeDetailByItemNo"> |
||||
|
DELETE FROM srm_fee_detail |
||||
|
WHERE site = #{site} AND fee_no = #{feeNo} AND item_no = #{itemNo} |
||||
|
</delete> |
||||
|
|
||||
|
<!-- 查询关联的申请单列表 --> |
||||
|
<select id="getRequestFeeList" resultMap="requestFeeMap"> |
||||
|
SELECT site, fee_no, request_no, create_by, create_date |
||||
|
FROM srm_inspect_request_fee |
||||
|
WHERE site = #{site} AND fee_no = #{feeNo} |
||||
|
ORDER BY create_date |
||||
|
</select> |
||||
|
|
||||
|
<insert id="batchInsertRequestFee"> |
||||
|
INSERT INTO srm_inspect_request_fee |
||||
|
( |
||||
|
site, |
||||
|
fee_no, |
||||
|
request_no, |
||||
|
create_by, |
||||
|
create_date |
||||
|
) |
||||
|
VALUES |
||||
|
<foreach collection="list" item="item" separator=","> |
||||
|
( |
||||
|
#{item.site}, |
||||
|
#{item.feeNo}, |
||||
|
#{item.requestNo}, |
||||
|
#{item.createBy}, |
||||
|
GETDATE() |
||||
|
) |
||||
|
</foreach> |
||||
|
</insert> |
||||
|
|
||||
|
<!-- 删除费用与申请单关联 --> |
||||
|
<delete id="deleteRequestFee"> |
||||
|
DELETE FROM srm_inspect_request_fee |
||||
|
WHERE site = #{site} AND fee_no = #{feeNo} |
||||
|
</delete> |
||||
|
|
||||
|
<!-- 删除指定的费用与申请单关联 --> |
||||
|
<delete id="deleteRequestFeeByRequestNo"> |
||||
|
DELETE FROM srm_inspect_request_fee |
||||
|
WHERE site = #{site} AND fee_no = #{feeNo} AND request_no = #{requestNo} |
||||
|
</delete> |
||||
|
|
||||
|
<!-- 获取下一个费用单号 --> |
||||
|
<select id="getNextFeeNo" resultType="java.lang.String"> |
||||
|
SELECT ISNULL(MAX(fee_no), 'FEE000000') |
||||
|
FROM srm_fee_header |
||||
|
WHERE site = #{site} |
||||
|
</select> |
||||
|
|
||||
|
<select id="getFeeDetailByRequestNo" resultMap="feeDetailMap"> |
||||
|
SELECT r.site, r.fee_no, r.item_no, r.fee_type, r.amount, r.remark, |
||||
|
r.create_by, r.create_date, r.update_by, r.update_date |
||||
|
FROM srm_inspect_request_fee f |
||||
|
LEFT JOIN srm_fee_detail r ON f.fee_no = r.fee_no AND f.site = r.site |
||||
|
WHERE f.request_no = #{requestNo} |
||||
|
AND f.site = #{site} |
||||
|
</select> |
||||
|
|
||||
|
</mapper> |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue