MesLineProcessController.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728
  1. package com.jeesite.modules.mes.web;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;
  6. import java.net.URLEncoder;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import java.util.Map;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. import com.alibaba.fastjson.JSON;
  13. import com.jeesite.common.collect.ListUtils;
  14. import com.jeesite.common.collect.MapUtils;
  15. import com.jeesite.common.lang.DateUtils;
  16. import com.jeesite.common.lang.ObjectUtils;
  17. import com.jeesite.common.lang.StringUtils;
  18. import com.jeesite.common.mybatis.mapper.query.QueryType;
  19. import com.jeesite.modules.mes.dao.MesLineDao;
  20. import com.jeesite.modules.mes.dao.MesLineProcessDao;
  21. import com.jeesite.modules.mes.dao.MesLineProcessUserDao;
  22. import com.jeesite.modules.mes.entity.*;
  23. import com.jeesite.modules.mes.resp.CommonResp;
  24. import com.jeesite.modules.mes.resp.ComListResp;
  25. import com.jeesite.modules.mes.service.*;
  26. import com.jeesite.modules.mes.util.CommonUitl;
  27. import com.jeesite.modules.mes.util.CopyUtil;
  28. import com.jeesite.modules.sys.entity.EmpUser;
  29. import com.jeesite.modules.sys.entity.User;
  30. import com.jeesite.modules.sys.service.UserService;
  31. import com.jeesite.modules.sys.utils.UserUtils;
  32. import io.swagger.models.auth.In;
  33. import org.apache.shiro.authz.annotation.RequiresPermissions;
  34. import org.springframework.beans.factory.annotation.Autowired;
  35. import org.springframework.stereotype.Controller;
  36. import org.springframework.ui.Model;
  37. import org.springframework.validation.annotation.Validated;
  38. import org.springframework.web.bind.annotation.*;
  39. import com.jeesite.common.config.Global;
  40. import com.jeesite.common.entity.Page;
  41. import com.jeesite.common.web.BaseController;
  42. import org.springframework.web.multipart.MultipartFile;
  43. /**
  44. * 生成工序表Controller
  45. * @author hzd
  46. * @version 2023-06-18
  47. */
  48. @Controller
  49. @RequestMapping(value = "${adminPath}/mes/mesLineProcess")
  50. public class MesLineProcessController extends BaseController {
  51. @Autowired
  52. private MesLineProcessService mesLineProcessService;
  53. @Autowired
  54. private MesLineService mesLineService;
  55. @Autowired
  56. private MesProductRecordService mesProductRecordService;
  57. @Autowired
  58. private MesProductHeliumService mesProductHeliumService;
  59. @Autowired
  60. private MesSkillService mesSkillService;
  61. @Autowired
  62. private MesUserSkillService mesUserSkillService;
  63. /**
  64. * JAR管理页面
  65. */
  66. @RequestMapping(value = "jarManagement")
  67. public String jarManagement(MesLineProcess mesLineProcess, Model model) {
  68. model.addAttribute("mesLineProcess", mesLineProcess);
  69. return "modules/mes/mesLineProcessJarManagement";
  70. }
  71. /**
  72. * 获取数据
  73. */
  74. @ModelAttribute
  75. public MesLineProcess get(String id, boolean isNewRecord) {
  76. return mesLineProcessService.get(id, isNewRecord);
  77. }
  78. /**
  79. * 查询列表
  80. */
  81. @RequiresPermissions("mes:mesLineProcess:view")
  82. @RequestMapping(value = {"list", ""})
  83. public String list(MesLineProcess mesLineProcess, Model model) {
  84. model.addAttribute("mesLineProcess", mesLineProcess);
  85. // 获取生产线数据
  86. List<MesLine> lineList = mesLineService.findList(new MesLine());
  87. model.addAttribute("lineList", lineList);
  88. return "modules/mes/mesLineProcessList";
  89. }
  90. /**
  91. * 查询列表数据
  92. */
  93. @RequiresPermissions("mes:mesLineProcess:view")
  94. @RequestMapping(value = "listData")
  95. @ResponseBody
  96. public Page<MesLineProcess> listData(MesLineProcess mesLineProcess, HttpServletRequest request, HttpServletResponse response) {
  97. // System.out.println(request.getParameterMap());
  98. mesLineProcess.getSqlMap().getWhere().and("a.pid",QueryType.IS_NULL,"");
  99. mesLineProcess.setPage(new Page<>(request, response));
  100. Page<MesLineProcess> page = mesLineProcessService.findPage(mesLineProcess);
  101. return page;
  102. }
  103. @RequiresPermissions("mes:mesLineProcess:view")
  104. @RequestMapping(value = {"sublist", ""})
  105. public String sublist(MesLineProcess mesLineProcess, Model model) {
  106. model.addAttribute("mesLineProcess", mesLineProcess);
  107. MesLineProcess mesLineProcess2 = new MesLineProcess();
  108. mesLineProcess2.setId(mesLineProcess.getPid());
  109. MesLineProcess mlInfo = mesLineProcessService.get(mesLineProcess2);
  110. model.addAttribute("mlInfo", mlInfo);
  111. // 获取生产线数据
  112. List<MesLine> lineList = mesLineService.findList(new MesLine());
  113. model.addAttribute("lineList", lineList);
  114. return "modules/mes/mesLineProcessSublist";
  115. }
  116. @RequiresPermissions("mes:mesLineProcess:view")
  117. @RequestMapping(value = "listData2")
  118. @ResponseBody
  119. public Page<MesLineProcess> listData2(MesLineProcess mesLineProcess, HttpServletRequest request, HttpServletResponse response) {
  120. mesLineProcess.setPage(new Page<>(request, response));
  121. Page<MesLineProcess> page = mesLineProcessService.findPage(mesLineProcess);
  122. return page;
  123. }
  124. /**
  125. * 查询子表数据
  126. */
  127. @RequiresPermissions("mes:mesLineProcess:view")
  128. @RequestMapping(value = "mesLineProcessUserListData")
  129. @ResponseBody
  130. public Page<MesLineProcessUser> subListData(MesLineProcessUser mesLineProcessUser, HttpServletRequest request, HttpServletResponse response) {
  131. mesLineProcessUser.setPage(new Page<>(request, response));
  132. Page<MesLineProcessUser> page = mesLineProcessService.findSubPage(mesLineProcessUser);
  133. return page;
  134. }
  135. /**
  136. * 查看编辑表单
  137. */
  138. @RequiresPermissions("mes:mesLineProcess:view")
  139. @RequestMapping(value = "form")
  140. public String form(MesLineProcess mesLineProcess, Model model) {
  141. model.addAttribute("mesLineProcess", mesLineProcess);
  142. // 获取生产线数据
  143. List<MesLine> lineList = mesLineService.findList(new MesLine());
  144. model.addAttribute("lineList", lineList);
  145. return "modules/mes/mesLineProcessForm";
  146. }
  147. @RequiresPermissions("mes:mesLineProcess:view")
  148. @RequestMapping(value = "subform")
  149. public String subform(MesLineProcess mesLineProcess, Model model) {
  150. MesLineProcess mesLineProcess2 = new MesLineProcess();
  151. mesLineProcess2.setId(mesLineProcess.getPid());
  152. MesLineProcess mlInfo = mesLineProcessService.get(mesLineProcess2);
  153. model.addAttribute("mlInfo", mlInfo);
  154. mesLineProcess.setLineId(mlInfo.getLineId());
  155. mesLineProcess.setTitle(mlInfo.getTitle());
  156. model.addAttribute("mesLineProcess", mesLineProcess);
  157. // 获取生产线数据
  158. List<MesLine> lineList = mesLineService.findList(new MesLine());
  159. model.addAttribute("lineList", lineList);
  160. return "modules/mes/mesLineProcessSubform";
  161. }
  162. /**
  163. * 保存数据
  164. */
  165. @RequiresPermissions("mes:mesLineProcess:edit")
  166. @PostMapping(value = "save")
  167. @ResponseBody
  168. public String save(@Validated MesLineProcess mesLineProcess) {
  169. mesLineProcessService.save(mesLineProcess);
  170. return renderResult(Global.TRUE, text("保存生成工序表成功!"));
  171. }
  172. /**
  173. * 停用数据
  174. */
  175. @RequiresPermissions("mes:mesLineProcess:edit")
  176. @RequestMapping(value = "disable")
  177. @ResponseBody
  178. public String disable(MesLineProcess mesLineProcess) {
  179. mesLineProcess.setStatus(MesLineProcess.STATUS_DISABLE);
  180. mesLineProcessService.updateStatus(mesLineProcess);
  181. return renderResult(Global.TRUE, text("停用生成工序表成功"));
  182. }
  183. /**
  184. * 启用数据
  185. */
  186. @RequiresPermissions("mes:mesLineProcess:edit")
  187. @RequestMapping(value = "enable")
  188. @ResponseBody
  189. public String enable(MesLineProcess mesLineProcess) {
  190. mesLineProcess.setStatus(MesLineProcess.STATUS_NORMAL);
  191. mesLineProcessService.updateStatus(mesLineProcess);
  192. return renderResult(Global.TRUE, text("启用生成工序表成功"));
  193. }
  194. /**
  195. * 删除数据
  196. */
  197. @RequiresPermissions("mes:mesLineProcess:edit")
  198. @RequestMapping(value = "delete")
  199. @ResponseBody
  200. public String delete(MesLineProcess mesLineProcess) {
  201. mesLineProcessService.delete(mesLineProcess);
  202. return renderResult(Global.TRUE, text("删除生成工序表成功!"));
  203. }
  204. /**
  205. * 获取树结构数据
  206. * @param excludeCode 排除的Code
  207. * @param isShowCode 是否显示编码(true or 1:显示在左侧;2:显示在右侧;false or null:不显示)
  208. * @return
  209. */
  210. @RequiresPermissions("mes:mesLineProcess:view")
  211. @RequestMapping(value = "treeData")
  212. @ResponseBody
  213. public List<Map<String, Object>> treeData(String excludeCode, String isShowCode) {
  214. List<Map<String, Object>> mapList = ListUtils.newArrayList();
  215. MesLine ml = new MesLine();
  216. ml.setStatus("0");
  217. List<MesLine> mlist = mesLineService.findList(ml);
  218. for (int i=0; i<mlist.size(); i++){
  219. MesLine e = mlist.get(i);
  220. Map<String, Object> map = MapUtils.newHashMap();
  221. map.put("id", e.getId());
  222. map.put("pId", "0");
  223. map.put("name", e.getTitle());
  224. mapList.add(map);
  225. MesLineProcess mlp = new MesLineProcess();
  226. mlp.setStatus("0");
  227. mlp.setLineId(e.getId());
  228. List<MesLineProcess> list = mesLineProcessService.findListOrder(mlp);
  229. for (int j=0; j<list.size(); j++){
  230. MesLineProcess p = list.get(j);
  231. Map<String, Object> map2 = MapUtils.newHashMap();
  232. map2.put("id", p.getId());
  233. map2.put("pId", e.getId());
  234. map2.put("name", p.getTitle());
  235. mapList.add(map2);
  236. }
  237. }
  238. return mapList;
  239. }
  240. @RequestMapping(value = "all")
  241. @ResponseBody
  242. public CommonResp all(MesLineProcess mesLineProcess) {
  243. mesLineProcess.setStatus("0");
  244. List<MesLineProcess> lists = mesLineProcessService.findList(mesLineProcess);
  245. // 列表复制
  246. List<ComListResp> result = CopyUtil.copyList(lists, ComListResp.class);
  247. CommonResp<List<ComListResp>> resp = new CommonResp<>();
  248. resp.setData(result);
  249. resp.setResult(Global.TRUE);
  250. return resp;
  251. }
  252. // @RequiresPermissions("mes:mesLineProcess:api")
  253. @RequestMapping(value = "processList")
  254. @ResponseBody
  255. public CommonResp processList(HttpServletRequest req) {
  256. CommonResp<Map<String, Object>> resp = new CommonResp<>();
  257. // User user = UserUtils.getUser();
  258. // MesLineProcessUser mesLineProcessUser = new MesLineProcessUser();
  259. // mesLineProcessUser.setUserCode(user.getUserCode());
  260. // List<MesLineProcessUser> list = mesLineProcessService.findSubListOrder(mesLineProcessUser);
  261. // List<String> ids = new ArrayList<>();
  262. // for (MesLineProcessUser item:list){
  263. // ids.add(item.getId());
  264. // }
  265. // Map<String, Object> map = MapUtils.newHashMap();
  266. // if(!ids.isEmpty()){
  267. // MesLineProcess mesLineProcess = new MesLineProcess();
  268. // mesLineProcess.getSqlMap().getWhere().and("id", QueryType.IN,ids);
  269. // List<MesLineProcess> list1 = mesLineProcessService.findList(mesLineProcess);
  270. // map.put("lists", list1);
  271. // }else {
  272. // List<MesLineProcess> list1 = new ArrayList<>();
  273. // map.put("lists", list1);
  274. // }
  275. Map<String, Object> map = MapUtils.newHashMap();
  276. MesLineProcess mesLineProcess = new MesLineProcess();
  277. mesLineProcess.setStatus("0");
  278. mesLineProcess.getSqlMap().getWhere().and("a.pid",QueryType.IS_NOT_NULL,"");
  279. List<MesLineProcess> lists = mesLineProcessService.findList(mesLineProcess);
  280. if(ListUtils.isEmpty(lists)){
  281. List<MesLineProcess> list1 = new ArrayList<>();
  282. map.put("lists", list1);
  283. }else{
  284. map.put("lists", lists);
  285. }
  286. resp.setData(map);
  287. resp.setResult(Global.TRUE);
  288. return resp;
  289. }
  290. @RequiresPermissions("mes:mesLineProcess:api")
  291. @PostMapping(value = "editDevices")
  292. @ResponseBody
  293. public String editDevices(@Validated MesLineProcess mesLineProcess, HttpServletRequest req) {
  294. String id = req.getParameter("id");
  295. if(id.isEmpty()){
  296. return renderResult(Global.FALSE, text("id不能为空"));
  297. }
  298. mesLineProcessService.save(mesLineProcess);
  299. return renderResult(Global.TRUE, text("修改成功!"));
  300. }
  301. /**
  302. * 获取工人权限
  303. */
  304. @RequestMapping(value = "userAuth")
  305. @ResponseBody
  306. public CommonResp userAuth(HttpServletRequest request) {
  307. CommonResp<Map<String, Object>> resp = new CommonResp<>();
  308. String oprno =request.getParameter("oprno");
  309. String lineSn =request.getParameter("lineSn");
  310. String OldOprno = "";
  311. if (oprno.length()>5){
  312. OldOprno = oprno.substring(0, oprno.length() - 1);
  313. }else {
  314. OldOprno = oprno;
  315. }
  316. String type =request.getParameter("type");
  317. Map<String, Object> map = MapUtils.newHashMap();
  318. if(StringUtils.isEmpty(oprno) || StringUtils.isEmpty(lineSn)){
  319. resp.setMessage("参数为空");
  320. resp.setResult(Global.FALSE);
  321. return resp;
  322. }
  323. User user = UserUtils.getUser();
  324. if(user.getUserCode().equals("system")){ // 超级管理员
  325. map.put("auth",2);
  326. resp.setData(map);
  327. resp.setResult(Global.TRUE);
  328. return resp;
  329. }
  330. MesLineProcessUser mesLineProcessUser = new MesLineProcessUser();
  331. mesLineProcessUser.setUserCode(user.getUserCode());
  332. if(type.equals("1")){ // 质量
  333. String[] ids = new String[]{"1","2"};
  334. mesLineProcessUser.getSqlMap().getWhere().and("auth",QueryType.IN,ids);
  335. }else{ // 生产
  336. String[] ids = new String[]{"0","2"};
  337. mesLineProcessUser.getSqlMap().getWhere().and("auth",QueryType.IN,ids);
  338. }
  339. List<MesLineProcessUser> list = mesLineProcessService.findSubListOrder(mesLineProcessUser);
  340. logger.info("list:"+ JSON.toJSONString(list));
  341. if(ListUtils.isEmpty(list)){
  342. map.put("auth",0);
  343. resp.setData(map);
  344. resp.setResult(Global.TRUE);
  345. return resp;
  346. }
  347. //工人技能检验
  348. if (!mesSkillService.checkUserSkill(lineSn, oprno, user.getUserCode())) {
  349. map.put("auth",0);
  350. resp.setData(map);
  351. resp.setResult(Global.TRUE);
  352. return resp;
  353. }
  354. List<String> mlps = new ArrayList<>();
  355. for(MesLineProcessUser mesLineProcessUser1:list){
  356. mlps.add(mesLineProcessUser1.getLineProcessId());
  357. }
  358. logger.info("mlps:"+ JSON.toJSONString(mlps));
  359. Integer auth = 0;
  360. MesLineProcess mesLineProcess = new MesLineProcess();
  361. mesLineProcess.getSqlMap().getWhere().and("id", QueryType.IN,mlps);
  362. mesLineProcess.setOprno(OldOprno);
  363. mesLineProcess.setLineSn(lineSn);
  364. MesLineProcess mesLineProcess1 = mesLineProcessService.findInfo(mesLineProcess);
  365. logger.info("mesLineProcess1:"+ JSON.toJSONString(mesLineProcess1));
  366. if(!ObjectUtils.isEmpty(mesLineProcess1)){
  367. auth = 1;
  368. }
  369. map.put("auth",auth);
  370. resp.setData(map);
  371. resp.setResult(Global.TRUE);
  372. return resp;
  373. }
  374. @RequiresPermissions("mes:mesLineProcess:jph")
  375. @RequestMapping(value = "jph")
  376. public String jph(MesLineProcess mesLineProcess, Model model) {
  377. model.addAttribute("mesLineProcess", mesLineProcess);
  378. // 获取生产线数据
  379. List<MesLine> lineList = mesLineService.findList(new MesLine());
  380. model.addAttribute("lineList", lineList);
  381. return "modules/mes/mesLineProcessJph";
  382. }
  383. @RequestMapping(value = "jphData")
  384. @ResponseBody
  385. public CommonResp jphData(HttpServletRequest request) {
  386. CommonResp<Map<String, Object>> resp = new CommonResp<>();
  387. String oprno =request.getParameter("oprno");
  388. String lineSn =request.getParameter("lineSn");
  389. String[] xdata = new String[24];
  390. String[] ydata = new String[24];
  391. String today = CommonUitl.getToday();
  392. for (int i=0; i<24;i++){
  393. xdata[i] = (i+1)+"点";
  394. String sdate = today +" "+ (i>9?i+":00:00":"0"+i+":00:00");
  395. int j = i + 1;
  396. String edate = today +" "+ (j>9?j+":00:00":"0"+j+":00:00");
  397. String jph = "";
  398. if(lineSn.equals("LB") && oprno.equals("OP220")){
  399. jph = mesProductHeliumService.getJpDate(oprno,lineSn,sdate,edate);
  400. }else{
  401. jph = mesProductRecordService.getJpDate(oprno,lineSn,sdate,edate);
  402. }
  403. ydata[i] = jph;
  404. }
  405. Map<String, Object> map = MapUtils.newHashMap();
  406. map.put("xdata",xdata);
  407. map.put("ydata",ydata);
  408. resp.setData(map);
  409. resp.setResult(Global.TRUE);
  410. return resp;
  411. }
  412. @Autowired
  413. private UserService userService;
  414. @Autowired
  415. private MesLineProcessUserDao mesLineProcessUserDao;
  416. @RequestMapping({"formAuth"})
  417. public String form(EmpUser empUser, String op, Model model) {
  418. User user = userService.get(empUser.getUserCode());
  419. MesLineProcessUser mesLineProcessUser = new MesLineProcessUser();
  420. User user1 = new User();
  421. user1.setUserCode(user.getUserCode());
  422. mesLineProcessUser.setUserCode(user.getUserCode());
  423. List<MesLineProcessUser> list = this.mesLineProcessUserDao.findList(mesLineProcessUser);
  424. List<String> lineProcessIds = new ArrayList<>();
  425. if (list.size() > 0){
  426. for (MesLineProcessUser lineProcessUser : list) {
  427. lineProcessIds.add(lineProcessUser.getLineProcessId());
  428. }
  429. }
  430. model.addAttribute("oprnoList", lineProcessIds);
  431. model.addAttribute("empUser", user);
  432. // model.addAttribute("ctrlPermi", Global.getConfig("user.adminCtrlPermi", "2"));
  433. return "modules/mes/mesUserAuthProcess";
  434. }
  435. @PostMapping(value = "save2")
  436. @ResponseBody
  437. public String save2(MesLineProcess mesLineProcess) {
  438. //1.根据userCode删除对应的mesLineProcessUser
  439. MesLineProcessUser mesLineProcessUser = new MesLineProcessUser();
  440. User user = new User();
  441. user.setUserCode(mesLineProcess.getUserCode());
  442. mesLineProcessUser.setUserCode(mesLineProcess.getUserCode());
  443. mesLineProcessUserDao.deleteByEntity(mesLineProcessUser);
  444. //2.添加
  445. if (StringUtils.isNotEmpty(mesLineProcess.getUserProcessString())){
  446. for (String s : mesLineProcess.getUserProcessString().split(",")) {
  447. MesLineProcessUser mesLineProcessUser1 = new MesLineProcessUser();
  448. MesLineProcess mesLineProcess1 = new MesLineProcess();
  449. mesLineProcess1.setId(s);
  450. mesLineProcessUser1.setUserCode(mesLineProcess.getUserCode());
  451. mesLineProcessUser1.setLineProcessId(mesLineProcess1.getId());
  452. mesLineProcessUserDao.insert(mesLineProcessUser1);
  453. }
  454. }
  455. return renderResult(Global.TRUE, text("保存成功!"));
  456. }
  457. // 获取所有子工位
  458. @RequestMapping(value = "getAllSonOpron")
  459. @ResponseBody
  460. public CommonResp getAllSonOpron() {
  461. CommonResp<List<MesLineProcess>> resp = new CommonResp<>();
  462. resp.setData(mesLineProcessService.getAllSonOpron());
  463. resp.setResult(Global.TRUE);
  464. return resp;
  465. }
  466. // 获取父级工位
  467. @RequestMapping(value = "getParents")
  468. @ResponseBody
  469. public CommonResp getParents(HttpServletRequest request) {
  470. CommonResp<Map<String, Object>> resp = new CommonResp<>();
  471. Map<String, Object> map = MapUtils.newHashMap();
  472. MesLineProcess mesLineProcess = new MesLineProcess();
  473. mesLineProcess.setStatus("0");
  474. mesLineProcess.setLineSn("XT");
  475. // String sn = request.getParameter("sn");
  476. // String gdStr1 = "0050011000300H718333"; // 箱体
  477. // if(!StringUtils.isEmpty(sn) && !sn.contains(gdStr1)){
  478. // mesLineProcess.setLineSn("LB");
  479. // }
  480. mesLineProcess.getSqlMap().getWhere().and("a.pid",QueryType.IS_NULL,"");
  481. List<MesLineProcess> lists = mesLineProcessService.findList(mesLineProcess);
  482. if(ListUtils.isEmpty(lists)){
  483. List<MesLineProcess> list1 = new ArrayList<>();
  484. map.put("lists", list1);
  485. }else{
  486. map.put("lists", lists);
  487. }
  488. resp.setData(map);
  489. resp.setResult(Global.TRUE);
  490. return resp;
  491. }
  492. @Autowired
  493. MesLineProcessDao mesLineProcessDao;
  494. @Autowired
  495. MesLineDao mesLineDao;
  496. //上传jar包
  497. @PostMapping(value = "uploadjar")
  498. @ResponseBody
  499. public CommonResp upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
  500. CommonResp resp = new CommonResp();
  501. try {
  502. if (file.isEmpty()) {
  503. resp.setResult(Global.FALSE);
  504. resp.setMessage("上传文件不能为空");
  505. return resp;
  506. }
  507. String fileName = file.getOriginalFilename();
  508. // if (fileName == null || !fileName.endsWith(".jar")) {
  509. // resp.setResult(Global.FALSE);
  510. // resp.setMessage("只能上传jar文件");
  511. // return resp;
  512. // }
  513. String id = request.getParameter("id");//工位主键ID
  514. // 1. 获取旧的jar包路径,以便后续清理
  515. MesLineProcess oldProcess = mesLineProcessService.get(id);
  516. String oldJarPath = (oldProcess != null) ? oldProcess.getJarPath() : null;
  517. // 2. 准备保存路径 (D:/mescloud/userfiles/jar/yyyyMMdd/)
  518. String baseDir = Global.getConfig("file.baseDir", "D:/mescloud");
  519. String relativePath = "userfiles/jar/" + DateUtils.getDate("yyyyMMdd") + "/";
  520. String realPath = baseDir + (baseDir.endsWith("/") ? "" : "/") + relativePath;
  521. File dir = new File(realPath);
  522. if (!dir.exists()) {
  523. dir.mkdirs();
  524. }
  525. // 3. 生成新文件名并保存到本地
  526. String saveFileName = System.currentTimeMillis() + "_" + fileName;
  527. String pathname = realPath + saveFileName;
  528. logger.info("上传文件保存路径:" + pathname);
  529. File dest = new File(pathname);
  530. file.transferTo(dest);
  531. // 4. 更新数据库记录,确保主键唯一对应
  532. mesLineProcessDao.updateJarPathById(id, pathname);
  533. // 5. 上传成功后,清理旧的物理文件
  534. if (StringUtils.isNotBlank(oldJarPath)) {
  535. File oldFile = new File(oldJarPath);
  536. if (oldFile.exists()) {
  537. if (oldFile.delete()) {
  538. logger.info("旧JAR包物理文件删除成功: " + oldJarPath);
  539. }
  540. }
  541. }
  542. resp.setData("/" + relativePath + saveFileName);
  543. resp.setResult(Global.TRUE);
  544. resp.setMessage("上传成功");
  545. return resp;
  546. } catch (Exception e) {
  547. logger.error("上传jar包失败", e);
  548. resp.setResult(Global.FALSE);
  549. resp.setMessage("上传失败: " + e.getMessage());
  550. return resp;
  551. }
  552. }
  553. /**
  554. * 下载jar包
  555. */
  556. @PostMapping(value = "downloadJar")
  557. public void downloadJar(HttpServletRequest request, HttpServletResponse response) {
  558. try {
  559. String sn = request.getParameter("sn"); // 生产线编号
  560. String oprno = request.getParameter("oprno"); // 生产工位号
  561. if (StringUtils.isBlank(sn) || StringUtils.isBlank(oprno)) {
  562. return;
  563. }
  564. // 根据产线编号查询产线id
  565. MesLine mesLine = mesLineDao.selectIdBysn(sn);
  566. if (mesLine == null) {
  567. return;
  568. }
  569. // 从数据库获取jar包路径
  570. String jarPath = mesLineProcessDao.getJarPath(mesLine.getId(), oprno);
  571. if (StringUtils.isBlank(jarPath)) {
  572. return;
  573. }
  574. File file = new File(jarPath);
  575. if (!file.exists()) {
  576. return;
  577. }
  578. // 设置响应头
  579. String fileName = file.getName();
  580. // 去掉时间戳前缀 (如 1715760000000_test.jar -> test.jar)
  581. if (fileName.contains("_")) {
  582. fileName = fileName.substring(fileName.indexOf("_") + 1);
  583. }
  584. response.reset();
  585. response.setContentType("application/octet-stream");
  586. response.setCharacterEncoding("utf-8");
  587. response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
  588. // 读取文件并写入响应流
  589. try (InputStream is = new FileInputStream(file);
  590. OutputStream os = response.getOutputStream()) {
  591. byte[] buffer = new byte[1024];
  592. int len;
  593. while ((len = is.read(buffer)) != -1) {
  594. os.write(buffer, 0, len);
  595. }
  596. os.flush();
  597. }
  598. } catch (Exception e) {
  599. logger.error("下载jar包失败", e);
  600. }
  601. }
  602. /**
  603. * 删除jar包
  604. */
  605. @PostMapping(value = "deleteJar")
  606. @ResponseBody
  607. public CommonResp deleteJar(HttpServletRequest request) {
  608. CommonResp resp = new CommonResp();
  609. try {
  610. String id = request.getParameter("id"); // 工位主键ID
  611. if (StringUtils.isBlank(id)) {
  612. resp.setResult(Global.FALSE);
  613. resp.setMessage("ID不能为空");
  614. return resp;
  615. }
  616. // 1. 获取当前工位信息
  617. MesLineProcess mesLineProcess = mesLineProcessService.get(id);
  618. if (mesLineProcess == null) {
  619. resp.setResult(Global.FALSE);
  620. resp.setMessage("工位不存在");
  621. return resp;
  622. }
  623. String jarPath = mesLineProcess.getJarPath();
  624. // 2. 尝试删除物理文件
  625. if (StringUtils.isNotBlank(jarPath)) {
  626. File file = new File(jarPath);
  627. if (file.exists()) {
  628. file.delete();
  629. }
  630. }
  631. // 3. 清除数据库记录
  632. mesLineProcessDao.updateJarPathById(id, null);
  633. resp.setResult(Global.TRUE);
  634. resp.setMessage("删除成功");
  635. return resp;
  636. } catch (Exception e) {
  637. logger.error("删除jar包失败", e);
  638. resp.setResult(Global.FALSE);
  639. resp.setMessage("删除失败: " + e.getMessage());
  640. return resp;
  641. }
  642. }
  643. }