ICrmContractService.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. package org.dromara.crm.service;
  2. import org.dromara.common.mybatis.core.page.PageQuery;
  3. import org.dromara.common.mybatis.core.page.TableDataInfo;
  4. import org.dromara.crm.domain.bo.CrmContractBo;
  5. import org.dromara.crm.domain.vo.CrmContractVo;
  6. import java.time.LocalDate;
  7. import java.util.Collection;
  8. import java.util.List;
  9. import java.util.Map;
  10. /**
  11. * 合同管理Service接口
  12. *
  13. * @author AI Assistant
  14. * @date 2025-10-04
  15. */
  16. public interface ICrmContractService {
  17. /**
  18. * 查询合同列表(分页)
  19. */
  20. TableDataInfo<CrmContractVo> queryPageList(CrmContractBo bo, PageQuery pageQuery);
  21. /**
  22. * 查询合同列表
  23. */
  24. List<CrmContractVo> queryList(CrmContractBo bo);
  25. /**
  26. * 查询合同详情
  27. */
  28. CrmContractVo queryById(Long id);
  29. /**
  30. * 新增合同
  31. */
  32. Boolean insertByBo(CrmContractBo bo);
  33. /**
  34. * 修改合同
  35. */
  36. Boolean updateByBo(CrmContractBo bo);
  37. /**
  38. * 校验并批量删除合同
  39. */
  40. Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
  41. /**
  42. * 提交审批
  43. */
  44. Boolean submitApproval(Long id, List<Long> approverIds, String remark);
  45. /**
  46. * 批量提交审批
  47. *
  48. * @param ids 合同ID列表
  49. * @param approverIds 审批人ID列表
  50. * @param remark 备注
  51. * @return 成功数量
  52. */
  53. int batchSubmitApproval(List<Long> ids, List<Long> approverIds, String remark);
  54. /**
  55. * 保存合同模板内容
  56. *
  57. * @param id 合同ID
  58. * @param templateContent 模板内容(富文本HTML)
  59. * @param settlementClauseDrafts 第五条结算方式草稿(JSON)
  60. * @return 是否成功
  61. */
  62. Boolean saveTemplate(Long id, String templateContent, String settlementClauseDrafts);
  63. /**
  64. * 获取合同模板内容
  65. *
  66. * @param id 合同ID
  67. * @return 模板内容(富文本HTML)
  68. */
  69. String getTemplate(Long id);
  70. /**
  71. * 撤回审批
  72. */
  73. Boolean withdrawApproval(Long id, String remark);
  74. /**
  75. * 开始执行合同
  76. */
  77. Boolean startExecute(Long id, String remark);
  78. /**
  79. * 完成合同
  80. */
  81. Boolean finishContract(Long id, String remark);
  82. /**
  83. * 作废合同
  84. */
  85. Boolean invalidContract(Long id, String invalidReason, String remark);
  86. /**
  87. * 上传合同文件
  88. */
  89. Boolean uploadFile(Long id, String fileUrl);
  90. /**
  91. * 上传合同扫描件(支持多个附件)
  92. *
  93. * @param id 合同ID
  94. * @param ossIds 附件ossId列表(逗号分隔)- 兼容旧格式
  95. * @return 是否成功
  96. */
  97. Boolean uploadAttachments(Long id, String ossIds);
  98. /**
  99. * 上传合同扫描件(支持多个附件,带分类)
  100. *
  101. * @param id 合同ID
  102. * @param attachments 附件列表(包含ossId和category)
  103. * @return 是否成功
  104. */
  105. Boolean uploadAttachmentsWithCategory(Long id, java.util.List<java.util.Map<String, Object>> attachments);
  106. /**
  107. * 合同统计概览
  108. */
  109. Map<String, Object> statisticsOverview(Long ownerUserId, String beginTime, String endTime);
  110. /**
  111. * 合同状态分布
  112. */
  113. List<Map<String, Object>> statisticsByStatus();
  114. /**
  115. * 合同类型分布
  116. */
  117. List<Map<String, Object>> statisticsByType();
  118. /**
  119. * 合同趋势分析
  120. */
  121. List<Map<String, Object>> statisticsTrend(String type, String beginTime, String endTime);
  122. /**
  123. * 即将到期合同
  124. */
  125. List<CrmContractVo> queryExpiring(Integer days);
  126. /**
  127. * 更新合同回款金额
  128. *
  129. * @param contractId 合同ID
  130. */
  131. Boolean updateReceivedAmount(Long contractId);
  132. /**
  133. * 合同续签
  134. *
  135. * @param parentContractId 原合同ID
  136. * @param bo 新合同信息
  137. * @return 新合同ID
  138. */
  139. Long renewContract(Long parentContractId, CrmContractBo bo);
  140. /**
  141. * 从商机创建合同
  142. *
  143. * @param opportunityId 商机ID
  144. * @param bo 合同信息
  145. * @return 是否成功
  146. */
  147. Boolean createFromOpportunity(Long opportunityId, CrmContractBo bo);
  148. /**
  149. * 从报价单创建合同
  150. *
  151. * @param quoteId 报价单ID
  152. * @param bo 合同信息
  153. * @return 是否成功
  154. */
  155. Boolean createFromQuote(Long quoteId, CrmContractBo bo);
  156. /**
  157. * 从模板创建合同
  158. *
  159. * @param templateId 模板ID
  160. * @param bo 合同信息
  161. * @return 是否成功
  162. */
  163. Boolean createFromTemplate(Long templateId, CrmContractBo bo);
  164. /**
  165. * 合同签订标记
  166. *
  167. * @param id 合同ID
  168. * @param actualSignDate 实际签订日期
  169. * @param contractFile 合同文件
  170. * @param remark 备注
  171. * @return 是否成功
  172. */
  173. Boolean signContract(Long id, java.time.LocalDate actualSignDate, String contractFile, String remark);
  174. /**
  175. * 批量分配负责人
  176. *
  177. * @param ids 合同ID列表
  178. * @param ownerUserId 新负责人ID
  179. * @param remark 备注
  180. * @return 是否成功
  181. */
  182. Boolean batchAssignOwner(Collection<Long> ids, Long ownerUserId, String remark);
  183. /**
  184. * 下载合同PDF
  185. *
  186. * @param id 合同ID
  187. * @return 合同文件路径
  188. */
  189. String downloadContractPdf(Long id);
  190. /**
  191. * 更新合同开票金额
  192. *
  193. * @param contractId 合同ID
  194. * @return 是否成功
  195. */
  196. Boolean updateInvoiceAmount(Long contractId);
  197. /**
  198. * 生成合同编号
  199. *
  200. * @param supplierId 供方主体ID,如果为null则使用默认编码"SX"
  201. * @param signDate 签订日期,如果为null则使用当前日期
  202. * @return 合同编号
  203. */
  204. String generateContractNo(Long supplierId, LocalDate signDate);
  205. }