TaskDetailsServiceImpl.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512
  1. package com.goafanti.techproject.service.impl;
  2. import com.goafanti.common.bo.Result;
  3. import com.goafanti.common.dao.*;
  4. import com.goafanti.common.model.*;
  5. import com.goafanti.common.utils.DateUtils;
  6. import com.goafanti.common.utils.StringUtils;
  7. import com.goafanti.common.utils.excel.NewExcelUtil;
  8. import com.goafanti.core.mybatis.BaseMybatisDao;
  9. import com.goafanti.core.mybatis.page.Pagination;
  10. import com.goafanti.core.shiro.token.TokenManager;
  11. import com.goafanti.order.bo.TOrderTaskBo;
  12. import com.goafanti.techproject.bo.InputTaskDetailsBo;
  13. import com.goafanti.techproject.bo.InputTaskFeature;
  14. import com.goafanti.techproject.bo.TaskDetailsBo;
  15. import com.goafanti.techproject.service.TaskDetailsService;
  16. import org.springframework.beans.BeanUtils;
  17. import org.springframework.beans.factory.annotation.Value;
  18. import org.springframework.stereotype.Service;
  19. import javax.annotation.Resource;
  20. import java.lang.reflect.InvocationTargetException;
  21. import java.math.BigDecimal;
  22. import java.math.RoundingMode;
  23. import java.util.*;
  24. import java.util.stream.Collectors;
  25. /**
  26. * 项目申报详情(TaskDetails)表服务实现类
  27. *
  28. * @author makejava
  29. * @since 2024-12-26 17:11:50
  30. */
  31. @Service("taskDetailsService")
  32. public class TaskDetailsServiceImpl extends BaseMybatisDao<TaskDetailsMapper> implements TaskDetailsService {
  33. @Resource
  34. private TaskDetailsMapper taskDetailsMapper;
  35. @Resource
  36. private TaskDetailsLogMapper taskDetailsLogMapper;
  37. @Resource
  38. private TOrderNewMapper tOrderNewMapper;
  39. @Resource
  40. private TOrderMidMapper tOrderMidMapper;
  41. @Resource
  42. private TOrderTaskMapper tOrderTaskMapper;
  43. @Resource
  44. private TaskFeatureMapper taskFeatureMapper;
  45. @Resource
  46. private TaskFeatureLogMapper taskFeatureLogMapper;
  47. @Resource
  48. private TTaskMemberMapper ttaskMemberMapper;
  49. @Value(value = "${upload.path}")
  50. private final String uploadPath = null;
  51. @Override
  52. public Pagination<TaskDetails> list(TaskDetails taskDetails, Integer pageNo, Integer pageSize) {
  53. Map<String, Object> params = new HashMap<>();
  54. params.put("in", taskDetails);
  55. return (Pagination<TaskDetails>) findPage("findTaskDetailsList",
  56. "findTaskDetailsCount", params, pageNo, pageSize);
  57. }
  58. @Override
  59. public TaskDetailsBo pushByTid(Integer id) {
  60. TaskDetailsBo res = new TaskDetailsBo();
  61. TOrderNew tOrderNew = tOrderNewMapper.selectByTid(id);
  62. TOrderTask tOrderTask = tOrderTaskMapper.queryById(id);
  63. TOrderMid mid = tOrderMidMapper.selectByOrderNo(tOrderNew.getOrderNo());
  64. List<Map<String,Object >> list=new ArrayList<>();
  65. TaskDetails taskDetails=null;
  66. //获取项目服务年份算出平均值
  67. List<TOrderTaskBo> tOrderTaskBos = tOrderTaskMapper.selectOrderTaskAll(tOrderNew.getOrderNo(), null);
  68. List<TOrderTaskBo> collect = tOrderTaskBos.stream().filter(e -> e.getSplitStatus() == 1).collect(Collectors.toList());
  69. List<TOrderTaskBo> collect2 = tOrderTaskBos.stream().filter(e -> e.getSplitStatus() == 0||e.getSplitStatus() == 2).collect(Collectors.toList());
  70. int yearSum=1;
  71. for (TOrderTaskBo e : collect) {
  72. if (e.getYearSum()>yearSum){
  73. yearSum=e.getYearSum();
  74. }
  75. }
  76. taskDetails=taskDetailsMapper.selectById(tOrderTask.getProgressTid());
  77. //如果是会员
  78. TOrderTaskBo thisTask = null;
  79. for (TOrderTaskBo e : collect2) {
  80. if (e.getId().equals(id)){
  81. thisTask=e;
  82. break;
  83. }
  84. }
  85. String serviceYear = getServiceYer(thisTask.getServiceYear());
  86. list=addOrderList(collect2,serviceYear);
  87. if (taskDetails !=null){
  88. BeanUtils.copyProperties( taskDetails,res);
  89. }
  90. res.setUserName(mid.getBuyerName());
  91. res.setOrderNo(tOrderNew.getOrderNo());
  92. res.setContractNo(tOrderNew.getContractNo());
  93. res.setServiceYear(serviceYear);
  94. res.setMemberStatus(mid.getProjectType());
  95. res.setTaskList(list);
  96. BigDecimal totalAmount = tOrderNew.getTotalAmount().divide(new BigDecimal(yearSum), 2, RoundingMode.HALF_UP);
  97. String lvl=getOrderLvl(totalAmount);
  98. res.setMemberLvl(lvl);
  99. if (taskDetails!=null&&taskDetails.getTid()!=null){
  100. res.setFeatureList(taskFeatureMapper.selectByTdId(taskDetails.getId()));
  101. }
  102. return res;
  103. }
  104. @Override
  105. public Result export() {
  106. return null;
  107. }
  108. @Override
  109. public Object detailsList(InputTaskDetailsBo in) {
  110. in.setAid(TokenManager.getUserId());
  111. Pagination<?> page = findPage("selectTaskDetailsList", "selectTaskDetailsCount", in);
  112. List<TaskDetails> list = (List<TaskDetails>) page.getList();
  113. List<TaskDetailsBo> list2=new ArrayList<>();
  114. for (TaskDetails e : list) {
  115. TaskDetailsBo bo=new TaskDetailsBo();
  116. BeanUtils.copyProperties(e,bo);
  117. addOrderInformation(bo);
  118. list2.add(bo);
  119. }
  120. page.setList(list2);
  121. return page;
  122. }
  123. private void addOrderInformation(TaskDetailsBo bo) {
  124. TOrderNew tOrderNew = tOrderNewMapper.selectByTid(bo.getTid());
  125. TOrderTask tOrderTask = tOrderTaskMapper.queryById(bo.getTid());
  126. TOrderMid mid = tOrderMidMapper.selectByOrderNo(tOrderNew.getOrderNo());
  127. List<Map<String,Object >> list=new ArrayList<>();
  128. TaskDetails taskDetails=null;
  129. //获取项目服务年份算出平均值
  130. List<TOrderTaskBo> tOrderTaskBos = tOrderTaskMapper.selectOrderTaskAll(tOrderNew.getOrderNo(), null);
  131. List<TOrderTaskBo> collect = tOrderTaskBos.stream().filter(e -> e.getSplitStatus() == 1).collect(Collectors.toList());
  132. List<TOrderTaskBo> collect2 = tOrderTaskBos.stream().filter(e -> e.getSplitStatus() == 0||e.getSplitStatus() == 2).collect(Collectors.toList());
  133. int yearSum=1;
  134. for (TOrderTaskBo e : collect) {
  135. if (e.getYearSum()>yearSum){
  136. yearSum=e.getYearSum();
  137. }
  138. }
  139. TTaskMember tTaskMember = ttaskMemberMapper.selectByTid(tOrderTask.getId());
  140. String serviceYear = getServiceYer(tTaskMember.getServiceYear());
  141. list=addOrderList(collect2,serviceYear);
  142. bo.setUserName(mid.getBuyerName());
  143. bo.setOrderNo(tOrderNew.getOrderNo());
  144. bo.setContractNo(tOrderNew.getContractNo());
  145. bo.setServiceYear(serviceYear);
  146. bo.setMemberStatus(mid.getProjectType());
  147. bo.setTaskList(list);
  148. BigDecimal totalAmount = tOrderNew.getTotalAmount().divide(new BigDecimal(yearSum), 2, RoundingMode.HALF_UP);
  149. String lvl=getOrderLvl(totalAmount);
  150. bo.setMemberLvl(lvl);
  151. bo.setFeatureList(taskFeatureMapper.selectByTdId(bo.getId()));
  152. }
  153. private String getServiceYer(String serviceYear) {
  154. String serviceYear2=null;
  155. if (StringUtils.isEmpty(serviceYear)){
  156. serviceYear2 = "";
  157. }else{
  158. if (serviceYear.contains("(赠)")){
  159. serviceYear2 = serviceYear.replace("(赠)", "");
  160. }else {
  161. serviceYear2 = serviceYear;
  162. }
  163. }
  164. return serviceYear2;
  165. }
  166. private String getOrderLvl(BigDecimal totalAmount) {
  167. String lvl=null;
  168. if (totalAmount.compareTo(new BigDecimal("3"))<0){
  169. lvl ="A";
  170. }else if (totalAmount.compareTo(new BigDecimal("8"))<1){
  171. lvl ="AA";
  172. }else if (totalAmount.compareTo(new BigDecimal("8"))>0){
  173. lvl ="AAA";
  174. }
  175. return lvl;
  176. }
  177. /**
  178. * 通过ID查询单条数据
  179. *
  180. * @param id 主键
  181. * @return 实例对象
  182. */
  183. @Override
  184. public TaskDetails queryById(Integer id) {
  185. return this.taskDetailsMapper.selectById(id);
  186. }
  187. /**
  188. * 新增数据
  189. *
  190. * @param taskDetails 实例对象
  191. * @return 实例对象
  192. */
  193. @Override
  194. public TaskDetails insert(TaskDetails taskDetails,Integer type) {
  195. if (type ==null)type=0;
  196. Date date = new Date();
  197. TOrderNew tOrderNew =tOrderNewMapper.selectByTid(taskDetails.getTid());
  198. taskDetails.setUid(tOrderNew.getBuyerId());
  199. taskDetails.setCreateTime(date);
  200. taskDetails.setUpdateTime(date);
  201. //数据计算
  202. countTaskDetails(taskDetails);
  203. this.taskDetailsMapper.insert(taskDetails);
  204. updateTask(taskDetails,tOrderNew.getOrderNo());
  205. //新增日志数据
  206. if (type==1){
  207. try {
  208. addTaskDetailsLog(taskDetails);
  209. } catch (InvocationTargetException | IllegalAccessException e) {
  210. throw new RuntimeException(e);
  211. }
  212. }
  213. return taskDetails;
  214. }
  215. private void updateTask(TaskDetails taskDetails, String orderNo) {
  216. List<TOrderTaskBo> tOrderTaskBos = tOrderTaskMapper.selectOrderTaskAll(orderNo, null);
  217. List<TOrderTaskBo> collect = tOrderTaskBos.stream().filter(e -> e.getSplitStatus() == 0||e.getSplitStatus() == 2).collect(Collectors.toList());
  218. //如果是会员
  219. TOrderTaskBo thisTask = null;
  220. for (TOrderTaskBo e : collect) {
  221. if (e.getId().equals(taskDetails.getTid())){
  222. thisTask=e;
  223. break;
  224. }
  225. }
  226. String serviceYear = getServiceYer(thisTask.getServiceYear());
  227. for (TOrderTaskBo tOrderTaskBo : collect) {
  228. if (serviceYear != null ){
  229. String serviceYer2 = getServiceYer(tOrderTaskBo.getServiceYear());
  230. if (serviceYear.equals(serviceYer2)){
  231. TOrderTask updatedTask = new TOrderTask();
  232. updatedTask.setId(tOrderTaskBo.getId());
  233. updatedTask.setProgressTid(taskDetails.getId());
  234. tOrderTaskMapper.update(updatedTask);
  235. }
  236. }
  237. }
  238. }
  239. /**
  240. *新增的时候特殊数据可以是单传输,修改的时候可以多传
  241. *
  242. * @param taskDetails 项目进度数据
  243. *
  244. */
  245. private void addTaskDetailsLog(TaskDetails taskDetails) throws InvocationTargetException, IllegalAccessException {
  246. Admin adminToken = TokenManager.getAdminToken();
  247. TaskDetailsLog log=new TaskDetailsLog();
  248. BeanUtils.copyProperties( taskDetails,log);
  249. log.setTdid(taskDetails.getId());
  250. log.setId(null);
  251. log.setAid(adminToken.getId());
  252. log.setAname(adminToken.getName());
  253. log.setCreateTime(new Date());
  254. taskDetailsLogMapper.insert(log);
  255. List<TaskFeature> list = taskFeatureMapper.selectByTdId(taskDetails.getId());
  256. for (TaskFeature feature : list) {
  257. TaskFeatureLog tfLog = new TaskFeatureLog();
  258. BeanUtils.copyProperties(feature, tfLog);
  259. tfLog.setTdlId(log.getId());
  260. tfLog.setId(null);
  261. tfLog.setAid(adminToken.getId());
  262. tfLog.setAname(adminToken.getName());
  263. tfLog.setCreateTime(new Date());
  264. taskFeatureLogMapper.insert(tfLog);
  265. }
  266. }
  267. private void countTaskDetails(TaskDetails taskDetails) {
  268. //计算人员占比
  269. if (taskDetails.getWorkersNumber()!=null||
  270. taskDetails.getTechnologyNumber()!=null){
  271. BigDecimal wn = BigDecimal.valueOf(taskDetails.getWorkersNumber());
  272. BigDecimal tn = BigDecimal.valueOf(taskDetails.getTechnologyNumber());
  273. BigDecimal res = tn.divide(wn,4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
  274. taskDetails.setWorkersRate(res.doubleValue());
  275. }
  276. //计算研发预算完成进度 已归集研发费用总额÷年度研发预算总额X100%
  277. if (taskDetails.getActualRdAmount()!=null &&taskDetails.getRdBudget()!=null){
  278. BigDecimal multiply = taskDetails.getActualRdAmount().divide(taskDetails.getRdBudget(), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
  279. taskDetails.setRdCompletionProgress(multiply.doubleValue());
  280. }
  281. //计算年度研发占比
  282. //计算三年度的研发占比
  283. if (taskDetails.getRdBudget() != null && taskDetails.getRdSalesAmount() != null){
  284. BigDecimal rdBudget = taskDetails.getRdBudget();
  285. BigDecimal rdSalesAmount = taskDetails.getRdSalesAmount();
  286. BigDecimal res = rdBudget.divide(rdSalesAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
  287. taskDetails.setRdBudgetRate(res.doubleValue());
  288. //计算三年度的研发占比
  289. if (taskDetails.getLastRdSalesAmount()!=null && taskDetails.getLastRdBudget()!=null&&
  290. taskDetails.getBeforeLastRdSalesAmount()!=null && taskDetails.getBeforeLastRdBudget()!=null){
  291. BigDecimal res2 = getBigDecimal(rdSalesAmount, rdBudget, taskDetails);
  292. taskDetails.setThreeYearsRdBudgetRate(res2.doubleValue());
  293. }
  294. }
  295. //计算实际研发占比
  296. if(taskDetails.getActualRdNumber() !=null &&
  297. taskDetails.getActualRdAmount() !=null){
  298. BigDecimal actualSalesAmount = taskDetails.getActualSalesAmount();
  299. BigDecimal actualRdAmount = taskDetails.getActualRdAmount();
  300. BigDecimal res3 = actualRdAmount.divide(actualSalesAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
  301. taskDetails.setActualRdRate(res3.doubleValue());
  302. if (taskDetails.getLastRdSalesAmount()!=null && taskDetails.getLastRdBudget()!=null&&
  303. taskDetails.getBeforeLastRdSalesAmount()!=null && taskDetails.getBeforeLastRdBudget()!=null){
  304. BigDecimal res4 = getBigDecimal(actualRdAmount, actualSalesAmount, taskDetails);
  305. taskDetails.setThreeYearsActualRdRate(res4.doubleValue());
  306. }
  307. }
  308. //计算立项资料占比
  309. if (taskDetails.getProjectApprovalWriteNumber()!=null){
  310. BigDecimal projectApprovalWriteNumber = BigDecimal.valueOf(taskDetails.getProjectApprovalWriteNumber());
  311. BigDecimal res5 = projectApprovalWriteNumber.divide(new BigDecimal(taskDetails.getProjectApprovalNumber()), 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
  312. taskDetails.setProjectApprovalWriteRate(res5.doubleValue());
  313. }
  314. }
  315. private BigDecimal getBigDecimal(BigDecimal rdSalesAmount, BigDecimal rdBudget, TaskDetails taskDetails) {
  316. BigDecimal threeYearsRdSalesAmount = rdSalesAmount;
  317. BigDecimal threeYearsRdBudget = rdBudget;
  318. threeYearsRdSalesAmount = threeYearsRdSalesAmount.add(taskDetails.getLastRdSalesAmount()).add(taskDetails.getBeforeLastRdSalesAmount());
  319. threeYearsRdBudget = threeYearsRdBudget.add(taskDetails.getLastRdBudget()).add(taskDetails.getBeforeLastRdBudget());
  320. return threeYearsRdBudget.divide(threeYearsRdSalesAmount, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
  321. }
  322. /**
  323. * 修改数据
  324. *
  325. * @param taskDetails 实例对象
  326. * @return 实例对象
  327. */
  328. @Override
  329. public TaskDetails update(TaskDetails taskDetails,Integer type) {
  330. taskDetails.setUpdateTime(new Date());
  331. countTaskDetails(taskDetails);
  332. this.taskDetailsMapper.update(taskDetails);
  333. TaskDetails res = this.queryById(taskDetails.getId());
  334. //调用就保存,不需要区分不保存
  335. // if (type !=null&&type==1){
  336. try {
  337. addTaskDetailsLog(res);
  338. } catch (InvocationTargetException | IllegalAccessException e) {
  339. throw new RuntimeException(e);
  340. }
  341. // }
  342. return res;
  343. }
  344. @Override
  345. public Object updateDownload(TaskDetails newTd) {
  346. this.taskDetailsMapper.update(newTd);
  347. TaskDetails res = this.queryById(newTd.getId());
  348. return res;
  349. }
  350. /**
  351. * 通过主键删除数据
  352. *
  353. * @param id 主键
  354. * @return 是否成功
  355. */
  356. @Override
  357. public boolean deleteById(Integer id) {
  358. this.taskDetailsMapper.deleteById(id);
  359. return true;
  360. }
  361. @Override
  362. public Result exportById(Integer id) {
  363. NewExcelUtil<TaskDetailsBo> excel=new NewExcelUtil<>(TaskDetailsBo.class);
  364. TaskDetailsBo byTid = pushByTid(id);
  365. pushGetServiceProject(byTid);
  366. return excel.exportTaskDetailsExcel(byTid,"项目进度表",uploadPath);
  367. }
  368. private void pushGetServiceProject( TaskDetailsBo res) {
  369. List<Map<String, Object>> taskList = res.getTaskList();
  370. String serviceYear = null;
  371. if (taskList!=null){
  372. StringBuffer sb = new StringBuffer();
  373. for (Map<String, Object> map : taskList) {
  374. sb.append(map.get("taskName")).append("-").append(map.get("serviceYear")).append(",");
  375. if (serviceYear==null)serviceYear = (String) map.get("serviceYear");
  376. }
  377. res.setServiceYear(serviceYear);
  378. res.setServiceProject(sb.substring(0,sb.length()-1));
  379. }
  380. }
  381. @Override
  382. public boolean checkTid(TaskDetails taskDetails) {
  383. TaskDetails res = taskDetailsMapper.selectByTid(taskDetails.getTid());
  384. return res != null;
  385. }
  386. @Override
  387. public TaskFeature addFeature(InputTaskFeature in) {
  388. in.setCreateTime(new Date());
  389. if (in.getStartTimeStr()!=null)in.setStartTime(DateUtils.parseDate(in.getStartTimeStr()));
  390. if (in.getEndTimeStr()!=null)in.setEndTime(DateUtils.parseDate(in.getEndTimeStr()));
  391. taskFeatureMapper.insert(in);
  392. return in;
  393. }
  394. @Override
  395. public TaskFeature updateFeature(InputTaskFeature in) {
  396. if (in.getStartTimeStr()!=null)in.setStartTime(DateUtils.parseDate(in.getStartTimeStr()));
  397. if (in.getEndTimeStr()!=null)in.setEndTime(DateUtils.parseDate(in.getEndTimeStr()));
  398. taskFeatureMapper.update(in);
  399. return taskFeatureMapper.selectById(in.getId());
  400. }
  401. @Override
  402. public Object logList(Integer id, Integer pageNo, Integer pageSize) {
  403. Map<String,Object> param=new HashMap<String, Object>();
  404. param.put("tdid",id);
  405. if (pageNo ==null)pageNo=1;
  406. if (pageSize ==null)pageSize=10;
  407. return findPage("selectByTidList", "selectByTidCount", param, pageNo, pageSize);
  408. }
  409. @Override
  410. public Object logDetails(Integer id) {
  411. TaskDetailsLog log = taskDetailsLogMapper.selectById(id);
  412. TaskDetails taskDetails = taskDetailsMapper.selectById(log.getTdid());
  413. Integer tid = taskDetails.getTid();
  414. TaskDetailsBo res = new TaskDetailsBo();
  415. TOrderNew tOrderNew = tOrderNewMapper.selectByTid(tid);
  416. TOrderMid mid = tOrderMidMapper.selectByOrderNo(tOrderNew.getOrderNo());
  417. List<Map<String,Object >> list=new ArrayList<>();
  418. List<TOrderTaskBo> tOrderTaskBos = tOrderTaskMapper.selectOrderTaskAll(tOrderNew.getOrderNo(), 4);
  419. //如果是会员
  420. TOrderTaskBo thisTask = null;
  421. for (TOrderTaskBo e : tOrderTaskBos) {
  422. if (e.getId().equals(tid)){
  423. thisTask=e;
  424. break;
  425. }
  426. }
  427. String serviceYear = getServiceYer(thisTask.getServiceYear());
  428. list=addOrderList(tOrderTaskBos, serviceYear);
  429. if (taskDetails !=null){
  430. BeanUtils.copyProperties(log, res);
  431. }
  432. res.setUserName(mid.getBuyerName());
  433. res.setOrderNo(tOrderNew.getOrderNo());
  434. res.setContractNo(tOrderNew.getContractNo());
  435. res.setMemberStatus(mid.getProjectType());
  436. res.setTaskList(list);
  437. BigDecimal totalAmount = tOrderNew.getTotalAmount();
  438. String lvl=getOrderLvl(totalAmount);
  439. res.setMemberLvl(lvl);
  440. res.setTaskList(list);
  441. res.setFeatureList(taskFeatureLogMapper.selectByTdlid(id));
  442. return res;
  443. }
  444. private List<Map<String, Object>> addOrderList(List<TOrderTaskBo> tOrderTaskBos, String serviceYear) {
  445. List<Map<String, Object>> list =new ArrayList<>();
  446. for (TOrderTaskBo e : tOrderTaskBos) {
  447. String serviceYear1 = getServiceYer(e.getServiceYear());
  448. if (serviceYear1.equals(serviceYear)){
  449. Map<String,Object> map=new HashMap<>();
  450. map.put("serviceYear", e.getServiceYear());
  451. map.put("taskName", e.getCommodityName());
  452. map.put("id",e.getId());
  453. list.add(map);
  454. }
  455. }
  456. return list;
  457. }
  458. @Override
  459. public Object deleteTaskFeature(Integer id) {
  460. return taskFeatureMapper.deleteById(id);
  461. }
  462. }