ApprovalController.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. package com.iamberry.rst.controllers.approval;
  2. import com.fasterxml.jackson.core.JsonProcessingException;
  3. import com.fasterxml.jackson.databind.ObjectMapper;
  4. import com.iamberry.rst.core.approval.*;
  5. import com.iamberry.rst.core.page.PageRequest;
  6. import com.iamberry.rst.core.page.PagedResult;
  7. import com.iamberry.rst.core.sys.Admin;
  8. import com.iamberry.rst.faces.approval.ApprovalOrderService;
  9. import com.iamberry.rst.faces.approval.ApprovalTaskService;
  10. import com.iamberry.rst.faces.sys.SysService;
  11. import com.iamberry.wechat.core.entity.WechatUtils;
  12. import com.iamberry.wechat.tools.ResponseJson;
  13. import com.iamberry.wechat.tools.ResultInfo;
  14. import net.sf.json.JSONArray;
  15. import net.sf.json.JSONObject;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Controller;
  18. import org.springframework.web.bind.annotation.RequestMapping;
  19. import org.springframework.web.bind.annotation.RequestParam;
  20. import org.springframework.web.bind.annotation.ResponseBody;
  21. import org.springframework.web.context.ContextLoader;
  22. import org.springframework.web.context.WebApplicationContext;
  23. import org.springframework.web.multipart.commons.CommonsMultipartFile;
  24. import javax.servlet.ServletContext;
  25. import javax.servlet.http.HttpServletRequest;
  26. import java.io.*;
  27. import java.text.ParseException;
  28. import java.text.SimpleDateFormat;
  29. import java.util.*;
  30. /**
  31. * Created by Administrator on 2018/10/9.
  32. */
  33. @Controller
  34. @RequestMapping("/approval")
  35. public class ApprovalController {
  36. @Autowired
  37. private ApprovalOrderService approvalOrderService;
  38. @Autowired
  39. private ApprovalTaskService approvalTaskService;
  40. @Autowired
  41. private SysService sysService;
  42. /**
  43. * 新增审批信息
  44. * @param request
  45. * @param approvalProduction
  46. * @param productionItems
  47. * @return
  48. */
  49. @ResponseBody
  50. @RequestMapping(value = "/addApproval")
  51. public ResponseJson addApproval(HttpServletRequest request, ApprovalProduction approvalProduction, String productionItems,String productionContracts) throws ParseException {
  52. ResponseJson rj =new ResponseJson(200, "添加成功", 200);
  53. if (approvalProduction == null || productionItems == null) {
  54. return ResponseJson.getFAILURE();
  55. }
  56. //获取openid,根据openid查询当前登录人信息
  57. /*String openId = WechatUtils.getUserBySession(request).getUserOpenid();*/
  58. String openId = "oaH_GwObiozJFBypUg0wKJjQpBiU";
  59. //获取审批任务id
  60. Map<String, Object> taskinfo = approvalTaskService.salesmanSubmitApply(1);
  61. String deliveryDate = request.getParameter("deliveryDate");
  62. if(deliveryDate == null ){
  63. return ResponseJson.getFAILURE();
  64. }
  65. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  66. approvalProduction.setProductionDeliveryDate(format.parse(deliveryDate));
  67. //封装生产审批产品项
  68. List<ApprovalProductionItem> listApprovalProductionItem = new ArrayList<ApprovalProductionItem>();
  69. JSONArray jsonProductionItems = JSONArray.fromObject(productionItems);
  70. for (int i = 0; i < jsonProductionItems.size(); i++) {
  71. JSONObject orderItem = jsonProductionItems.getJSONObject(i);
  72. //添加产品项内容
  73. ApprovalProductionItem approvalProductionItem = new ApprovalProductionItem();
  74. approvalProductionItem.setItemBrandName(orderItem.getString("itemBrandName"));
  75. approvalProductionItem.setItemProductName(orderItem.getString("itemProductName"));
  76. approvalProductionItem.setItemColorName(orderItem.getString("itemColorName"));
  77. approvalProductionItem.setItemProductNum(orderItem.getInt("itemProductNum"));
  78. approvalProductionItem.setItemProductModel(orderItem.getString("itemProductModel"));
  79. approvalProductionItem.setItemProductUnit(orderItem.getString("itemProductUnit"));
  80. approvalProductionItem.setItemProductBoxNumber(orderItem.getInt("itemProductBoxNumber"));
  81. listApprovalProductionItem.add(approvalProductionItem);
  82. }
  83. //封装生产审批合同
  84. List<ApprovalProductionContract> listProductionContract = new ArrayList<ApprovalProductionContract>();
  85. JSONArray jsonproductionContracts = JSONArray.fromObject(productionContracts);
  86. for (int i = 0; i < jsonProductionItems.size(); i++) {
  87. JSONObject contract = jsonproductionContracts.getJSONObject(i);
  88. ApprovalProductionContract contractInfo = new ApprovalProductionContract();
  89. contractInfo.setContractUrl(contract.getString("contractUrl"));
  90. contractInfo.setContractName(contract.getString("contractName"));
  91. listProductionContract.add(contractInfo);
  92. }
  93. boolean returnValue = approvalOrderService.insertApprovalProduction(approvalProduction,listApprovalProductionItem,listProductionContract,taskinfo,openId);
  94. if(!returnValue){
  95. return ResponseJson.getFAILURE();
  96. }
  97. return rj;
  98. }
  99. /**
  100. * 上传合同图片
  101. * 通过流的方式上传文件
  102. * @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象
  103. */
  104. @ResponseBody
  105. @RequestMapping("/fileUpload")
  106. public ResponseJson fileUpload(HttpServletRequest request,@RequestParam("file") CommonsMultipartFile file) throws IOException {
  107. ResponseJson responseJson = new ResponseJson();
  108. System.out.println("fileName:"+file.getOriginalFilename());
  109. //获取项目根目录
  110. WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();
  111. ServletContext servletContext = webApplicationContext.getServletContext();
  112. String realPath = servletContext.getRealPath(ResultInfo.CONTRACT_IMAGE);
  113. String imgUrl = new Date().getTime()+file.getOriginalFilename();
  114. try {
  115. //获取输出流
  116. OutputStream os=new FileOutputStream(realPath+imgUrl);
  117. //获取输入流 CommonsMultipartFile 中可以直接得到文件的流
  118. InputStream is=file.getInputStream();
  119. byte[] bts = new byte[1024];
  120. //一个一个字节的读取并写入
  121. while(is.read(bts)!=-1)
  122. {
  123. os.write(bts);
  124. }
  125. os.flush();
  126. os.close();
  127. is.close();
  128. } catch (FileNotFoundException e) {
  129. // TODO Auto-generated catch block
  130. e.printStackTrace();
  131. }
  132. responseJson.setReturnCode(200);
  133. responseJson.addResponseKeyValue("imgUrl",ResultInfo.CONTRACT_IMAGE+imgUrl);
  134. return responseJson;
  135. }
  136. /**
  137. * 查询我发起的/我审核的列表
  138. * @param approvalInfo
  139. * @param pageSize
  140. * @param pageNO
  141. * @param totalNum
  142. * @param selectType 1.我发起的 2.我审核的 3.仓库确认
  143. * @return
  144. * @throws Exception
  145. */
  146. @ResponseBody
  147. @RequestMapping(value = "/approvalInfoList")
  148. public ResponseJson listApprovalInfo(HttpServletRequest request,
  149. ApprovalInfo approvalInfo,Integer selectType,
  150. @RequestParam(value = "pageSize", defaultValue = "10", required = false) Integer pageSize,
  151. @RequestParam(value = "pageNO", defaultValue = "1", required = false) Integer pageNO,
  152. @RequestParam(value = "totalNum", defaultValue = "0", required = false) Integer totalNum) throws Exception {
  153. ResponseJson rj =new ResponseJson(200, "查询成功", 200);
  154. //获取openid,根据openid查询当前登录人信息
  155. /*String openId = WechatUtils.getUserBySession(request).getUserOpenid();*/
  156. String openId = "oaH_GwObiozJFBypUg0wKJjQpBiU";
  157. Admin admin = sysService.getByOpenid(openId);
  158. if(admin == null){
  159. return new ResponseJson(200, "未查询到登录人信息", 500);
  160. }
  161. if(selectType == null){
  162. return new ResponseJson(200, "参数不完整,缺少查询类型字段", 500);
  163. }
  164. if(selectType == 1){//我发起的
  165. approvalInfo.setAdminId(admin.getAdminId());
  166. }else if(selectType == 2){//我审核的
  167. approvalInfo.setApprovalAdminId(admin.getAdminId());
  168. }
  169. PagedResult<ApprovalInfo> pagedResult = approvalOrderService.listApprovalInfo(pageNO, pageSize,approvalInfo,totalNum == null);
  170. if (totalNum != 0) {
  171. pagedResult.setTotal(totalNum);
  172. }
  173. List<ApprovalInfo> approvalList = pagedResult.getDataList();
  174. rj.addResponseKeyValue("approvalList",approvalList);
  175. return rj;
  176. }
  177. /**
  178. * 修改审批状态 (1 通过 2驳回 3撤销 4评论)
  179. * @param
  180. * @return
  181. * @throws Exception
  182. */
  183. @ResponseBody
  184. @RequestMapping(value = "/updateApprovalInfo")
  185. public ResponseJson updateApprovalInfo(HttpServletRequest request,
  186. ApprovalInfo approvalInfo,Integer status) throws Exception {
  187. ResponseJson rj =new ResponseJson(200, "操作成功", 200);
  188. if(status == null){
  189. return ResponseJson.getFAILURE();
  190. }
  191. if(approvalInfo == null){
  192. return ResponseJson.getFAILURE();
  193. }
  194. //获取openid,根据openid查询当前登录人信息
  195. String openId = WechatUtils.getUserBySession(request).getUserOpenid();
  196. Admin admin = sysService.getByOpenid(openId);
  197. if(admin == null){
  198. return new ResponseJson(200, "未查询到登录人信息", 500);
  199. }
  200. //审批历史记录封装
  201. HistoricalRecord historicalRecord = new HistoricalRecord();
  202. historicalRecord.setApprovalId(approvalInfo.getApprovalId());
  203. historicalRecord.setAdminId(admin.getAdminId());
  204. historicalRecord.setApprovalTime(new Date());
  205. //流程信息封装
  206. ProcessInfo processInfo = new ProcessInfo();
  207. processInfo.setAdminId(admin.getAdminId());
  208. processInfo.setApprovalId(approvalInfo.getApprovalId());
  209. processInfo.setProcessDesc(approvalInfo.getApprovalDetails());
  210. //审批信息封装
  211. ApprovalInfo info = new ApprovalInfo();
  212. info.setApprovalId(approvalInfo.getApprovalId());
  213. switch (status){
  214. case 1:
  215. //修改审核历史记录状态为已通过
  216. historicalRecord.setRecordState(2);
  217. if(approvalOrderService.updateHistoricalRecord(historicalRecord) < 1){
  218. return ResponseJson.getFAILURE();
  219. }
  220. //查询当前审核人当前审核任务信息
  221. HistoricalRecord record = approvalOrderService.getHistoricalRecord(historicalRecord);
  222. if(record == null){
  223. return ResponseJson.getFAILURE();
  224. }
  225. //获取下一个审核人,并添加审核历史信息
  226. Map<String, Object> taskMap = approvalTaskService.completeTask(approvalInfo.getActivitiId(),record.getTaskId());
  227. if(taskMap == null){
  228. return ResponseJson.getFAILURE();
  229. }
  230. if((Integer) taskMap.get("status") == 1){//没有下一个审批人,修改审批任务状态为已审批通过
  231. info.setApprovalStatus(2);
  232. if(approvalOrderService.updateApprovalInfo(info) < 1){
  233. return ResponseJson.getFAILURE();
  234. }
  235. }else if((Integer) taskMap.get("status") == 0){//还有下一个审批人,需要增加审批历史任务
  236. if(taskMap.get("users") == null){
  237. return ResponseJson.getFAILURE();
  238. }
  239. String[] split = (String[])taskMap.get("users");
  240. for (String name : split){
  241. //通过name查询管理员id
  242. Admin approvalAdmin = sysService.getByName(name);
  243. if(approvalAdmin == null){
  244. return ResponseJson.getFAILURE();
  245. }
  246. HistoricalRecord recordInfo = new HistoricalRecord();
  247. recordInfo.setApprovalId(approvalInfo.getApprovalId());
  248. recordInfo.setAdminId(approvalAdmin.getAdminId());
  249. recordInfo.setRecordState(1);
  250. recordInfo.setTaskId(taskMap.get("taskId").toString());
  251. if(approvalOrderService.insertHistoricalRecord(recordInfo) < 1){
  252. return ResponseJson.getFAILURE();
  253. }
  254. //修改审核信息表
  255. info.setApprovalStatusDetails("待"+name+"审批");
  256. if(approvalOrderService.updateApprovalInfo(info) < 1){
  257. return ResponseJson.getFAILURE();
  258. }
  259. }
  260. }
  261. //添加流程信息记录
  262. processInfo.setProcessState(2);
  263. if(approvalOrderService.insertProcessInfo(processInfo) < 1){
  264. return ResponseJson.getFAILURE();
  265. }
  266. break;
  267. case 2:
  268. //修改历史记录状态为已驳回
  269. historicalRecord.setRecordState(3);
  270. if(approvalOrderService.updateHistoricalRecord(historicalRecord) < 1){
  271. return ResponseJson.getFAILURE();
  272. }
  273. info.setApprovalStatus(3);
  274. if(approvalOrderService.updateApprovalInfo(info) < 1){
  275. return ResponseJson.getFAILURE();
  276. }
  277. //添加流程信息记录
  278. processInfo.setProcessState(3);
  279. if(approvalOrderService.insertProcessInfo(processInfo) < 1){
  280. return ResponseJson.getFAILURE();
  281. }
  282. //调用第三方revokeTask接口执行撤销
  283. approvalTaskService.revokeTask(approvalInfo.getActivitiId(),"审批人驳回审核");
  284. break;
  285. case 3:
  286. //修改审批信息状态为撤销
  287. info.setApprovalStatus(9);
  288. if(approvalOrderService.updateApprovalInfo(info) < 1){
  289. return ResponseJson.getFAILURE();
  290. }
  291. //删除该审批的历史记录
  292. approvalOrderService.deleteHistoricalRecord(approvalInfo.getApprovalId());
  293. //添加流程信息记录
  294. processInfo.setProcessState(4);
  295. if(approvalOrderService.insertProcessInfo(processInfo) < 1){
  296. return ResponseJson.getFAILURE();
  297. }
  298. //调用第三方revokeTask接口执行撤销
  299. approvalTaskService.revokeTask(approvalInfo.getActivitiId(),"业务员撤销审核");
  300. break;
  301. case 4:
  302. //添加评论内容到流程信息表,不用修改任何状态
  303. processInfo.setProcessState(0);
  304. if(approvalOrderService.insertProcessInfo(processInfo) < 1){
  305. return ResponseJson.getFAILURE();
  306. }
  307. break;
  308. }
  309. return rj;
  310. }
  311. /**
  312. * 查询审批订单详情
  313. * @param approvalInfo
  314. * @return
  315. * @throws Exception
  316. */
  317. @ResponseBody
  318. @RequestMapping(value = "/getApprovalInfo")
  319. public ResponseJson getApprovalInfo(HttpServletRequest request,
  320. ApprovalInfo approvalInfo) throws Exception {
  321. ResponseJson rj =new ResponseJson(200, "查询成功", 200);
  322. if(approvalInfo == null){
  323. return ResponseJson.getFAILURE();
  324. }
  325. List<ApprovalInfo> info = approvalOrderService.getApprovalInfo(approvalInfo);
  326. rj.addResponseKeyValue("approvalInfo",info);
  327. return rj;
  328. }
  329. /**
  330. * 添加入库信息
  331. * @param request
  332. * @param inventoryRecordss
  333. * @return
  334. */
  335. @ResponseBody
  336. @RequestMapping(value = "/addInventoryRecords")
  337. public ResponseJson addInventoryRecords(HttpServletRequest request, String inventoryRecordss){
  338. ResponseJson rj =new ResponseJson(200, "添加成功", 200);
  339. if (inventoryRecordss == null || inventoryRecordss.equals("")) {
  340. return ResponseJson.getFAILURE();
  341. }
  342. //获取openid,根据openid查询当前登录人信息
  343. String openId = WechatUtils.getUserBySession(request).getUserOpenid();
  344. Admin admin = sysService.getByOpenid(openId);
  345. if(admin == null){
  346. return new ResponseJson(200, "未查询到登录人信息", 500);
  347. }
  348. JSONArray jsonRecordss = JSONArray.fromObject(inventoryRecordss);
  349. for (int i = 0; i < jsonRecordss.size(); i++) {
  350. JSONObject jsonRecords = jsonRecordss.getJSONObject(i);
  351. //封装入库信息
  352. ApprovalInventoryRecords records = new ApprovalInventoryRecords();
  353. if(jsonRecords.get("shouldStorage") == null || jsonRecords.get("actualStorage") == null){
  354. if(jsonRecords.getInt("shouldStorage") < jsonRecords.getInt("actualStorage")){
  355. return new ResponseJson(200, "实际入库数量不得大于应入库数量", 500);
  356. }
  357. }
  358. records.setStorageState(jsonRecords.getInt("shouldStorage") > jsonRecords.getInt("actualStorage") ? 1 : 2);
  359. records.setApprovalId(jsonRecords.getInt("approvalId"));
  360. records.setProductName(jsonRecords.getString("productName"));
  361. records.setColorName(jsonRecords.getString("colorName"));
  362. records.setActualStorage(jsonRecords.getInt("actualStorage"));
  363. records.setShouldStorage(jsonRecords.getInt("shouldStorage"));
  364. records.setLackNumber(jsonRecords.getInt("lackNumber"));
  365. records.setOperatingAdminId(admin.getAdminId());
  366. if(approvalOrderService.insertInventoryRecords(records) < 1){
  367. return new ResponseJson(200, "添加入库记录失败", 500);
  368. }
  369. //修改订单项信息
  370. if(jsonRecords.get("itemId") == null || jsonRecords.get("itemId").equals("")){
  371. return new ResponseJson(200, "产品项id不能为空", 500);
  372. }
  373. ApprovalProductionItem productionItem = approvalOrderService.getProductionItem(jsonRecords.getInt("itemId"));
  374. if(productionItem.getItemActualStorage() < productionItem.getItemShouldStorage() + jsonRecords.getInt("shouldStorage")){
  375. return new ResponseJson(200, "产品项id不能为空", 500);
  376. }
  377. productionItem.setItemShouldStorage(productionItem.getItemShouldStorage() + jsonRecords.getInt("shouldStorage"));
  378. productionItem.setItemLackNumber(productionItem.getItemActualStorage() - (productionItem.getItemShouldStorage() + jsonRecords.getInt("shouldStorage")));
  379. if(approvalOrderService.updateProductionItem(productionItem) < 1){
  380. return new ResponseJson(200, "修改审批产品项失败", 500);
  381. }
  382. }
  383. return rj;
  384. }
  385. }