serviceImpl.vm 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. package ${basePackage}.module.${table.moduleName}.service.${table.businessName};
  2. import org.springframework.stereotype.Service;
  3. import javax.annotation.Resource;
  4. import org.springframework.validation.annotation.Validated;
  5. import org.springframework.transaction.annotation.Transactional;
  6. import java.util.*;
  7. import ${basePackage}.module.${table.moduleName}.controller.${sceneEnum.basePackage}.${table.businessName}.vo.*;
  8. import ${basePackage}.module.${table.moduleName}.dal.dataobject.${table.businessName}.${table.className}DO;
  9. ## 特殊:主子表专属逻辑
  10. #foreach ($subTable in $subTables)
  11. import ${basePackage}.module.${subTable.moduleName}.dal.dataobject.${subTable.businessName}.${subTable.className}DO;
  12. #end
  13. import ${PageResultClassName};
  14. import ${PageParamClassName};
  15. import ${basePackage}.module.${table.moduleName}.convert.${table.businessName}.${table.className}Convert;
  16. import ${basePackage}.module.${table.moduleName}.dal.mysql.${table.businessName}.${table.className}Mapper;
  17. ## 特殊:主子表专属逻辑
  18. #foreach ($subTable in $subTables)
  19. #set ($index = $foreach.count - 1)
  20. import ${basePackage}.module.${subTable.moduleName}.dal.mysql.${subTable.businessName}.${subTable.className}Mapper;
  21. #end
  22. import static ${ServiceExceptionUtilClassName}.exception;
  23. import static ${basePackage}.module.${table.moduleName}.enums.ErrorCodeConstants.*;
  24. /**
  25. * ${table.classComment} Service 实现类
  26. *
  27. * @author ${table.author}
  28. */
  29. @Service
  30. @Validated
  31. public class ${table.className}ServiceImpl implements ${table.className}Service {
  32. @Resource
  33. private ${table.className}Mapper ${classNameVar}Mapper;
  34. ## 特殊:主子表专属逻辑
  35. #foreach ($subTable in $subTables)
  36. #set ($index = $foreach.count - 1)
  37. @Resource
  38. private ${subTable.className}Mapper ${subClassNameVars.get($index)}Mapper;
  39. #end
  40. @Override
  41. ## 特殊:主子表专属逻辑(非 ERP 模式)
  42. #if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 )
  43. @Transactional(rollbackFor = Exception.class)
  44. #end
  45. public ${primaryColumn.javaType} create${simpleClassName}(${sceneEnum.prefixClass}${table.className}CreateReqVO createReqVO) {
  46. // 插入
  47. ${table.className}DO ${classNameVar} = ${table.className}Convert.INSTANCE.convert(createReqVO);
  48. ${classNameVar}Mapper.insert(${classNameVar});
  49. ## 特殊:主子表专属逻辑(非 ERP 模式)
  50. #if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 )
  51. // 插入子表
  52. #foreach ($subTable in $subTables)
  53. #set ($index = $foreach.count - 1)
  54. #set ($subSimpleClassName = $subSimpleClassNames.get($index))
  55. #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段
  56. #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
  57. #if ( $subTable.subJoinMany)
  58. create${subSimpleClassName}List(${classNameVar}.getId(), createReqVO.get${subSimpleClassNames.get($index)}s());
  59. #else
  60. create${subSimpleClassName}(${classNameVar}.getId(), createReqVO.get${subSimpleClassNames.get($index)}());
  61. #end
  62. #end
  63. #end
  64. // 返回
  65. return ${classNameVar}.getId();
  66. }
  67. @Override
  68. ## 特殊:主子表专属逻辑(非 ERP 模式)
  69. #if ( $subTables && $subTables.size() > 0 && $table.templateType != 11 )
  70. @Transactional(rollbackFor = Exception.class)
  71. #end
  72. public void update${simpleClassName}(${sceneEnum.prefixClass}${table.className}UpdateReqVO updateReqVO) {
  73. // 校验存在
  74. validate${simpleClassName}Exists(updateReqVO.getId());
  75. // 更新
  76. ${table.className}DO updateObj = ${table.className}Convert.INSTANCE.convert(updateReqVO);
  77. ${classNameVar}Mapper.updateById(updateObj);
  78. ## 特殊:主子表专属逻辑(非 ERP 模式)
  79. #if ( $subTables && $subTables.size() > 0 && $table.templateType != 11)
  80. // 更新子表
  81. #foreach ($subTable in $subTables)
  82. #set ($index = $foreach.count - 1)
  83. #set ($subSimpleClassName = $subSimpleClassNames.get($index))
  84. #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段
  85. #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
  86. #if ( $subTable.subJoinMany)
  87. update${subSimpleClassName}List(updateReqVO.getId(), updateReqVO.get${subSimpleClassNames.get($index)}s());
  88. #else
  89. update${subSimpleClassName}(updateReqVO.getId(), updateReqVO.get${subSimpleClassNames.get($index)}());
  90. #end
  91. #end
  92. #end
  93. }
  94. @Override
  95. ## 特殊:主子表专属逻辑
  96. #if ( $subTables && $subTables.size() > 0)
  97. @Transactional(rollbackFor = Exception.class)
  98. #end
  99. public void delete${simpleClassName}(${primaryColumn.javaType} id) {
  100. // 校验存在
  101. validate${simpleClassName}Exists(id);
  102. ## 特殊:树表专属逻辑
  103. #if ( $table.templateType == 2 )
  104. #set ($ParentJavaField = $treeParentColumn.javaField.substring(0,1).toUpperCase() + ${treeParentColumn.javaField.substring(1)})##首字母大写
  105. // 校验是否有子${table.classComment}
  106. if (${classNameVar}Mapper.selectCountBy${ParentJavaField}(id) > 0) {
  107. throw exception(${simpleClassName_underlineCase.toUpperCase()}_EXITS_CHILDREN);
  108. }
  109. #end
  110. // 删除
  111. ${classNameVar}Mapper.deleteById(id);
  112. ## 特殊:主子表专属逻辑
  113. #if ( $subTables && $subTables.size() > 0)
  114. // 删除子表
  115. #foreach ($subTable in $subTables)
  116. #set ($index = $foreach.count - 1)
  117. #set ($subSimpleClassName = $subSimpleClassNames.get($index))
  118. #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段
  119. #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
  120. delete${subSimpleClassName}By${SubJoinColumnName}(id);
  121. #end
  122. #end
  123. }
  124. private void validate${simpleClassName}Exists(${primaryColumn.javaType} id) {
  125. if (${classNameVar}Mapper.selectById(id) == null) {
  126. throw exception(${simpleClassName_underlineCase.toUpperCase()}_NOT_EXISTS);
  127. }
  128. }
  129. @Override
  130. public ${table.className}DO get${simpleClassName}(${primaryColumn.javaType} id) {
  131. return ${classNameVar}Mapper.selectById(id);
  132. }
  133. ## 特殊:树表专属逻辑(树不需要分页接口)
  134. #if ( $table.templateType != 2 )
  135. @Override
  136. public PageResult<${table.className}DO> get${simpleClassName}Page(${sceneEnum.prefixClass}${table.className}PageReqVO pageReqVO) {
  137. return ${classNameVar}Mapper.selectPage(pageReqVO);
  138. }
  139. #end
  140. @Override
  141. public List<${table.className}DO> get${simpleClassName}List(${sceneEnum.prefixClass}${table.className}ListReqVO listReqVO) {
  142. return ${classNameVar}Mapper.selectList(listReqVO);
  143. }
  144. ## 特殊:主子表专属逻辑
  145. #foreach ($subTable in $subTables)
  146. #set ($index = $foreach.count - 1)
  147. #set ($subSimpleClassName = $subSimpleClassNames.get($index))
  148. #set ($subPrimaryColumn = $subPrimaryColumns.get($index))##当前 primary 字段
  149. #set ($subJoinColumn = $subJoinColumns.get($index))##当前 join 字段
  150. #set ($SubJoinColumnName = $subJoinColumn.javaField.substring(0,1).toUpperCase() + ${subJoinColumn.javaField.substring(1)})##首字母大写
  151. #set ($subClassNameVar = $subClassNameVars.get($index))
  152. // ==================== 子表($subTable.classComment) ====================
  153. ## 情况一:MASTER_ERP 时,需要分查询页子表
  154. #if ( $table.templateType == 11 )
  155. @Override
  156. public PageResult<${subTable.className}DO> get${subSimpleClassName}Page(PageParam pageReqVO, ${subJoinColumn.javaType} ${subJoinColumn.javaField}) {
  157. return ${subClassNameVars.get($index)}Mapper.selectPage(pageReqVO, ${subJoinColumn.javaField});
  158. }
  159. ## 情况二:非 MASTER_ERP 时,需要列表查询子表
  160. #else
  161. #if ( $subTable.subJoinMany )
  162. @Override
  163. public List<${subTable.className}DO> get${subSimpleClassName}ListBy${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) {
  164. return ${subClassNameVars.get($index)}Mapper.selectListBy${SubJoinColumnName}(${subJoinColumn.javaField});
  165. }
  166. #else
  167. @Override
  168. public ${subTable.className}DO get${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaType} ${subJoinColumn.javaField}) {
  169. return ${subClassNameVars.get($index)}Mapper.selectBy${SubJoinColumnName}(${subJoinColumn.javaField});
  170. }
  171. #end
  172. #end
  173. ## 情况一:MASTER_ERP 时,支持单个的新增、修改、删除操作
  174. #if ( $table.templateType == 11 )
  175. @Override
  176. public ${subPrimaryColumn.javaType} create${subSimpleClassName}(${subTable.className}DO ${subClassNameVar}) {
  177. ${subClassNameVars.get($index)}Mapper.insert(${subClassNameVar});
  178. return ${subClassNameVar}.getId();
  179. }
  180. @Override
  181. public void update${subSimpleClassName}(${subTable.className}DO ${subClassNameVar}) {
  182. ${subClassNameVars.get($index)}Mapper.updateById(${subClassNameVar});
  183. }
  184. @Override
  185. public void delete${subSimpleClassName}(${subPrimaryColumn.javaType} id) {
  186. ${subClassNameVars.get($index)}Mapper.deleteById(id);
  187. }
  188. @Override
  189. public ${subTable.className}DO get${subSimpleClassName}(${subPrimaryColumn.javaType} id) {
  190. return ${subClassNameVars.get($index)}Mapper.selectById(id);
  191. }
  192. ## 情况二:非 MASTER_ERP 时,支持批量的新增、修改操作
  193. #else
  194. #if ( $subTable.subJoinMany)
  195. private void create${subSimpleClassName}List(${primaryColumn.javaType} ${subJoinColumn.javaField}, List<${subTable.className}DO> list) {
  196. list.forEach(o -> o.set$SubJoinColumnName(${subJoinColumn.javaField}));
  197. ${subClassNameVars.get($index)}Mapper.insertBatch(list);
  198. }
  199. private void update${subSimpleClassName}List(${primaryColumn.javaType} ${subJoinColumn.javaField}, List<${subTable.className}DO> list) {
  200. delete${subSimpleClassName}By${SubJoinColumnName}(${subJoinColumn.javaField});
  201. list.forEach(o -> o.setId(null).setUpdater(null).setUpdateTime(null)); // 解决更新情况下:1)id 冲突;2)updateTime 不更新
  202. create${subSimpleClassName}List(${subJoinColumn.javaField}, list);
  203. }
  204. #else
  205. private void create${subSimpleClassName}(${primaryColumn.javaType} ${subJoinColumn.javaField}, ${subTable.className}DO ${subClassNameVar}) {
  206. if (${subClassNameVar} == null) {
  207. return;
  208. }
  209. ${subClassNameVar}.set$SubJoinColumnName(${subJoinColumn.javaField});
  210. ${subClassNameVars.get($index)}Mapper.insert(${subClassNameVar});
  211. }
  212. private void update${subSimpleClassName}(${primaryColumn.javaType} ${subJoinColumn.javaField}, ${subTable.className}DO ${subClassNameVar}) {
  213. if (${subClassNameVar} == null) {
  214. return;
  215. }
  216. ${subClassNameVar}.set$SubJoinColumnName(${subJoinColumn.javaField});
  217. ${subClassNameVar}.setUpdater(null).setUpdateTime(null); // 解决更新情况下:updateTime 不更新
  218. ${subClassNameVars.get($index)}Mapper.insertOrUpdate(${subClassNameVar});
  219. }
  220. #end
  221. #end
  222. private void delete${subSimpleClassName}By${SubJoinColumnName}(${primaryColumn.javaType} ${subJoinColumn.javaField}) {
  223. ${subClassNameVars.get($index)}Mapper.deleteBy${SubJoinColumnName}(${subJoinColumn.javaField});
  224. }
  225. #end
  226. }