serviceImpl.vm 10 KB

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