package com.java110.fee.api.contract; import com.alibaba.fastjson.JSONObject; import com.java110.dto.contract.ContractCollectionDetailDto; import com.java110.utils.util.Assert; import com.java110.utils.util.BeanConvertUtil; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 合同收款明细信息接口 * 适配 contract_collection_detail 表 * @author dev * @date 2025-12-24 */ @RestController @RequestMapping(value = "/contractCollectionDetail") public class ContractCollectionDetailApi { @Autowired protected SqlSessionTemplate sqlSessionTemplate; /** * 保存合同收款明细信息 * * @param reqJson 请求参数 * @return 响应结果 * @serviceCode /contractCollectionDetail/saveContractCollectionDetail * @path /app/contractCollectionDetail/saveContractCollectionDetail */ @RequestMapping(value = "/saveContractCollectionDetail", method = RequestMethod.POST) public ResponseEntity saveContractCollectionDetail(@RequestBody JSONObject reqJson) { // 核心参数校验 Assert.hasKeyAndValue(reqJson, "contractId", "请求报文中未包含合同ID"); // 转换为DTO ContractCollectionDetailDto dto = BeanConvertUtil.covertBean(reqJson, ContractCollectionDetailDto.class); // 调用Mapper保存方法 int insert = sqlSessionTemplate.insert("contractCollectionDetailDaoImpl.saveContractCollectionDetail", BeanConvertUtil.beanCovertMap(dto)); // 构造响应结果 JSONObject resJson = new JSONObject(); if (insert > 0) { resJson.put("code", "0000"); resJson.put("msg", "保存合同收款明细信息成功"); } else { resJson.put("code", "0001"); resJson.put("msg", "保存合同收款明细信息失败"); } resJson.put("count", insert); return ResponseEntity.ok(resJson.toJSONString()); } /** * 重载保存方法(入参为DTO) */ public ResponseEntity saveContractCollectionDetail(ContractCollectionDetailDto dto) { int insert = sqlSessionTemplate.insert("contractCollectionDetailDaoImpl.saveContractCollectionDetail", BeanConvertUtil.beanCovertMap(dto)); JSONObject resJson = new JSONObject(); if (insert > 0) { resJson.put("code", "0000"); resJson.put("msg", "保存合同收款明细信息成功"); } else { resJson.put("code", "0001"); resJson.put("msg", "保存合同收款明细信息失败"); } resJson.put("count", insert); return ResponseEntity.ok(resJson.toJSONString()); } /** * 修改合同收款明细信息 * * @param reqJson 请求参数 * @return 响应结果 * @serviceCode /contractCollectionDetail/updateContractCollectionDetail * @path /app/contractCollectionDetail/updateContractCollectionDetail */ @RequestMapping(value = "/updateContractCollectionDetail", method = RequestMethod.POST) public ResponseEntity updateContractCollectionDetail(@RequestBody JSONObject reqJson) { // 主键/合同ID校验(二选一) Assert.hasKey(reqJson, "id", "请求报文中未包含主键ID"); Assert.hasKey(reqJson, "contractId", "请求报文中未包含合同ID"); ContractCollectionDetailDto dto = BeanConvertUtil.covertBean(reqJson, ContractCollectionDetailDto.class); // 调用Mapper修改方法 int update = sqlSessionTemplate.update("contractCollectionDetailDaoImpl.updateContractCollectionDetail", BeanConvertUtil.beanCovertMap(dto)); JSONObject resJson = new JSONObject(); if (update > 0) { resJson.put("code", "0000"); resJson.put("msg", "修改合同收款明细信息成功"); } else { resJson.put("code", "0001"); resJson.put("msg", "修改合同收款明细信息失败,未找到对应记录"); } resJson.put("count", update); return ResponseEntity.ok(resJson.toJSONString()); } /** * 分页查询合同收款明细信息列表 * * @param id 主键ID(可选) * @param contractId 合同ID(可选) * @param contractIdsStr 合同ID数组(可选,多个用逗号分隔) * @param collectionPeriodStart 收款周期开始时间(可选) * @param collectionPeriodEnd 收款周期结束时间(可选) * @param receivableMoney 应收金额(可选) * @param collectionDate 收款日期(可选) * @param collectionAmount 已收金额(可选) * @param specialReduction 特殊减免(可选) * @param unpaidMoney 未付金额(可选) * @param page 页码(默认1) * @param row 每页条数(默认10) * @return 响应结果 * @serviceCode /contractCollectionDetail/queryContractCollectionDetail * @path /app/contractCollectionDetail/queryContractCollectionDetail */ @RequestMapping(value = "/queryContractCollectionDetail", method = RequestMethod.GET) public ResponseEntity queryContractCollectionDetail( @RequestParam(value = "id", required = false) String id, @RequestParam(value = "contractId", required = false) String contractId, // 前端传逗号分隔字符串(如"1001,1002,1003"),接收后转数组 @RequestParam(value = "contractIds", required = false) String contractIdsStr, @RequestParam(value = "collectionPeriodStart", required = false) String collectionPeriodStart, @RequestParam(value = "collectionPeriodEnd", required = false) String collectionPeriodEnd, @RequestParam(value = "receivableMoney", required = false) String receivableMoney, @RequestParam(value = "collectionDate", required = false) String collectionDate, @RequestParam(value = "collectionAmount", required = false) String collectionAmount, @RequestParam(value = "specialReduction", required = false) String specialReduction, @RequestParam(value = "unpaidMoney", required = false) String unpaidMoney, @RequestParam(value = "page", defaultValue = "1") int page, @RequestParam(value = "row", defaultValue = "10") int row) { // 封装查询参数 ContractCollectionDetailDto queryDto = new ContractCollectionDetailDto(); if (id != null && !id.isEmpty()) { queryDto.setId(Integer.parseInt(id)); } queryDto.setContractId(contractId); queryDto.setCollectionPeriodStart(collectionPeriodStart); queryDto.setCollectionPeriodEnd(collectionPeriodEnd); queryDto.setReceivableMoney(receivableMoney); queryDto.setCollectionDate(collectionDate); queryDto.setCollectionAmount(collectionAmount); queryDto.setSpecialReduction(specialReduction); queryDto.setUnpaidMoney(unpaidMoney); queryDto.setPage((page - 1) * row); queryDto.setRow(row); // 处理contractIds:字符串转数组(兼容前端传参) if (contractIdsStr != null && !contractIdsStr.isEmpty()) { // 按逗号分割为数组 String[] contractIds = contractIdsStr.split(","); queryDto.setContractIds(contractIds); } // 查询列表数据(MyBatis自动识别String[]并遍历) List> list = sqlSessionTemplate.selectList( "contractCollectionDetailDaoImpl.getContractCollectionDetail", BeanConvertUtil.beanCovertMap(queryDto)); // 查询总数 Object total = ((HashMap) sqlSessionTemplate.selectOne( "contractCollectionDetailDaoImpl.queryContractCollectionDetailCount", BeanConvertUtil.beanCovertMap(queryDto))).get("count"); // 构造分页响应 JSONObject resJson = new JSONObject(); resJson.put("code", "0000"); resJson.put("msg", "查询合同收款明细信息成功"); resJson.put("page", page); resJson.put("row", row); resJson.put("total", total); resJson.put("data", list); return ResponseEntity.ok(resJson.toJSONString()); } /** * 根据ID查询单条合同收款明细信息 * * @param id 主键ID * @return 响应结果 * @serviceCode /contractCollectionDetail/getContractCollectionDetailById * @path /app/contractCollectionDetail/getContractCollectionDetailById */ @RequestMapping(value = "/getContractCollectionDetailById", method = RequestMethod.GET) public ResponseEntity getContractCollectionDetailById(@RequestParam(value = "id") Integer id) { // 主键校验 Assert.notNull(id, "主键ID不能为空"); ContractCollectionDetailDto queryDto = new ContractCollectionDetailDto(); queryDto.setId(id); // 查询单条数据 Map result = sqlSessionTemplate.selectOne( "contractCollectionDetailDaoImpl.getContractCollectionDetail", BeanConvertUtil.beanCovertMap(queryDto)); JSONObject resJson = new JSONObject(); if (result != null) { resJson.put("code", "0000"); resJson.put("msg", "查询合同收款明细信息成功"); resJson.put("data", result); } else { resJson.put("code", "0001"); resJson.put("msg", "未找到对应合同收款明细记录"); } return ResponseEntity.ok(resJson.toJSONString()); } /** * 根据合同ID查询合同收款明细信息 * * @param contractId 合同ID * @return 响应结果 * @serviceCode /contractCollectionDetail/getContractCollectionDetailByContractId * @path /app/contractCollectionDetail/getContractCollectionDetailByContractId */ @RequestMapping(value = "/getContractCollectionDetailByContractId", method = RequestMethod.GET) public ResponseEntity getContractCollectionDetailByContractId(@RequestParam(value = "contractId") String contractId) { Assert.hasLength(contractId, "合同ID不能为空"); ContractCollectionDetailDto queryDto = new ContractCollectionDetailDto(); queryDto.setContractId(contractId); List> result = sqlSessionTemplate.selectList( "contractCollectionDetailDaoImpl.getContractCollectionDetail", BeanConvertUtil.beanCovertMap(queryDto)); JSONObject resJson = new JSONObject(); resJson.put("code", "0000"); resJson.put("msg", "查询合同收款明细信息成功"); resJson.put("data", result); return ResponseEntity.ok(resJson.toJSONString()); } }