RepairConsumablesController.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. package com.repair.controller;
  2. import com.repair.api.RepairConsumablesControllerAPI;
  3. import com.repair.common.utils.ExcelExportUtil;
  4. import com.repair.common.utils.ExcelUtils;
  5. import com.repair.common.utils.TimeExchange;
  6. import com.repair.common.utils.paramUtils;
  7. import com.repair.model.enumModel.eRecordStatu;
  8. import com.repair.model.pojo.RepairConsumables;
  9. import com.repair.model.pojo.RepairRecord;
  10. import com.repair.model.request.insertConsumablesRequest;
  11. import com.repair.model.result.CommonResult;
  12. import com.repair.model.result.PageUtils;
  13. import com.repair.model.vo.ChangeConsumesVo;
  14. import com.repair.model.vo.ChangePriceConsumeVo;
  15. import com.repair.model.vo.ConsumableExcelVo;
  16. import com.repair.model.vo.ConsumablePageVo;
  17. import com.repair.services.RepairConsumablesService;
  18. import com.repair.services.RepairRecordService;
  19. import org.apache.poi.ss.usermodel.Workbook;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.transaction.annotation.Transactional;
  22. import org.springframework.validation.BindingResult;
  23. import org.springframework.web.bind.annotation.RestController;
  24. import javax.servlet.http.HttpServletResponse;
  25. import java.lang.reflect.InvocationTargetException;
  26. import java.math.BigDecimal;
  27. import java.text.ParseException;
  28. import java.util.ArrayList;
  29. import java.util.HashMap;
  30. import java.util.List;
  31. import java.util.Map;
  32. import java.util.stream.Collectors;
  33. /**
  34. * <p>
  35. * 前端控制器
  36. * </p>
  37. *
  38. * @author ceshi
  39. * @since 2023-07-20
  40. */
  41. @RestController
  42. public class RepairConsumablesController implements RepairConsumablesControllerAPI {
  43. @Autowired
  44. private RepairConsumablesService repairConsumablesService;
  45. @Autowired
  46. private RepairRecordService repairRecordService;
  47. @Override
  48. public CommonResult InsertrepairConsumables(RepairConsumables rc, BindingResult bindingResult) {
  49. if (bindingResult.hasErrors()) {
  50. String st = paramUtils.getParamError(bindingResult);
  51. return CommonResult.fail(st);
  52. }
  53. int result = repairConsumablesService.insertRepairConsumables(rc);
  54. return result > 0 ? CommonResult.ok("添加成功") : CommonResult.fail("添加失败");
  55. }
  56. @Override
  57. public CommonResult updaterepairConsumablesById(RepairConsumables rc, BindingResult bindingResult) {
  58. if (bindingResult.hasErrors()) {
  59. String st = paramUtils.getParamError(bindingResult);
  60. return CommonResult.fail(st);
  61. }
  62. int result = repairConsumablesService.updateRepairConsumables(rc);
  63. return result > 0 ? CommonResult.ok("修改成功") : CommonResult.fail("修改失败");
  64. }
  65. @Override
  66. public CommonResult queryPagerepairConsumabless(int currentPage, int pageCount, String name) {
  67. PageUtils<RepairConsumables> result = repairConsumablesService.queryPageRepairConsumabless(currentPage, pageCount, name);
  68. return CommonResult.ok(result);
  69. }
  70. @Override
  71. public CommonResult deleterepairConsumablesById(int id) {
  72. RepairConsumables data = repairConsumablesService.getRepairById(id);
  73. if (data == null) {
  74. return CommonResult.fail("当前数据不存在,删除失败!");
  75. }
  76. int result = repairConsumablesService.deleteRepairConsumablesById(id);
  77. return result > 0 ? CommonResult.ok("删除成功") : CommonResult.fail("删除失败");
  78. }
  79. @Override
  80. public CommonResult queryRepairConsumablePageList(int currentPage, int pageCount, String keyWord, String startTime, String endTime) {
  81. if (startTime != null && endTime != null) {
  82. try {
  83. startTime = TimeExchange.getStartOfDayStr(TimeExchange.StringToDate(startTime, "yyyy-MM-dd"));
  84. endTime = TimeExchange.getEndOfDayStr(TimeExchange.StringToDate(endTime, "yyyy-MM-dd"));
  85. } catch (Exception e) {
  86. }
  87. }
  88. PageUtils<ConsumablePageVo> result = repairConsumablesService.queryConsumablePageList(currentPage, pageCount, keyWord, startTime, endTime);
  89. return CommonResult.ok(result);
  90. }
  91. @Override
  92. public void downloadRepairConsumableExcel(String keyWord, String startTime, String endTime, HttpServletResponse response) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
  93. Map<String, String> map = new HashMap<>();
  94. //表头与键值对的映射关系
  95. map.put("id", "数据ID");
  96. map.put("consumeName", "耗材名称");
  97. map.put("price", "单价(元)");
  98. map.put("number", "数量");
  99. map.put("totalPrice", "金额(元)");
  100. map.put("articleName", "工单");
  101. map.put("reportTimeStr", "报修时间");
  102. map.put("updateTimeStr", "维修时间");
  103. if (startTime != null && endTime != null) {
  104. try {
  105. startTime = TimeExchange.getStartOfDayStr(TimeExchange.StringToDate(startTime, "yyyy-MM-dd"));
  106. endTime = TimeExchange.getEndOfDayStr(TimeExchange.StringToDate(endTime, "yyyy-MM-dd"));
  107. } catch (Exception e) {
  108. }
  109. }
  110. List<ConsumableExcelVo> datas = repairConsumablesService.queryConsumablePageList(keyWord, startTime, endTime);
  111. List<String> orderList = new ArrayList<>();
  112. orderList.add("id");
  113. orderList.add("consumeName");
  114. orderList.add("price");
  115. orderList.add("number");
  116. orderList.add("totalPrice");
  117. orderList.add("articleName");
  118. orderList.add("reportTimeStr");
  119. orderList.add("updateTimeStr");
  120. //导出逻辑 这里的list是从导入里面哪来的 map1与map不一样 orderList这里为空
  121. Workbook workbook = ExcelExportUtil.createWorkbook(datas, map, 1, "耗材记录表", orderList);
  122. ExcelUtils.excelDownload(workbook, "耗材记录.xlsx", response);
  123. }
  124. @Override
  125. @Transactional(rollbackFor = {Exception.class})
  126. public CommonResult InsertMaintenanceConsumables(MaintenanceConsumeablesRequest data, BindingResult bindingResult) throws Exception {
  127. try {
  128. if (bindingResult.hasErrors()) {
  129. String st = paramUtils.getParamError(bindingResult);
  130. return CommonResult.fail(st);
  131. }
  132. if (data.getConsumes().size() <= 0) {
  133. return CommonResult.fail("无耗材数据,报价失败");
  134. }
  135. List<RepairConsumables> rcDatas = new ArrayList<>();
  136. for (insertConsumablesRequest rc : data.getConsumes()) {
  137. if (rc.getConsumeId() == null) {
  138. return CommonResult.fail("耗材ID不能为空");
  139. }
  140. if (rc.getConsumeName() == null) {
  141. return CommonResult.fail("耗材名称不能为空");
  142. }
  143. if (rc.getNumber() == null || rc.getNumber() <= 0) {
  144. return CommonResult.fail("耗材数量不能为空");
  145. }
  146. if (rc.getPrice() == null) {
  147. return CommonResult.fail("耗材单价不能为空");
  148. }
  149. RepairConsumables rcData = new RepairConsumables();
  150. rcData.setRecordId(data.getRecordId());
  151. rcData.setConsumeId(rc.getConsumeId());
  152. rcData.setConsumeName(rc.getConsumeName());
  153. rcData.setNumber(rc.getNumber());
  154. rcData.setPrice(rc.getPrice());
  155. rcData.setTotalPrice(new BigDecimal(rcData.getNumber()).multiply(rcData.getPrice()));
  156. rcDatas.add(rcData);
  157. }
  158. RepairRecord rr = repairRecordService.getRepairById(data.getRecordId());
  159. if (rr == null) {
  160. return CommonResult.fail("报修工单不存在,报价失败");
  161. }
  162. if (rr.getMaintenanceState() == eRecordStatu.Finished.getValue()
  163. || rr.getMaintenanceState() == eRecordStatu.Canceled.getValue()
  164. || rr.getMaintenanceState() == eRecordStatu.Closed.getValue()) {
  165. return CommonResult.fail("当前报修工单状态发生变化,报价失败");
  166. }
  167. boolean result = repairConsumablesService.insertConsumableBatch(rcDatas);
  168. if (!result) {
  169. throw new Exception("报价失败!");
  170. }
  171. //只有用户支付完了之后,维修师傅才能继续看到这个单子
  172. rr.setMaintenanceState(eRecordStatu.ToConfirmed.getValue());
  173. rr.setPrice(data.getTotalPrice());
  174. int updateRecord = repairRecordService.updateRepairRecord(rr);
  175. if (updateRecord <= 0) {
  176. throw new Exception("报价失败!");
  177. }
  178. } catch (Exception e) {
  179. throw new Exception("报价失败!");
  180. }
  181. return CommonResult.ok("报价成功");
  182. }
  183. @Override
  184. public CommonResult queryChangePriceConsumables(Integer recordId) {
  185. RepairRecord rr = repairRecordService.getRepairById(recordId);
  186. if (rr == null) {
  187. return CommonResult.fail("维修单已失效,改价失败");
  188. }
  189. if (rr.getMaintenanceState() != eRecordStatu.ToConfirmed.getValue()) {
  190. return CommonResult.fail("维修单不是待确认状态,无法进行改价操作");
  191. }
  192. ChangePriceConsumeVo result = new ChangePriceConsumeVo();
  193. result.setRecordId(recordId);
  194. result.setTotalPrice(rr.getPrice());
  195. result.setMaintenancerName(rr.getMaintenancerName());
  196. result.setMaintenancerPhone(rr.getMaintenancerPhone());
  197. List<ChangeConsumesVo> consumables = repairConsumablesService.repairChangeConsumes(recordId);
  198. result.setConsumes(consumables);
  199. return CommonResult.ok(result);
  200. }
  201. @Override
  202. @Transactional(rollbackFor = {Exception.class})
  203. public CommonResult changeMaintenanceConsumables(MaintenanceConsumeablesRequest data, BindingResult bindingResult) throws Exception {
  204. try {
  205. if (bindingResult.hasErrors()) {
  206. String st = paramUtils.getParamError(bindingResult);
  207. return CommonResult.fail(st);
  208. }
  209. if (data.getConsumes().size() <= 0) {
  210. return CommonResult.fail("无耗材数据,改价失败");
  211. }
  212. List<RepairConsumables> rcDatas = new ArrayList<>();
  213. for (insertConsumablesRequest rc : data.getConsumes()) {
  214. if (rc.getConsumeId() == null) {
  215. return CommonResult.fail("耗材ID不能为空");
  216. }
  217. if (rc.getConsumeName() == null) {
  218. return CommonResult.fail("耗材名称不能为空");
  219. }
  220. if (rc.getNumber() == null || rc.getNumber() <= 0) {
  221. return CommonResult.fail("耗材数量不能为空");
  222. }
  223. if (rc.getPrice() == null) {
  224. return CommonResult.fail("耗材单价不能为空");
  225. }
  226. RepairConsumables rcData = new RepairConsumables();
  227. if (rc.getId() != null && rc.getId() > 0) {
  228. rcData.setId(rc.getId());
  229. }
  230. rcData.setRecordId(data.getRecordId());
  231. rcData.setConsumeId(rc.getConsumeId());
  232. rcData.setConsumeName(rc.getConsumeName());
  233. rcData.setNumber(rc.getNumber());
  234. rcData.setPrice(rc.getPrice());
  235. rcData.setTotalPrice(new BigDecimal(rcData.getNumber()).multiply(rcData.getPrice()));
  236. rcDatas.add(rcData);
  237. }
  238. RepairRecord rr = repairRecordService.getRepairById(data.getRecordId());
  239. if (rr == null) {
  240. return CommonResult.fail("报修工单不存在,改价失败");
  241. }
  242. if (rr.getMaintenanceState() == eRecordStatu.Finished.getValue()
  243. || rr.getMaintenanceState() == eRecordStatu.Canceled.getValue()
  244. || rr.getMaintenanceState() == eRecordStatu.Closed.getValue()) {
  245. return CommonResult.fail("当前报修工单状态发生变化,改价失败");
  246. }
  247. boolean result = repairConsumablesService.insertConsumableBatch(rcDatas);
  248. if (!result) {
  249. throw new Exception("改价失败!");
  250. }
  251. //只有用户支付完了之后,维修师傅才能继续看到这个单子
  252. rr.setMaintenanceState(eRecordStatu.ToConfirmed.getValue());
  253. rr.setPrice(data.getTotalPrice());
  254. int updateRecord = repairRecordService.updateRepairRecord(rr);
  255. if (updateRecord <= 0) {
  256. throw new Exception("改价失败!");
  257. }
  258. //获取原有的耗材记录数据
  259. List<ChangeConsumesVo> oldConsumables = repairConsumablesService.repairChangeConsumes(rr.getId());
  260. List<Integer> newDatas = data.getConsumes().stream().map(insertConsumablesRequest::getId).collect(Collectors.toList());
  261. List<Integer> oldDatas = oldConsumables.stream().map(ChangeConsumesVo::getId).collect(Collectors.toList());
  262. //oldData集合不在newDatas集合中的内容
  263. List<Integer> ids = newDatas.stream().filter(item -> !oldDatas.contains(item)).collect(Collectors.toList());
  264. if(ids.size() > 0){
  265. int deleted = repairConsumablesService.deletedConsumableByIds(ids);
  266. if (updateRecord <= 0) {
  267. throw new Exception("改价失败!");
  268. }
  269. }
  270. } catch (Exception e) {
  271. throw new Exception("改价失败!");
  272. }
  273. return CommonResult.ok("改价成功");
  274. }
  275. }