From 9df76ad0facea08d36e8a6402d1293199041df23 Mon Sep 17 00:00:00 2001 From: erdanergou Date: Thu, 2 Feb 2023 16:08:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=85=AC=E5=91=8A=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../depository_manage/config/PortConfig.java | 2 +- .../depository_manage/config/QyWxConfig.java | 19 + .../controller/CompanyController.java | 9 +- .../controller/MaterialController.java | 4 +- .../controller/NoticeController.java | 67 +++- .../controller/PageController.java | 47 ++- .../depository_manage/entity/Notice.java | 5 + .../mapper/NoticeMapper.java | 16 + .../depository_manage/mapper/NoticeMapper.xml | 23 +- .../depository_manage/pojo/NoticeP.java | 11 + .../service/CompanyService.java | 2 +- .../service/NoticeService.java | 44 ++- .../service/impl/CompanyServiceImpl.java | 169 +++++++- .../service/impl/NoticeServiceImpl.java | 115 +++++- .../pages/depository/table-stock.html | 9 + .../pages/material/material-add.html | 2 +- .../pages/material/material-out.html | 17 +- .../templates/pages/notice/notice-add.html | 45 ++- .../templates/pages/notice/notice-edit.html | 138 +++++-- .../templates/pages/notice/notice-out.html | 362 +++++------------- .../pages/notice/notice-out_user.html | 314 +++++++++++++++ .../pages/notice/selectDepartment.html | 31 +- .../templates/pages/other/welcome.html | 44 ++- .../templates/pages/other/welcome_mobile.html | 246 ++++++++++-- .../templates/pages/post/selectManager.html | 4 +- .../TestQyWxAdministration.java | 178 +++++++-- 26 files changed, 1478 insertions(+), 445 deletions(-) create mode 100644 src/main/resources/templates/pages/notice/notice-out_user.html diff --git a/src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java b/src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java index 72abaa56..4aed38fc 100644 --- a/src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java +++ b/src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java @@ -128,7 +128,7 @@ public class PortConfig { /** * 通过工号获取用户 - * @param number + * @param number 工号 * @return */ public static UserByPort findUserByPortByNumber(String number){ diff --git a/src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java b/src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java index 9de42ff6..c7c954aa 100644 --- a/src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java +++ b/src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java @@ -249,6 +249,25 @@ public class QyWxConfig { } + public static List getQyWxDepartmentIdList(String UserAgent,Integer id){ + String tempToken = GetQYWXToken(UserAgent); + String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/department/simplelist?access_token=%s&id=%s", tempToken, id); + String get = HttpUtils.doGet(url); + JSONObject jsonObject = JSONObject.parseObject(get); + Integer errcode = jsonObject.getInteger("errcode"); + List resultList = new ArrayList<>(); + if (Integer.compare(errcode, 0) == 0) { + JSONArray department = jsonObject.getJSONArray("department_id"); + for (int i = 0; i < department.size(); i++) { + JSONObject value = department.getJSONObject(i); + Integer vid = value.getInteger("id"); + resultList.add(vid); + } + } + return resultList; + } + + @Autowired public void setRedisTemplate(RedisTemplate redisTemplate) { QyWxConfig.redisTemplate = redisTemplate; diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java b/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java index c1298513..082cd35b 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java @@ -9,10 +9,7 @@ import com.dreamchaser.depository_manage.pojo.*; import com.dreamchaser.depository_manage.service.CompanyService; import com.dreamchaser.depository_manage.service.DepositoryService; import com.dreamchaser.depository_manage.service.RoleService; -import com.dreamchaser.depository_manage.utils.CrudUtil; -import com.dreamchaser.depository_manage.utils.HttpUtils; -import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil; -import com.dreamchaser.depository_manage.utils.ObjectFormatUtil; +import com.dreamchaser.depository_manage.utils.*; import org.apache.http.protocol.HTTP; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -360,7 +357,9 @@ public class CompanyController { public RestResponse departmentTreeMenus(HttpServletRequest request) { List list = new ArrayList<>(); UserByPort userToken = (UserByPort) request.getAttribute("userToken"); - list = companyService.InitTreeMenus(userToken); + String header = request.getHeader("user-agent"); + String crypt = Md5.crypt(header); + list = companyService.BuildQyWxAdministrationTreeMenus(userToken,crypt); return new RestResponse(list); } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java b/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java index 40ba5aad..e103a5de 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java @@ -100,8 +100,8 @@ public class MaterialController { list.addAll(inventory); total += materialService.findInventoryCount(map); } - for (int i = 0; i < list.size(); i++) { - list.get(i).setQuantity(1); + for (InventoryP inventoryP : list) { + inventoryP.setQuantity(1); } return new RestResponse(list, total, 200); } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/NoticeController.java b/src/main/java/com/dreamchaser/depository_manage/controller/NoticeController.java index 6cfeddbe..97ee3eee 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/NoticeController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/NoticeController.java @@ -5,6 +5,7 @@ import com.dreamchaser.depository_manage.config.PortConfig; import com.dreamchaser.depository_manage.config.QyWxConfig; import com.dreamchaser.depository_manage.entity.UserByPort; import com.dreamchaser.depository_manage.entity.qywxDepartment; +import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.pojo.NoticeP; import com.dreamchaser.depository_manage.pojo.RestResponse; import com.dreamchaser.depository_manage.service.NoticeService; @@ -35,13 +36,13 @@ public class NoticeController { QyWxOperationService qyWxOperationService; @PostMapping("/notice") - public RestResponse addNotice(@RequestBody Map map, HttpServletRequest request){ + public RestResponse addNotice(@RequestBody Map map, HttpServletRequest request) { UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); - map.put("userId",userByPort.getId()); - map.put("state",1); + map.put("userId", userByPort.getId()); + map.put("state", 1); // 获取插入结果 Integer integer = noticeService.addNotice(map); - if(Integer.compare(integer,1) == 0){ + if (Integer.compare(integer, 1) == 0) { // 如果成功插入 String header = request.getHeader("user-agent"); @@ -56,31 +57,65 @@ public class NoticeController { }).start();*/ } - return CrudUtil.postHandle(integer,1); + return CrudUtil.postHandle(integer, 1); } + @GetMapping("/findAllNotices") - public RestResponse findNotices(@RequestParam Map map,HttpServletRequest request){ + public RestResponse findNotices(@RequestParam Map map, HttpServletRequest request) { UserByPort userToken = (UserByPort) request.getAttribute("userToken"); String header = request.getHeader("user-agent"); String crypt = Md5.crypt(header); - - // 获取当前用户部门对应在企业微信下的部门 - JSONObject userPortByQyWx = PortConfig.getUserPortByQyWx(userToken.getMaindeparment()); - String portName = userPortByQyWx.getString("name"); - Integer portByQyWxInteger = userPortByQyWx.getInteger("wechatorganizationid"); - - qywxDepartment qyWxDepartment = QyWxConfig.getQyWxDepartment(crypt, userToken.getMaindeparment()); - List noticeByCondition = noticeService.findNoticeByCondition(map); + map.put("userAgent", crypt); + List noticeByCondition = noticeService.findNoticeByCondition(map, userToken); return new RestResponse(noticeByCondition); } @PostMapping("/notice_del") - public RestResponse DelNotice(@RequestBody Map map,HttpServletRequest request){ - return null; + public RestResponse DelNotice(@RequestBody Map map, HttpServletRequest request) { + if(map.containsKey("id")){ + Integer id = ObjectFormatUtil.toInteger(map.get("id")); + Integer integer = noticeService.delNoticeForSoftById(id); + return CrudUtil.deleteHandle(integer,1); + }else if(map.containsKey("ids")){ + List ids = (List) map.get("ids"); + Integer integer = noticeService.delNoticeForSoftByIds(ids); + return CrudUtil.deleteHandle(integer,ids.size()); + }else{ + throw new MyException("缺少必要参数"); + } } + // 用于修改公告信息 + @PostMapping("/noticeEdit") + public RestResponse noticeEdit(@RequestBody Map map, HttpServletRequest request) { + if (map.containsKey("id")) { + Integer integer = noticeService.updateNotice(map); + return CrudUtil.putHandle(integer,1); + } else { + throw new MyException("缺少必要参数"); + } + } + @PostMapping("/realDeleteNotice") + public RestResponse realDeleteNotice(@RequestBody Map map){ + if(map.containsKey("id")){ + Integer id = ObjectFormatUtil.toInteger(map.get("id")); + Integer integer = noticeService.delNoticeById(id); + return CrudUtil.deleteHandle(integer,1); + }else{ + throw new MyException("缺少必要参数"); + } + } + @PostMapping("/EditNoticeState") + public RestResponse EditNoticeState(@RequestBody Map map){ + if(map.containsKey("id")){ + Integer integer = noticeService.updateNoticeState(map); + return CrudUtil.putHandle(integer,1); + }else{ + throw new MyException("缺少必要参数"); + } + } } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java index 68bf3438..22e7032b 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java @@ -325,7 +325,8 @@ public class PageController { Integer applicationIn = depositoryRecordService.findApplicationInRecordPCountByCondition(param); warehouseRecord = applicationIn + applicationOut; mv.addObject("warehouseRecord", warehouseRecord); - mv.addObject("notices", noticeService.findNoticeByCondition(map)); + map.put("userAgent", Md5.crypt(header)); + mv.addObject("notices", noticeService.findNoticeByCondition(map, userToken)); Map paramForTask = new HashMap<>(); @@ -806,7 +807,9 @@ public class PageController { } @GetMapping("/notice_out") - public String notice_out() {return "pages/notice/notice-out";} + public String notice_out() { + return "pages/notice/notice-out"; + } @GetMapping("/chart_in") public ModelAndView chart_in() { @@ -2388,23 +2391,57 @@ public class PageController { /** * 用于查看当前公告信息 + * * @param id 待查看公告id * @return */ @GetMapping("/noticeView") - public ModelAndView noticeView(Integer id){ + public ModelAndView noticeView(Integer id, HttpServletRequest request) { ModelAndView mv = new ModelAndView(); mv.setViewName("pages/notice/notice-view"); + NoticeP noticeById = noticeService.findNoticeById(id); - mv.addObject("record",noticeById); + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); + if (Integer.compare(noticeById.getUserId(), userToken.getId()) == 0) { + String header = request.getHeader("user-agent"); + String crypt = Md5.crypt(header); + StringBuilder sb = new StringBuilder(); + mv.setViewName("pages/notice/notice-edit"); + String[] split = noticeById.getViewRangeId().split(","); + for (String s:split + ) { + if(!"".equals(s)){ + // 获取对应的部门名称 + qywxDepartment qyWxDepartment = QyWxConfig.getQyWxDepartment(crypt, ObjectFormatUtil.toInteger(s)); + sb.append(qyWxDepartment.getName()).append(","); + } + } + noticeById.setViewRangeName(sb.toString()); + } + mv.addObject("record", noticeById); return mv; } @GetMapping("/selectDepartment") - public String selectDepartment(){ + public String selectDepartment() { return "pages/notice/selectDepartment"; } + @GetMapping("/noticeAll") + public ModelAndView noticeAll(HttpServletRequest request){ + ModelAndView mv = new ModelAndView(); + mv.setViewName("pages/notice/notice-out_user"); + UserByPort userToken = (UserByPort) request.getAttribute("userToken"); + mv.addObject("userId",userToken.getId()); + Integer role = userToken.getIsadmin(); + if (role == null) { + role = 1; + } + if (role == 4) { + mv.setViewName("pages/notice/notice-out"); + } + return mv; + } } diff --git a/src/main/java/com/dreamchaser/depository_manage/entity/Notice.java b/src/main/java/com/dreamchaser/depository_manage/entity/Notice.java index 92727c6d..f9764a2e 100644 --- a/src/main/java/com/dreamchaser/depository_manage/entity/Notice.java +++ b/src/main/java/com/dreamchaser/depository_manage/entity/Notice.java @@ -38,5 +38,10 @@ public class Notice implements java.io.Serializable { */ private Integer state; + /** + * 可以范围id + */ + private String viewRangeId; + } \ No newline at end of file diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.java b/src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.java index c083e639..a87d2286 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.java +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.java @@ -29,6 +29,14 @@ public interface NoticeMapper { */ Integer updateNotice(Notice notice); + + /** + * 修改公告信息 + * @param map 待修改数据 + * @return + */ + Integer updateNotice(Map map); + /** * 批量修改公告信息 * @param notices @@ -52,6 +60,14 @@ public interface NoticeMapper { Integer deleteNoticeById(Integer id); + /** + * 根据主键id批量获取公告信息 + * @param list 带获取id列表 + * @return + */ + List findNoticeByIds(List list); + + /** * 根据主键批量删除公告 * @param list 待删除公告id列表 diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.xml index d4f0a62b..d04c4687 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.xml @@ -9,6 +9,7 @@ + @@ -16,7 +17,7 @@ - n.id, n.title, n.content, n.time,n.state,n.userId + n.id, n.title, n.content, n.time,n.state,n.userId,n.viewRangeId @@ -74,13 +75,14 @@ INSERT INTO notice ( - title, content, time,userId,state + title, content, time,userId,state,viewRangeId ) VALUES ( #{title}, #{content}, #{time}, #{userId}, - #{state} + #{state}, + #{viewRangeId} ) @@ -89,7 +91,7 @@ INSERT INTO notice ( - id, title, content, time,userId,state + id, title, content, time,userId,state,viewRangeId ) VALUES ( @@ -99,6 +101,7 @@ #{item.time}, #{item.userId}, #{item.state}, + #{item.viewRangeId} ) @@ -118,7 +121,10 @@ time = #{time}, - state = #{state} + state = #{state}, + + + viewRangeId = #{viewRangeId} where id = #{id} @@ -136,10 +142,13 @@ content = #{item.content}, - time = #{item.time} + time = #{item.time}, - state = #{item.state} + state = #{item.state}, + + + viewRangeId = #{item.viewRangeId} WHERE id = #{item.id} diff --git a/src/main/java/com/dreamchaser/depository_manage/pojo/NoticeP.java b/src/main/java/com/dreamchaser/depository_manage/pojo/NoticeP.java index 4a4aaa49..b292c83d 100644 --- a/src/main/java/com/dreamchaser/depository_manage/pojo/NoticeP.java +++ b/src/main/java/com/dreamchaser/depository_manage/pojo/NoticeP.java @@ -33,6 +33,16 @@ public class NoticeP { */ private String userName; + /** + * 可见范围部门id + */ + private String viewRangeId; + + /** + * 可见范围部门名称 + */ + private String viewRangeName; + public NoticeP(Notice notice) { this.id = notice.getId(); @@ -41,5 +51,6 @@ public class NoticeP { this.content = notice.getContent(); this.userId = notice.getUserId(); this.state = notice.getState(); + this.viewRangeId = notice.getViewRangeId(); } } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/CompanyService.java b/src/main/java/com/dreamchaser/depository_manage/service/CompanyService.java index d0559d2b..106c7ab3 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/CompanyService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/CompanyService.java @@ -99,5 +99,5 @@ public interface CompanyService { /** * 用于构造企业微信行政组织结构 */ - List BuildQyWxAdministrationTreeMenus(UserByPort userByPort); + List BuildQyWxAdministrationTreeMenus(UserByPort userByPort,String UserAgent); } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/NoticeService.java b/src/main/java/com/dreamchaser/depository_manage/service/NoticeService.java index 96692b80..10f4310f 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/NoticeService.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/NoticeService.java @@ -1,6 +1,7 @@ package com.dreamchaser.depository_manage.service; import com.dreamchaser.depository_manage.entity.Notice; +import com.dreamchaser.depository_manage.entity.UserByPort; import com.dreamchaser.depository_manage.pojo.NoticeP; import java.util.List; @@ -22,7 +23,7 @@ public interface NoticeService { * @param map 参数map * @return 符合条件的公告列表 */ - List findNoticeByCondition(Map map); + List findNoticeByCondition(Map map, UserByPort userByPort); /** * 根据主键id获取公告信息 @@ -32,4 +33,45 @@ public interface NoticeService { NoticeP findNoticeById(Integer id); + /** + * 用于修改公告信息 + * @param map 参数map + * @return + */ + Integer updateNotice(Map map); + + /** + * 用于根据主键删除公告信息(软删除) + * @param id 待删除主键 + * @return + */ + Integer delNoticeForSoftById(Integer id); + + /** + * 用于根据主键批量删除公告信息(软删除) + * @param ids 待删除主键列表 + * @return + */ + Integer delNoticeForSoftByIds(List ids); + + /** + * 用于根据主键删除公告信息 + * @param id 待删除主键 + * @return + */ + Integer delNoticeById(Integer id); + + /** + * 用于根据主键批量删除公告信息 + * @param ids 待删除主键id列表 + * @return + */ + Integer delNoticeByIds(List ids); + + /** + * 用于修改公告状态 + * @param map 待修改条件 + * @return + */ + Integer updateNoticeState(Map map); } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java index 1e94dad6..c26ef75a 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.dreamchaser.depository_manage.config.PortConfig; +import com.dreamchaser.depository_manage.config.QyWxConfig; import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.mapper.CompanyMapper; import com.dreamchaser.depository_manage.pojo.AdministrationP; @@ -12,16 +13,14 @@ import com.dreamchaser.depository_manage.pojo.RoleAndDepository; import com.dreamchaser.depository_manage.service.CompanyService; import com.dreamchaser.depository_manage.utils.HttpUtils; import com.dreamchaser.depository_manage.utils.ObjectFormatUtil; +import com.sun.org.apache.xml.internal.security.Init; import org.apache.http.protocol.HTTP; import org.apache.xmlbeans.impl.xb.xsdschema.Public; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.*; @Service @@ -191,11 +190,169 @@ public class CompanyServiceImpl implements CompanyService { * 用于构造企业微信行政组织结构 */ @Override - public List BuildQyWxAdministrationTreeMenus(UserByPort userByPort) { + public List BuildQyWxAdministrationTreeMenus(UserByPort userByPort,String UserAgent) { + // 获取所有企业微信的部门列表 + List qyWxDepartmentListAll = QyWxConfig.getQyWxDepartmentList(UserAgent, 51); - return null; + // 设置用于开启线程的部门列表 + List qyWxDepartmentList = new ArrayList<>(); + + + // 定义分页数量 + double size = 20.0; + + // 定义线程数 + int threadSize = (int) Math.ceil(qyWxDepartmentListAll.size() / size); + + // 开启对应数量的线程 + ExecutorService exs = Executors.newFixedThreadPool(threadSize); + + // 1.定义CompletionService + CompletionService completionService = new ExecutorCompletionService(exs); + + // 线程结果集 + List> futureList = new ArrayList>(); + + + for (int i = 0; i < qyWxDepartmentListAll.size(); i++) { + // 获取当前类型 + qywxDepartment qywxDepartment = qyWxDepartmentListAll.get(i); + if (((i + 1) % 20) == 0) { // 如果有100个开启线程进行处理 + qyWxDepartmentList.add(qywxDepartment); + InitDepartmentTree taskTest = new InitDepartmentTree(qyWxDepartmentList, qyWxDepartmentListAll); + Future future = completionService.submit(taskTest); + futureList.add(future); // 添加到结果集 + qyWxDepartmentList = new ArrayList<>(); // 情况列表 + } else { + // 添加id到列表中 + if (Integer.compare(qywxDepartment.getParentid(), 3) == 0) { + qyWxDepartmentList.add(qywxDepartment); + } + } + } + + if (qyWxDepartmentList.size() > 0) { + // 如果有剩余,开启线程进行处理 + InitDepartmentTree taskTest = new InitDepartmentTree(qyWxDepartmentList, qyWxDepartmentListAll); + Future future = completionService.submit(taskTest); + futureList.add(future); + } + + // 树结构结果集 + List list = new ArrayList<>(); + + for (int i = 0; i < threadSize; i++) { + Object result = null; + try { + result = completionService.take().get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + list.addAll((Collection) result); + } + return list; + } + /** + * 用于构造树形模板 + * + * @param qywxDepartment + * @param children + * @return + */ + public Map InitTreeForQyWxDepartment(qywxDepartment qywxDepartment, List children) { + if (qywxDepartment != null) { + Map map = new HashMap<>(); + map.put("title", qywxDepartment.getName()); + map.put("id", qywxDepartment.getId()); + map.put("children", children); + return map; + } else { + return null; + } } + /** + * 用于创建部门树结构 + */ + class InitDepartmentTree implements Callable { + + /** + * 用于开启线程的部门列表 + */ + List qywxDepartmentList; + + /** + * 全部部门列表 + */ + List qywxDepartmentListAll; + + public InitDepartmentTree(List qywxDepartmentList, List qywxDepartmentListAll) { + this.qywxDepartmentList = qywxDepartmentList; + this.qywxDepartmentListAll = qywxDepartmentListAll; + } + + @Override + public Object call() throws Exception { + ExecutorService exs = Executors.newFixedThreadPool(qywxDepartmentList.size()); + // 结果集 + List list = new ArrayList<>(); + List> futureList = new ArrayList>(); + // 1.定义CompletionService + CompletionService completionService = new ExecutorCompletionService(exs); + + // 开启对应数目的线程 + for (int i = 0; i < qywxDepartmentList.size(); i++) { + qywxDepartment qywxDepartment = qywxDepartmentList.get(i); + // 开启线程 + Future submit = completionService.submit(new buildDepartmentTree(qywxDepartmentListAll, qywxDepartment)); + futureList.add(submit); + } + + // 收集结果 + for (int i = 0; i < qywxDepartmentList.size(); i++) { + Object result = null; + try { + result = completionService.take().get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + list.add(result); + } + return list; + } + } + + /** + * 构造树结构对象 + */ + class buildDepartmentTree implements Callable { + + // 所有部门列表 + List qywxDepartmentList; + // 当前部门 + qywxDepartment qywxDepartment; + + public buildDepartmentTree(List qywxDepartmentList, qywxDepartment qywxDepartment) { + this.qywxDepartmentList = qywxDepartmentList; + this.qywxDepartment = qywxDepartment; + } + + @Override + public Object call() throws Exception { + List children = new ArrayList<>(); + for (qywxDepartment department : qywxDepartmentList) { + // 如果该部门是当前部门的子部门 + if (Integer.compare(qywxDepartment.getId(), department.getParentid()) == 0) { + Map stringObjectMap = InitTreeForQyWxDepartment(department, null); + children.add(stringObjectMap); + } + } + return InitTreeForQyWxDepartment(qywxDepartment, children); + } + } + + + /** * 用于构造人员树 */ diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/NoticeServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/NoticeServiceImpl.java index 2bee03fb..8f9a753c 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/NoticeServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/NoticeServiceImpl.java @@ -1,5 +1,8 @@ package com.dreamchaser.depository_manage.service.impl; +import com.alibaba.fastjson.JSONObject; +import com.dreamchaser.depository_manage.config.PortConfig; +import com.dreamchaser.depository_manage.config.QyWxConfig; import com.dreamchaser.depository_manage.entity.Notice; import com.dreamchaser.depository_manage.entity.UserByPort; import com.dreamchaser.depository_manage.mapper.NoticeMapper; @@ -43,7 +46,7 @@ public class NoticeServiceImpl implements NoticeService { * @return 符合条件的公告列表 */ @Override - public List findNoticeByCondition(Map map) { + public List findNoticeByCondition(Map map, UserByPort userByPort) { Integer size = 10,page=1; if (map.containsKey("size")){ @@ -65,13 +68,36 @@ public class NoticeServiceImpl implements NoticeService { map.put("endDate", DateUtil.DateTimeByMonthToTimeStamp(endDate)); } + Object state = 1; + if(map.containsKey("state")){ + state = map.get("state"); + } + map.put("state",state); List notice = noticeMapper.findNoticeByCondition(map); List result = new ArrayList<>(); + String userAgent = (String) map.get("userAgent"); + + // 获取当前用户的部门在企业微信中的对应id + JSONObject userPortByQyWx = PortConfig.getUserPortByQyWx(userByPort.getMaindeparment()); + Integer portByQyWxInteger = userPortByQyWx.getInteger("wechatorganizationid"); + for (Notice value : notice) { UserByPort user = LinkInterfaceUtil.FindUserById(value.getUserId(), null); - NoticeP np = new NoticeP(value); - np.setUserName(user.getName()); - result.add(np); + // 获取可见范围的 + String viewRangeId = value.getViewRangeId(); + // 分割 + String[] split = viewRangeId.split(","); + for (String s : split) { + if (!s.equals("")) { + // 获取当前部门及子部门Id + List qyWxDepartmentIdList = QyWxConfig.getQyWxDepartmentIdList(userAgent, ObjectFormatUtil.toInteger(s)); + if (qyWxDepartmentIdList.contains(portByQyWxInteger)) { + NoticeP np = new NoticeP(value); + np.setUserName(user.getName()); + result.add(np); + } + } + } } return result; } @@ -92,4 +118,85 @@ public class NoticeServiceImpl implements NoticeService { noticeP.setUserName(user.getName()); return noticeP; } + + + /** + * 用于修改公告信息 + * @param map 参数map + * @return + */ + @Override + public Integer updateNotice(Map map) { + map.put("time",System.currentTimeMillis()); + return noticeMapper.updateNotice(map); + } + + + /** + * 用于根据主键删除公告信息(软删除) + * @param id 待删除主键 + * @return + */ + @Override + public Integer delNoticeForSoftById(Integer id) { + // 获取当前待删除公告 + Notice noticeById = noticeMapper.findNoticeById(id); + // 设置当前公告状态为删除态 + noticeById.setState(3); + return noticeMapper.updateNotice(noticeById); + } + + + /** + * 用于根据主键批量删除公告信息(软删除) + * @param ids 待删除主键列表 + * @return + */ + @Override + public Integer delNoticeForSoftByIds(List ids) { + List noticeByIds = noticeMapper.findNoticeByIds(ids); + for (Notice n:noticeByIds + ) { + n.setState(3); + } + return noticeMapper.updateNotices(noticeByIds); + } + + /** + * 用于根据主键删除公告信息 + * @param id 待删除主键 + * @return + */ + @Override + public Integer delNoticeById(Integer id) { + return noticeMapper.deleteNoticeById(id); + } + + /** + * 用于根据主键批量删除公告信息 + * @param ids 待删除主键id列表 + * @return + */ + @Override + public Integer delNoticeByIds(List ids) { + return noticeMapper.deleteNoticeByIds(ids); + } + + /** + * 用于修改公告状态 + * @param map 待修改条件 + * @return + */ + @Override + public Integer updateNoticeState(Map map) { + Integer id = ObjectFormatUtil.toInteger(map.get("id")); + // 获取当前主键对应的公告信息 + Notice noticeById = noticeMapper.findNoticeById(id); + if(map.containsKey("state")){ + noticeById.setState(1); + }else{ + noticeById.setState(2); + } + return noticeMapper.updateNotice(noticeById); + } } diff --git a/src/main/resources/templates/pages/depository/table-stock.html b/src/main/resources/templates/pages/depository/table-stock.html index 56cc61fa..ac427005 100644 --- a/src/main/resources/templates/pages/depository/table-stock.html +++ b/src/main/resources/templates/pages/depository/table-stock.html @@ -43,6 +43,12 @@ +
+ +
+ +
+
+
+
+ +
- - - + diff --git a/src/main/resources/templates/pages/notice/notice-out.html b/src/main/resources/templates/pages/notice/notice-out.html index b6e7be5d..4b47f538 100644 --- a/src/main/resources/templates/pages/notice/notice-out.html +++ b/src/main/resources/templates/pages/notice/notice-out.html @@ -25,12 +25,14 @@
-
- +
+
-
- +
@@ -56,7 +58,7 @@ @@ -64,9 +66,6 @@
-
@@ -75,19 +74,17 @@
+ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/pages/notice/selectDepartment.html b/src/main/resources/templates/pages/notice/selectDepartment.html index 177ddb4d..f2765741 100644 --- a/src/main/resources/templates/pages/notice/selectDepartment.html +++ b/src/main/resources/templates/pages/notice/selectDepartment.html @@ -1,14 +1,18 @@ - + - - Title + + layui + + + + +
diff --git a/src/main/resources/templates/pages/other/welcome_mobile.html b/src/main/resources/templates/pages/other/welcome_mobile.html index 5bcac508..3c364699 100644 --- a/src/main/resources/templates/pages/other/welcome_mobile.html +++ b/src/main/resources/templates/pages/other/welcome_mobile.html @@ -10,28 +10,142 @@ @@ -54,7 +168,7 @@
仓库数量
-

4

+

4

当前仓库总记录数
@@ -68,7 +182,7 @@
库存金额统计
-

12032

+

12032

当前库存总数
@@ -114,49 +228,57 @@
- + 物料创建 @@ -172,7 +294,11 @@
-
系统公告
+
+ 系统公告 + +
@@ -186,7 +312,11 @@
-
我的任务
+
+ 我的任务 + +
@@ -204,7 +334,16 @@ diff --git a/src/main/resources/templates/pages/post/selectManager.html b/src/main/resources/templates/pages/post/selectManager.html index 1d88f53f..9c3912a6 100644 --- a/src/main/resources/templates/pages/post/selectManager.html +++ b/src/main/resources/templates/pages/post/selectManager.html @@ -29,13 +29,13 @@ var name = $("#departmentManager", window.parent.document).val(); var id = $("#departmentManagerId", window.parent.document).val(); + $("#departmentManager", window.parent.document).val(data.title); // if (name === undefined || name === null || name === "") { - $("#departmentManager", window.parent.document).val(data.title); // } else { // $("#departmentManager", window.parent.document).val(name + data.title); // } if (id === undefined || id === null || id === "") { - $("#departmentManagerId", window.parent.document).val(data.id); + $("#departmentManagerId", window.parent.document).val(data.id + ","); } else { $("#departmentManagerId", window.parent.document).val(id + data.id + ","); } diff --git a/src/test/java/com/dreamchaser/depository_manage/TestQyWxAdministration.java b/src/test/java/com/dreamchaser/depository_manage/TestQyWxAdministration.java index 3692b756..8a6a5178 100644 --- a/src/test/java/com/dreamchaser/depository_manage/TestQyWxAdministration.java +++ b/src/test/java/com/dreamchaser/depository_manage/TestQyWxAdministration.java @@ -1,6 +1,8 @@ package com.dreamchaser.depository_manage; +import com.alibaba.fastjson.JSONObject; import com.dreamchaser.depository_manage.config.QyWxConfig; +import com.dreamchaser.depository_manage.entity.MaterialType; import com.dreamchaser.depository_manage.entity.ThreeAboutMan; import com.dreamchaser.depository_manage.entity.qywxDepartment; import com.dreamchaser.depository_manage.service.impl.QyWxOperationService; @@ -10,30 +12,112 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Callable; +import java.util.*; +import java.util.concurrent.*; @SpringBootTest @RunWith(SpringRunner.class) public class TestQyWxAdministration { - @Test - public void Test(){ - List qyWxDepartmentList = QyWxConfig.getQyWxDepartmentList("8b283ea8ba44697a18c763443c257db5", 51); + public void Test() { + // 获取所有企业微信的部门列表 + List qyWxDepartmentListAll = QyWxConfig.getQyWxDepartmentList("8b283ea8ba44697a18c763443c257db5", 51); + + // 设置用于开启线程的部门列表 + List qyWxDepartmentList = new ArrayList<>(); + + + // 定义分页数量 + double size = 20.0; + + // 定义线程数 + int threadSize = (int) Math.ceil(qyWxDepartmentListAll.size() / size); + + // 开启对应数量的线程 + ExecutorService exs = Executors.newFixedThreadPool(threadSize); + + // 1.定义CompletionService + CompletionService completionService = new ExecutorCompletionService(exs); + + // 线程结果集 + List> futureList = new ArrayList>(); + + + for (int i = 0; i < qyWxDepartmentListAll.size(); i++) { + // 获取当前类型 + qywxDepartment qywxDepartment = qyWxDepartmentListAll.get(i); + if (((i + 1) % 20) == 0) { // 如果有100个开启线程进行处理 + qyWxDepartmentList.add(qywxDepartment); + InitDepartmentTree taskTest = new InitDepartmentTree(qyWxDepartmentList, qyWxDepartmentListAll); + Future future = completionService.submit(taskTest); + futureList.add(future); // 添加到结果集 + qyWxDepartmentList = new ArrayList<>(); // 情况列表 + } else { + // 添加id到列表中 + if (Integer.compare(qywxDepartment.getParentid(), 3) == 0) { + qyWxDepartmentList.add(qywxDepartment); + } + } + } + + + if (qyWxDepartmentList.size() > 0) { + // 如果有剩余,开启线程进行处理 + InitDepartmentTree taskTest = new InitDepartmentTree(qyWxDepartmentList, qyWxDepartmentListAll); + Future future = completionService.submit(taskTest); + futureList.add(future); + } + + // 树结构结果集 + List list = new ArrayList<>(); + + for (int i = 0; i < threadSize; i++) { + Object result = null; + try { + result = completionService.take().get(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + list.addAll((Collection) result); + } - System.out.println(qyWxDepartmentList); + System.out.println(JSONObject.toJSONString(list)); } + @Test + public void Test2(){ + List qyWxDepartmentIdList = QyWxConfig.getQyWxDepartmentIdList("8b283ea8ba44697a18c763443c257db5", 51); + System.out.println(qyWxDepartmentIdList); + } + + /** + * 用于构造树形模板 + * + * @param qywxDepartment + * @param children + * @return + */ + public Map InitTree(qywxDepartment qywxDepartment, List children) { + if (qywxDepartment != null) { + Map map = new HashMap<>(); + map.put("title", qywxDepartment.getName()); + map.put("id", qywxDepartment.getId()); + map.put("children", children); + return map; + } else { + return null; + } + } + /** * 用于创建部门树结构 */ - class InitDepartmentTree implements Callable{ + class InitDepartmentTree implements Callable { /** * 用于开启线程的部门列表 @@ -45,56 +129,70 @@ public class TestQyWxAdministration { */ List qywxDepartmentListAll; + public InitDepartmentTree(List qywxDepartmentList, List qywxDepartmentListAll) { + this.qywxDepartmentList = qywxDepartmentList; + this.qywxDepartmentListAll = qywxDepartmentListAll; + } + @Override public Object call() throws Exception { + ExecutorService exs = Executors.newFixedThreadPool(qywxDepartmentList.size()); + // 结果集 + List list = new ArrayList<>(); + List> futureList = new ArrayList>(); + // 1.定义CompletionService + CompletionService completionService = new ExecutorCompletionService(exs); + + // 开启对应数目的线程 + for (int i = 0; i < qywxDepartmentList.size(); i++) { + qywxDepartment qywxDepartment = qywxDepartmentList.get(i); + // 开启线程 + Future submit = completionService.submit(new buildDepartmentTree(qywxDepartmentListAll, qywxDepartment)); + futureList.add(submit); + } - return null; + // 收集结果 + for (int i = 0; i < qywxDepartmentList.size(); i++) { + Object result = null; + try { + result = completionService.take().get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + list.add(result); + } + return list; } } - class buildDepartmentTree implements Callable{ + /** + * 构造树结构对象 + */ + class buildDepartmentTree implements Callable { // 所有部门列表 List qywxDepartmentList; // 当前部门 qywxDepartment qywxDepartment; + public buildDepartmentTree(List qywxDepartmentList, qywxDepartment qywxDepartment) { + this.qywxDepartmentList = qywxDepartmentList; + this.qywxDepartment = qywxDepartment; + } + @Override public Object call() throws Exception { - List result = new ArrayList<>(); + List children = new ArrayList<>(); for (qywxDepartment department : qywxDepartmentList) { // 如果该部门是当前部门的子部门 - if(Integer.compare(qywxDepartment.getId(),department.getParentid()) == 0){ - Map stringObjectMap = InitTree(qywxDepartment, null); - result.add(stringObjectMap); + if (Integer.compare(qywxDepartment.getId(), department.getParentid()) == 0) { + Map stringObjectMap = InitTree(department, null); + children.add(stringObjectMap); } } - return result; + return InitTree(qywxDepartment, children); } } - /** - * 用于构造树形模板 - * @param qywxDepartment - * @param children - * @return - */ - public Map InitTree(qywxDepartment qywxDepartment, List children){ - if (qywxDepartment != null) { - Map map = new HashMap<>(); - map.put("title", qywxDepartment.getName()); - map.put("id", qywxDepartment.getId()); - map.put("children", children); - return map; - } else { - return null; - } - } - - - - - - }