Browse Source

修改公告相关功能

lwx_dev
erdanergou 3 years ago
parent
commit
9df76ad0fa
  1. 2
      src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java
  2. 19
      src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java
  3. 9
      src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java
  4. 4
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  5. 67
      src/main/java/com/dreamchaser/depository_manage/controller/NoticeController.java
  6. 47
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  7. 5
      src/main/java/com/dreamchaser/depository_manage/entity/Notice.java
  8. 16
      src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.java
  9. 23
      src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.xml
  10. 11
      src/main/java/com/dreamchaser/depository_manage/pojo/NoticeP.java
  11. 2
      src/main/java/com/dreamchaser/depository_manage/service/CompanyService.java
  12. 44
      src/main/java/com/dreamchaser/depository_manage/service/NoticeService.java
  13. 169
      src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java
  14. 115
      src/main/java/com/dreamchaser/depository_manage/service/impl/NoticeServiceImpl.java
  15. 9
      src/main/resources/templates/pages/depository/table-stock.html
  16. 2
      src/main/resources/templates/pages/material/material-add.html
  17. 17
      src/main/resources/templates/pages/material/material-out.html
  18. 45
      src/main/resources/templates/pages/notice/notice-add.html
  19. 138
      src/main/resources/templates/pages/notice/notice-edit.html
  20. 362
      src/main/resources/templates/pages/notice/notice-out.html
  21. 314
      src/main/resources/templates/pages/notice/notice-out_user.html
  22. 31
      src/main/resources/templates/pages/notice/selectDepartment.html
  23. 44
      src/main/resources/templates/pages/other/welcome.html
  24. 246
      src/main/resources/templates/pages/other/welcome_mobile.html
  25. 4
      src/main/resources/templates/pages/post/selectManager.html
  26. 178
      src/test/java/com/dreamchaser/depository_manage/TestQyWxAdministration.java

2
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){

19
src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java

@ -249,6 +249,25 @@ public class QyWxConfig {
}
public static List<Integer> 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<Integer> 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<String, String> redisTemplate) {
QyWxConfig.redisTemplate = redisTemplate;

9
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<Object> 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);
}

4
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);
}

67
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<String,Object> map, HttpServletRequest request){
public RestResponse addNotice(@RequestBody Map<String, Object> 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<String,Object> map,HttpServletRequest request){
public RestResponse findNotices(@RequestParam Map<String, Object> 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<NoticeP> noticeByCondition = noticeService.findNoticeByCondition(map);
map.put("userAgent", crypt);
List<NoticeP> noticeByCondition = noticeService.findNoticeByCondition(map, userToken);
return new RestResponse(noticeByCondition);
}
@PostMapping("/notice_del")
public RestResponse DelNotice(@RequestBody Map<String,Object> map,HttpServletRequest request){
return null;
public RestResponse DelNotice(@RequestBody Map<String, Object> 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<Integer> ids = (List<Integer>) 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<String, Object> 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<String,Object> 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<String,Object> map){
if(map.containsKey("id")){
Integer integer = noticeService.updateNoticeState(map);
return CrudUtil.putHandle(integer,1);
}else{
throw new MyException("缺少必要参数");
}
}
}

47
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<String, Object> 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;
}
}

5
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;
}

16
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<String,Object> map);
/**
* 批量修改公告信息
* @param notices
@ -52,6 +60,14 @@ public interface NoticeMapper {
Integer deleteNoticeById(Integer id);
/**
* 根据主键id批量获取公告信息
* @param list 带获取id列表
* @return
*/
List<Notice> findNoticeByIds(List<Integer> list);
/**
* 根据主键批量删除公告
* @param list 待删除公告id列表

23
src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.xml

@ -9,6 +9,7 @@
<id column="id" property="id" jdbcType="INTEGER" />
<result column="title" property="title" jdbcType="VARCHAR" />
<result column="content" property="content" jdbcType="VARCHAR" />
<result column="viewRangeId" property="viewRangeId" jdbcType="VARCHAR" />
<result column="time" property="time" jdbcType="INTEGER" />
<result column="state" property="state" jdbcType="INTEGER" />
<result column="userId" property="userId" jdbcType="INTEGER" />
@ -16,7 +17,7 @@
<!-- 表查询字段 -->
<sql id="allColumns">
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
</sql>
<!-- 查询所有 -->
@ -74,13 +75,14 @@
<!-- 新增信息 -->
<insert id="addNotice" useGeneratedKeys="true" keyProperty="id">
INSERT INTO notice (
title, content, time,userId,state
title, content, time,userId,state,viewRangeId
) VALUES (
#{title},
#{content},
#{time},
#{userId},
#{state}
#{state},
#{viewRangeId}
)
</insert>
@ -89,7 +91,7 @@
<!-- 批量新增信息 -->
<insert id="addNotices" parameterType="list">
INSERT INTO notice (
id, title, content, time,userId,state
id, title, content, time,userId,state,viewRangeId
) VALUES
<foreach collection="list" index="index" item="item" separator=",">
(
@ -99,6 +101,7 @@
#{item.time},
#{item.userId},
#{item.state},
#{item.viewRangeId}
)
</foreach>
</insert>
@ -118,7 +121,10 @@
time = #{time},
</if>
<if test="state != null and state != ''">
state = #{state}
state = #{state},
</if>
<if test="viewRangeId != null and viewRangeId != ''">
viewRangeId = #{viewRangeId}
</if>
</set>
where id = #{id}
@ -136,10 +142,13 @@
content = #{item.content},
</if>
<if test="item.time != null">
time = #{item.time}
time = #{item.time},
</if>
<if test="item.state != null and item.state != ''">
state = #{item.state}
state = #{item.state},
</if>
<if test="item.viewRangeId != null and item.viewRangeId != ''">
viewRangeId = #{item.viewRangeId}
</if>
</set>
WHERE id = #{item.id}

11
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();
}
}

2
src/main/java/com/dreamchaser/depository_manage/service/CompanyService.java

@ -99,5 +99,5 @@ public interface CompanyService {
/**
* 用于构造企业微信行政组织结构
*/
List<Object> BuildQyWxAdministrationTreeMenus(UserByPort userByPort);
List<Object> BuildQyWxAdministrationTreeMenus(UserByPort userByPort,String UserAgent);
}

44
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<NoticeP> findNoticeByCondition(Map<String,Object> map);
List<NoticeP> findNoticeByCondition(Map<String,Object> map, UserByPort userByPort);
/**
* 根据主键id获取公告信息
@ -32,4 +33,45 @@ public interface NoticeService {
NoticeP findNoticeById(Integer id);
/**
* 用于修改公告信息
* @param map 参数map
* @return
*/
Integer updateNotice(Map<String,Object> map);
/**
* 用于根据主键删除公告信息软删除
* @param id 待删除主键
* @return
*/
Integer delNoticeForSoftById(Integer id);
/**
* 用于根据主键批量删除公告信息软删除
* @param ids 待删除主键列表
* @return
*/
Integer delNoticeForSoftByIds(List<Integer> ids);
/**
* 用于根据主键删除公告信息
* @param id 待删除主键
* @return
*/
Integer delNoticeById(Integer id);
/**
* 用于根据主键批量删除公告信息
* @param ids 待删除主键id列表
* @return
*/
Integer delNoticeByIds(List<Integer> ids);
/**
* 用于修改公告状态
* @param map 待修改条件
* @return
*/
Integer updateNoticeState(Map<String,Object> map);
}

169
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<Object> BuildQyWxAdministrationTreeMenus(UserByPort userByPort) {
public List<Object> BuildQyWxAdministrationTreeMenus(UserByPort userByPort,String UserAgent) {
// 获取所有企业微信的部门列表
List<qywxDepartment> qyWxDepartmentListAll = QyWxConfig.getQyWxDepartmentList(UserAgent, 51);
return null;
// 设置用于开启线程的部门列表
List<qywxDepartment> qyWxDepartmentList = new ArrayList<>();
// 定义分页数量
double size = 20.0;
// 定义线程数
int threadSize = (int) Math.ceil(qyWxDepartmentListAll.size() / size);
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
// 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
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<Object> 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<Object> future = completionService.submit(taskTest);
futureList.add(future);
}
// 树结构结果集
List<Object> 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<String, Object> InitTreeForQyWxDepartment(qywxDepartment qywxDepartment, List<Object> children) {
if (qywxDepartment != null) {
Map<String, Object> 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<Object> {
/**
* 用于开启线程的部门列表
*/
List<qywxDepartment> qywxDepartmentList;
/**
* 全部部门列表
*/
List<qywxDepartment> qywxDepartmentListAll;
public InitDepartmentTree(List<qywxDepartment> qywxDepartmentList, List<qywxDepartment> qywxDepartmentListAll) {
this.qywxDepartmentList = qywxDepartmentList;
this.qywxDepartmentListAll = qywxDepartmentListAll;
}
@Override
public Object call() throws Exception {
ExecutorService exs = Executors.newFixedThreadPool(qywxDepartmentList.size());
// 结果集
List<Object> list = new ArrayList<>();
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
// 开启对应数目的线程
for (int i = 0; i < qywxDepartmentList.size(); i++) {
qywxDepartment qywxDepartment = qywxDepartmentList.get(i);
// 开启线程
Future<Object> 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<Object> {
// 所有部门列表
List<qywxDepartment> qywxDepartmentList;
// 当前部门
qywxDepartment qywxDepartment;
public buildDepartmentTree(List<qywxDepartment> qywxDepartmentList, qywxDepartment qywxDepartment) {
this.qywxDepartmentList = qywxDepartmentList;
this.qywxDepartment = qywxDepartment;
}
@Override
public Object call() throws Exception {
List<Object> children = new ArrayList<>();
for (qywxDepartment department : qywxDepartmentList) {
// 如果该部门是当前部门的子部门
if (Integer.compare(qywxDepartment.getId(), department.getParentid()) == 0) {
Map<String, Object> stringObjectMap = InitTreeForQyWxDepartment(department, null);
children.add(stringObjectMap);
}
}
return InitTreeForQyWxDepartment(qywxDepartment, children);
}
}
/**
* 用于构造人员树
*/

115
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<NoticeP> findNoticeByCondition(Map<String, Object> map) {
public List<NoticeP> findNoticeByCondition(Map<String, Object> 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> notice = noticeMapper.findNoticeByCondition(map);
List<NoticeP> 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<Integer> 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<String, Object> 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<Integer> ids) {
List<Notice> 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<Integer> ids) {
return noticeMapper.deleteNoticeByIds(ids);
}
/**
* 用于修改公告状态
* @param map 待修改条件
* @return
*/
@Override
public Integer updateNoticeState(Map<String, Object> 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);
}
}

9
src/main/resources/templates/pages/depository/table-stock.html

@ -43,6 +43,12 @@
<input type="text" name="code" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">型号</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" id="version" name="version" autocomplete="off"/>
</div>
</div>
<div class="layui-inline">
<button type="submit" class="layui-btn layui-btn-primary" lay-submit
@ -242,6 +248,9 @@
if (data.code !== '') {
req.mcode = data.code;
}
if(data.version !== ''){
req.version = data.version;
}
//执行搜索重载
table.reload('currentTableId', {
url: '/material/findInventory',

2
src/main/resources/templates/pages/material/material-add.html

@ -224,7 +224,7 @@
parent.wx.scanQRCode({
desc: 'scanQRCode desc',
needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
scanType: ["barCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有
scanType: ["barCode","qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有
success: function (res) {
var result = res.resultStr;//当needResult为1时返回处理结果
$("#barcode").val(result)

17
src/main/resources/templates/pages/material/material-out.html

@ -19,12 +19,7 @@
<form class="layui-form layui-form-pane" action="">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">品牌</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" id="brand" name="brand" autocomplete="off"/>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">种类</label>
<div class="layui-input-inline">
@ -40,6 +35,12 @@
<input type="text" name="mname" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">型号</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" id="version" name="version" autocomplete="off"/>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">存货编码</label>
<div class="layui-input-inline">
@ -185,8 +186,8 @@
if (data.mname !== '') {
req.mname = data.mname;
}
if (data.brand !== '') {
req.brand = data.brand;
if (data.version !== '') {
req.version = data.version;
}
if (data.materialTypeId !== '') {
req.materialTypeId = data.materialTypeId;

45
src/main/resources/templates/pages/notice/notice-add.html

@ -31,7 +31,7 @@
<div class="layui-fluid">
<div class="layui-card-body" style="padding: 0">
<div class="layui-form" style="margin-top: 30px">
<div class="layui-form-item" style="display:none;">
<div class="layui-form-item" >
<label class="layui-form-label">可见范围:</label>
<div class="layui-input-block">
<div class="fairy-tag-container" style="border-style: none">
@ -39,7 +39,11 @@
<input type="text" id="viewRange" style="display: none"/>
<i class="layui-icon layui-icon-search"
style="display: inline;right: 0;position: absolute;"
id="selectDepartment"></i>
onclick="selectDepartment()"></i>
<input type="text" id="viewRangeId"
name="viewRangeId"
class="layui-input" style="display: none"
lay-verify="required"/>
</div>
</div>
@ -116,8 +120,43 @@
return false;
});
selectDepartment = function () {
let tagLabel = inputTag.render({
elem: '#viewRange',
data: [],//初始值
removeKeyNum: 8,//删除按键编号 默认,BackSpace 键
createKeyNum: 13,//创建按键编号 默认,Enter 键
onChange: function (data, value, type, index) {
if (type === "remove") {
let viewRange = $("#viewRangeId");
let split = viewRange.val().split(",");
split.splice(index, 1);
viewRange.val(split.toString());
}
}
});
selectDepartment = function () {
layer.open({
type: 2,
title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
move : '.layui-layer-title',
fixed:false,
content: '/selectDepartment',
success: function(layero, index){
var children = layero.children();
var content = $(children[1]);
var iframeChildren = $(content.children());
content.css('height','100%');
iframeChildren.css('height','100%');
},
end:function () {
tagLabel.createItem();
}
});
}
});

138
src/main/resources/templates/pages/notice/notice-edit.html

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>layui</title>
@ -8,48 +8,88 @@
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="/static/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/public.css" media="all">
<link rel="stylesheet" href="/static/css/inputTag.css">
</head>
<body>
<style>
.inputdiv {
display: flex;
background-color: #fff;
height: 38px;
line-height: 38px;
border: 1px solid rgb(238, 238, 238);
}
</style>
<div class="layuimini-container">
<div class="layuimini-main">
<div class="layui-main layui-card" style="width: 100%;border-radius: 10px;height: 50%">
<fieldset class="layui-elem-field">
<legend style="font-size: 30px;padding-top: 20px;text-align: center">公告发布</legend>
<div class="layui-field-box">
<div class="layui-form" style="margin-top: 30px">
<div class="layui-form-item">
<label class="layui-form-label">公告标题:</label>
<div class="layui-input-block">
<input name="title" type="text" placeholder="请输入公告标题..." class="layui-input" lay-verify="required" />
<div class="layui-fluid">
<div class="layui-card-body" style="padding: 0">
<div class="layui-form" style="margin-top: 30px">
<input style="display:none;" name="id" th:value="${record.getId()}">
<div class="layui-form-item" >
<label class="layui-form-label">可见范围:</label>
<div class="layui-input-block">
<div class="fairy-tag-container" style="border-style: none">
<div class="inputdiv">
<input type="text" id="viewRange" style="display: none" th:value="${record.getViewRangeName()}"/>
<i class="layui-icon layui-icon-search"
style="display: inline;right: 0;position: absolute;"
onclick="selectDepartment()"></i>
<input type="text" id="viewRangeId"
name="viewRangeId"
class="layui-input" style="display: none"
th:value="${record.getViewRangeId()}"
lay-verify="required"/>
</div>
</div>
</div>
</div>
</div>
<div class="layui-form-item" >
<label class="layui-form-label">公告内容:</label>
<div class="layui-input-block" >
<textarea name="content" style="height: 30em" placeholder="请填写公告内容..." class="layui-textarea" lay-verify="required"></textarea>
<div class="layui-form-item">
<label class="layui-form-label">公告标题:</label>
<div class="layui-input-block">
<input name="title" type="text" placeholder="请输入公告标题..." class="layui-input" th:value="${record.getTitle()}"
lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">公告内容:</label>
<div class="layui-input-block">
<textarea name="content" style="height: 30em" placeholder="请填写公告内容..." th:text="${record.getContent()}"
class="layui-textarea" lay-verify="required"></textarea>
</div>
</div>
</div>
<div class="layui-form-item" style="margin-top: 20px">
<div class="layui-input-block " style="text-align: center">
<button class="layui-btn layui-btn-lg " style="width: 150px" lay-submit lay-filter="noticeBtn">发布公告</button>
<div class="layui-form-item" style="margin-top: 20px">
<div class="layui-input-block " style="text-align: center">
<button class="layui-btn layui-btn-lg " style="width: 150px" lay-submit
lay-filter="noticeBtn">修改公告
</button>
</div>
</div>
</div>
</div>
</div>
</fieldset>
</div>
</div>
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="/static/js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script>
layui.use(['form', 'layer', 'laydate'], function () {
function selectDepartment(){
}
layui.use(['form', 'layer', 'laydate', 'inputTag'], function () {
var form = layui.form,
layer = layui.layer,
inputTag = layui.inputTag,
laydate = layui.laydate,
$ = layui.$;
@ -61,7 +101,7 @@
//监听提交
form.on('submit(noticeBtn)', function (data) {
$.ajax({
url: "/notice/notice",
url: "/notice/noticeEdit",
data: JSON.stringify(data.field),
type: "post",
dataType: 'json',
@ -70,11 +110,11 @@
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
} else {
layer.msg("公告发布成功", {
layer.msg("公告修改成功", {
icon: 6,//成功的表情
time: 1000 //1秒关闭(如果不配置,默认是3秒)
},function(){
window.location="/notice_add"
}, function () {
window.location = "/notice_out"
});
}
}
@ -82,6 +122,54 @@
return false;
});
let tagData = [];
let tempData = $("#viewRange").val().split(",");
$.each(tempData, function (index, item) {
if (item !== "") {
tagData.push(item)
}
});
$("#viewRange").val("");
let tagLabel = inputTag.render({
elem: '#viewRange',
data: tagData,//初始值
removeKeyNum: 8,//删除按键编号 默认,BackSpace 键
createKeyNum: 13,//创建按键编号 默认,Enter 键
onChange: function (data, value, type, index) {
if (type === "remove") {
let viewRange = $("#viewRangeId");
let split = viewRange.val().split(",");
split.splice(index, 1);
viewRange.val(split.toString());
}
}
});
selectDepartment = function () {
layer.open({
type: 2,
title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
move : '.layui-layer-title',
fixed:false,
content: '/selectDepartment',
success: function(layero, index){
var children = layero.children();
var content = $(children[1]);
var iframeChildren = $(content.children());
content.css('height','100%');
iframeChildren.css('height','100%');
},
end:function () {
tagLabel.createItem();
}
});
}
});
</script>
</body>

362
src/main/resources/templates/pages/notice/notice-out.html

@ -25,12 +25,14 @@
</div>
<div class="layui-inline">
<label class="layui-form-label">发布日期</label>
<div class="layui-input-inline" >
<input type="text" name="startDate" id="startDate" placeholder="请选择开始日期" autocomplete="off" class="layui-input">
<div class="layui-input-inline">
<input type="text" name="startDate" id="startDate" placeholder="请选择开始日期"
autocomplete="off" class="layui-input">
</div>
<div class="layui-form-mid">-</div>
<div class="layui-input-inline">
<input type="text" name="endDate" id="endDate" placeholder="请选择开始日期" autocomplete="off" class="layui-input">
<input type="text" name="endDate" id="endDate" placeholder="请选择开始日期" autocomplete="off"
class="layui-input">
</div>
</div>
<div class="layui-inline">
@ -56,7 +58,7 @@
<!-- 状态展示-->
<script type="text/html" id="switchTpl">
<input type="checkbox" name="state" value="{{d.oldId}}" lay-skin="switch" lay-text="启用|禁用"
<input type="checkbox" name="state" value="{{d.id}}" lay-skin="switch" lay-text="启用|禁用"
lay-filter="changeState" {{ d.state== 1 ? 'checked' : '' }} >
</script>
@ -64,9 +66,6 @@
<div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="add"> 添加</button>
<button class="layui-btn layui-btn-sm layui-btn-danger data-delete-btn" lay-event="delete"> 删除</button>
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" id="u_fileUpload"
lay-event="import">导入数据
</button>
</div>
</script>
@ -75,19 +74,17 @@
<script type="text/html" id="currentTableBar">
<a class="layui-btn layui-btn-xs data-count-edit" lay-event="detail">详情</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" th:style="'display:'+${display}"
lay-event="realDelete">彻底删除</a>
<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="realDelete">彻底删除</a>
</script>
</div>
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
layui.use(['form', 'table', 'upload','laydate'], function () {
layui.use(['form', 'table', 'laydate'], function () {
var $ = layui.jquery,
form = layui.form,
laydate = layui.laydate,
upload = layui.upload,
table = layui.table;
@ -155,10 +152,10 @@
if (data.state !== '') {
req.state = data.state;
}
if(data.startDate !== ''){
if (data.startDate !== '') {
req.startDate = data.startDate;
}
if(data.endDate !== ''){
if (data.endDate !== '') {
req.endDate = data.endDate;
}
//执行搜索重载
@ -195,7 +192,7 @@
var req = {};
req.ids = [];
for (i = 0, len = data.length; i < len; i++) {
req.ids[i] = data[i].oldId;
req.ids[i] = data[i].id;
}
if (req.ids.length > 0) {
layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) {
@ -220,7 +217,7 @@
});
//执行搜索重载
table.reload('currentTableId', {
url: '/materialType/materialTypeRecord',
url: '/notice/findAllNotices',
page: {
curr: 1
}
@ -238,49 +235,6 @@
});
//用于导入数据
var upLoader = upload.render({
elem: "#u_fileUpload", // 绑定元素
url: '/excel/importExcelByMT', // 上传接口
accept: 'file', // 允许上传的格式,
exts: 'xls|xlsx|csv',
done: function (res) {
//如果上传成功
if (res.code == 200) {
var re = "";
for (let i = 0; i < res.data.errMsg.length; i++) {
var show = "<p style='color: #ff211e'>" + res.data.errMsg[i] + ":错误" + "</p>";
re += show
}
for (let i = 0; i < res.data.dataList.length; i++) {
var tname = res.data.dataList[i]["tname"];
var id = res.data.dataList[i]["oldId"];
var parentId = res.data.dataList[i]["parentId"] == null ? "" : res.data.dataList[i]["parentId"];
var introduce = res.data.dataList[i]["introduce"] == null ? "" : res.data.dataList[i]["introduce"];
var show = "<p style='color: #00FF00'>" + tname + " " + id + " " + parentId + "成功" + "</p>";
re += show
}
layer.open({
type: 1,
skin: 'layui-layer-rim', //加上边框
area: ['500px', '500px'], //宽高
content: re
})
} else {
layer.msg(res.msg)
}
},
error: function () {
var demoText = $('#demoText');
demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
demoText.find('.demo-reload').on('click', function () {
upLoader.upload()
})
}
});
//监听表格复选框选择
table.on('checkbox(currentTableFilter)', function (obj) {
console.log(obj)
@ -290,19 +244,18 @@
let data = obj.data;
if (obj.event === 'detail') {
req = {};
req.parentId = parentId;
var index = layer.open({
title: '物料种类详情',
title: '公告详情',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/materialType_detail?id=' + data.oldId,
content: '/noticeView?id=' + data.id,
end: function () {
//执行搜索重载
table.reload('currentTableId', {
url: '/materialType/materialTypeRecord',
url: '/notice/findAllNotices',
page: {
curr: 1
},
@ -316,136 +269,79 @@
return false;
} else if (obj.event === 'delete') {
var req = {};
req.id = data.oldId;
$.ajax({
url: "/materialType/findMaterialByMaterialTypeId", // 判断该类型下是否有物品
type: "post",
data: JSON.stringify(req),
dataType: "json",
contentType: "application/json;charset=utf-8",
success: function (data) {
if (data.data) {
layer.msg("该类别下尚有记录无法删除", {
icon: 7,
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function () {
// 执行重加载
table.reload('currentTableId', {
url: '/materialType/materialTypeRecord',
page: {
curr: 1
},
where: {"parentId": parentId}
});
})
} else {
layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) {
$.ajax({
url: '/materialType/materialType_del',
dataType: 'json',
type: 'POST',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(req),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
req.id = data.id;
layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) {
$.ajax({
url: '/notice/notice_del',
dataType: 'json',
type: 'POST',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(req),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
} else {
obj.del();
layer.msg("删除成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
});
}
}
})
});
} else {
obj.del();
layer.msg("删除成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
});
}
}
}
})
} else if (obj.event == 'subclass') {
var index = layer.open({
title: '子类型',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/findMaterialTypeByParentId?parentId=' + data.oldId
});
$(window).on("resize", function () {
layer.full(index);
})
});
return false;
} else if (obj.event == 'realDelete') { // 彻底删除
} else if (obj.event === 'realDelete') { // 彻底删除
var req = {};
req.id = data.oldId;
$.ajax({
url: "/materialType/findMaterialByMaterialTypeId", // 判断该类型下是否有物品
type: "post",
dataType: "json",
data: JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success: function (data) {
if (data.data) {
layer.msg("该类别下尚有记录无法删除", {
icon: 7,
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function () {
// 执行重加载
table.reload('currentTableId', {
url: '/materialType/materialTypeRecord',
page: {
curr: 1
},
where: {"parentId": parentId}
});
})
} else {
layer.confirm('该操作会造成不可逆后果,是否继续?', {
btn: ['继续', '取消'] //按钮
}, function () {
$.ajax({
url: '/materialType/realDeleteMaterialType',
dataType: 'json',
type: 'POST',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(req),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
req.id = data.id;
} else {
obj.del();
layer.msg("删除成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
});
}
}
})
}, function () {
// 执行重加载
table.reload('currentTableId', {
url: '/materialType/materialTypeRecord',
page: {
curr: 1
},
where: {"parentId": parentId}
});
});
layer.confirm('该操作会造成不可逆后果,是否继续?', {
btn: ['继续', '取消'] //按钮
}, function () {
layer.confirm('确定删除?', {
btn: ['确定', '取消'] //按钮
}, function () {
$.ajax({
url: '/notice/realDeleteNotice',
dataType: 'json',
type: 'POST',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(req),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
} else {
obj.del();
layer.msg("删除成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
});
}
}
})
})
}, function () {
// 执行重加载
table.reload('currentTableId', {
url: '/notice/findAllNotices',
page: {
curr: 1
}
}
})
});
});
}
});
//监听状态操作
@ -455,98 +351,43 @@
req["state"] = 1;
}
req["id"] = this.value;
var hasMaterial = false;
if (req["state"] === undefined) { //如果禁用
$.ajax({
url: "/materialType/findMaterialByMaterialTypeId", // 判断该类型下是否有物品
type: "post",
dataType: "json",
data: JSON.stringify(req),
url: "/notice/EditNoticeState",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(req),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
hasMaterial = data.data;
if (hasMaterial) { // 如果有物品
layer.confirm('该种类下还有物品,确定禁用?', {
btn: ['禁用', '取消'] //按钮
}, function () {
$.ajax({
url: "/materialType/EditMaterialTypeState", // 禁用
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(req),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
} else {
layer.msg("修改成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function () {
table.reload('currentTableId', {
url: '/materialType/materialTypeRecord',
page: {
curr: 1
},
where: {"parentId": parentId}
});
})
}
}
})
} else {
layer.msg("修改成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function () {
// 执行表格重加载
table.reload('currentTableId', {
url: '/materialType/materialTypeRecord',
url: '/notice/findAllNotices',
page: {
curr: 1
},
where: {"parentId": parentId}
});
});
} else { // 如果没有物品
$.ajax({
url: "/materialType/EditMaterialTypeState",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(req),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
} else {
layer.msg("修改成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function () {
// 执行表格重加载
table.reload('currentTableId', {
url: '/materialType/materialTypeRecord',
page: {
curr: 1
},
where: {"parentId": parentId}
});
})
}
}
})
}
}
})
} else { // 如果启用
$.ajax({
url: "/materialType/EditMaterialTypeState",
url: "/notice/EditNoticeState",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
@ -566,11 +407,10 @@
}, function () {
// 执行表格重加载
table.reload('currentTableId', {
url: '/materialType/materialTypeRecord',
url: '/notice/findAllNotices',
page: {
curr: 1
},
where: {"parentId": parentId}
});
})
}

314
src/main/resources/templates/pages/notice/notice-out_user.html

@ -0,0 +1,314 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>layui</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="/static/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/public.css" media="all">
</head>
<body>
<div class="layuimini-container">
<div class="layuimini-main">
<fieldset class="table-search-fieldset">
<legend>搜索信息</legend>
<div style="margin: 10px 10px 10px 10px">
<form class="layui-form layui-form-pane" action="">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">标题</label>
<div class="layui-input-inline">
<input type="text" class="layui-input" id="title" name="title" autocomplete="off"/>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">发布日期</label>
<div class="layui-input-inline">
<input type="text" name="startDate" id="startDate" placeholder="请选择开始日期"
autocomplete="off" class="layui-input">
</div>
<div class="layui-form-mid">-</div>
<div class="layui-input-inline">
<input type="text" name="endDate" id="endDate" placeholder="请选择开始日期" autocomplete="off"
class="layui-input">
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">状态</label>
<div class="layui-input-inline">
<select name="state">
<option value="">请选择状态</option>
<option value="1">启用</option>
<option value="2">禁用</option>
</select>
</div>
</div>
<div class="layui-inline">
<button type="submit" class="layui-btn layui-btn-primary" lay-submit
lay-filter="data-search-btn"><i class="layui-icon"></i> 搜 索
</button>
</div>
</div>
</form>
</div>
</fieldset>
<input id="userId" th:value="${userId}" style="display: none">
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<script type="text/html" id="currentTableBar">
<a class="layui-btn layui-btn-xs data-count-edit" lay-event="detail">详情</a>
</script>
</div>
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
layui.use(['form', 'table', 'laydate'], function () {
var $ = layui.jquery,
form = layui.form,
laydate = layui.laydate,
table = layui.table;
laydate.render({
elem: '#startDate'
});
laydate.render({
elem: '#endDate'
});
table.render({
elem: "#currentTableId",
url: '/notice/findAllNotices',
parseData: function (res) { //res 即为原始返回的数据
return {
"status": res.status, //解析接口状态
"message": res.statusInfo.message, //解析提示文本
"count": res.count, //解析数据长度
"data": res.data //解析数据列表
};
},
request: {
pageName: 'page', //页码的参数名称,默认:page
limitName: 'size' //每页数据量的参数名,默认:limit
},
where: {
type: "0",
},
response: {
statusName: 'status' //规定数据状态的字段名称,默认:code
, statusCode: 200 //规定成功的状态码,默认:0
, msgName: 'message' //规定状态信息的字段名称,默认:msg
, countName: 'count' //规定数据总数的字段名称,默认:count
, dataName: 'data' //规定数据列表的字段名称,默认:data
},
toolbar: '#toolbarDemo',
defaultToolbar: ['filter', 'exports', 'print'],
cols: [
[
{type: "checkbox", width: 50},
{field: 'title', width: 120, title: '标题'},
{field: 'userName', width: 200, title: '发布人'},
{field: 'time', width: 200, title: '发布时间'},
{title: '操作', minWidth: 200, toolbar: '#currentTableBar', align: "center"}
]
],
limits: [10, 15, 20, 25, 50, 100],
limit: 10,
page: true,
skin: 'line',
done: function (res, curr, count) {
let userId = $("#userId").val();
$.each(res['data'], function (i, j) {
// 获取操作项目
let handleItem = $("[lay-id='currentTableId'] tr:eq(" + (i+1) + ")").children()[4];
let delItem = '<a class="layui-btn layui-btn-xs layui-btn-danger data-count-delete" lay-event="delete">删除</a>';
let userIdI = j["userId"];
if(userIdI === Number(userId)){
$(handleItem.childNodes[0]).append(delItem)
}
})
}
});
// 监听搜索操作
form.on('submit(data-search-btn)', function (data) {
var req = {};
data = data.field;
req.type = 1;
if (data.title !== '') {
req.title = data.title;
}
if (data.state !== '') {
req.state = data.state;
}
if (data.startDate !== '') {
req.startDate = data.startDate;
}
if (data.endDate !== '') {
req.endDate = data.endDate;
}
//执行搜索重载
table.reload('currentTableId', {
url: '/notice/findAllNotices',
page: {
curr: 1
},
where: req
}, 'data');
return false;
});
//监听表格复选框选择
table.on('checkbox(currentTableFilter)', function (obj) {
console.log(obj)
});
table.on('tool(currentTableFilter)', function (obj) {
let data = obj.data;
if (obj.event === 'detail') {
req = {};
var index = layer.open({
title: '公告详情',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/noticeView?id=' + data.id,
end: function () {
//执行搜索重载
table.reload('currentTableId', {
url: '/notice/findAllNotices',
page: {
curr: 1
},
where: req
}, 'data');
}
});
$(window).on("resize", function () {
layer.full(index);
});
return false;
} else if (obj.event === 'delete') {
var req = {};
req.id = data.id;
layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) {
$.ajax({
url: '/notice/notice_del',
dataType: 'json',
type: 'POST',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(req),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
} else {
obj.del();
layer.msg("删除成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
});
}
}
})
});
}
});
//监听状态操作
form.on('switch(changeState)', function (obj) {
var req = new Map;
if (obj.elem.checked) {
req["state"] = 1;
}
req["id"] = this.value;
if (req["state"] === undefined) { //如果禁用
$.ajax({
url: "/notice/EditNoticeState",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(req),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
} else {
layer.msg("修改成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function () {
// 执行表格重加载
table.reload('currentTableId', {
url: '/notice/findAllNotices',
page: {
curr: 1
},
});
})
}
}
})
} else { // 如果启用
$.ajax({
url: "/notice/EditNoticeState",
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(req),
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (data) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
} else {
layer.msg("修改成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function () {
// 执行表格重加载
table.reload('currentTableId', {
url: '/notice/findAllNotices',
page: {
curr: 1
},
});
})
}
}
})
}
});
});
</script>
</body>
</html>

31
src/main/resources/templates/pages/notice/selectDepartment.html

@ -1,14 +1,18 @@
<!DOCTYPE html>
<html lang="en">
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta charset="utf-8">
<title>layui</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="/static/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/public.css" media="all">
</head>
<body>
<div id="test2" class="demo-tree"></div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
var data;
layui.use(['layer', 'tree'], function () {
var $ = layui.jquery,
tree = layui.tree;
@ -17,16 +21,14 @@
elem: '#test2'
, data: []
, click: function (obj) {
if (obj.data.children !== undefined) {
return false
var data = obj.data;
$("#viewRange", window.parent.document).val(data.title);
var id = $("#viewRangeId", window.parent.document).val();
if (id === undefined || id === null || id === "") {
$("#viewRangeId", window.parent.document).val(data.id + ",");
} else {
$("#viewRangeId", window.parent.document).val(id + data.id + ",");
}
var windowParent = $("#"+clickObj,window.parent.document)[0];
var children = windowParent.childNodes[5];
var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
materialName.value = obj.data.title;
materialId.value = obj.data.id;
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}
@ -34,8 +36,7 @@
$.ajax({
url: "/company/departmentTreeMenus",
data: JSON.stringify(req),
type: 'post',
type: 'get',
dataType: 'json',
contentType: "application/json;charset=utf-8",
beforeSend:function () {

44
src/main/resources/templates/pages/other/welcome.html

@ -295,7 +295,10 @@
<div class="layui-col-md4">
<div class="layui-card">
<div class="layui-card-header"><i class="fa fa-bullhorn icon icon-tip"></i>系统公告</div>
<div class="layui-card-header">
<i class="fa fa-bullhorn icon icon-tip"></i>系统公告
<i class="fa fa-chevron-right" aria-hidden="true" style="right: 7px;top: 13px;position: absolute;" onclick="showAllNotice()"></i>
</div>
<div class="layui-card-body layui-text">
<div class="layuimini-notice" th:each="notice,iterStat:${notices}">
<input id="noticeId" style="display:none;" th:value="${notice.getId()}"/>
@ -309,7 +312,10 @@
</div>
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header"><i class="fa fa fa-map-o icon"></i>我的任务</div>
<div class="layui-card-header">
<i class="fa fa fa-map-o icon"></i>我的任务
<i class="fa fa-chevron-right" aria-hidden="true" style="right: 7px;top: 13px;position: absolute;" onclick="showAllMyTask()"></i>
</div>
<div class="layui-card-body layui-text">
<div class="layuimini-myTask" th:each="myTask,iterStat:${myTaskList}">
<div class="layuimini-myTask-type" th:text="${myTask.getType()}"></div>
@ -326,6 +332,13 @@
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="/static/js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script>
function showAllNotice(){
}
function showAllMyTask(){
}
layui.use(['layer', 'miniTab', 'echarts'], function () {
var $ = layui.jquery,
layer = layui.layer,
@ -436,6 +449,33 @@
});
showAllNotice = function () {
var index = layer.open({
title: '所有公告',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/noticeAll',
});
};
showAllMyTask = function() {
layer.open({
type: 2,
title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move : '.layui-layer-title',
fixed:false,
content: '/my_task',
});
}
});
</script>
</body>

246
src/main/resources/templates/pages/other/welcome_mobile.html

@ -10,28 +10,142 @@
<link rel="stylesheet" href="/static/lib/font-awesome-4.7.0/css/font-awesome.min.css" media="all">
<link rel="stylesheet" href="/static/css/public.css" media="all">
<style>
.layui-card {border:1px solid #f2f2f2;border-radius:5px;}
.icon {margin-right:10px;color:#1aa094;}
.icon-cray {color:#ffb800!important;}
.icon-blue {color:#1e9fff!important;}
.icon-tip {color:#ff5722!important;}
.layuimini-qiuck-module {text-align:center;margin-top: 10px}
.layuimini-qiuck-module a i {display:inline-block;width:100%;height:60px;line-height:60px;text-align:center;border-radius:2px;font-size:30px;background-color:#F8F8F8;color:#333;transition:all .3s;-webkit-transition:all .3s;}
.layuimini-qiuck-module a cite {position:relative;top:2px;display:block;color:#666;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:14px;}
.welcome-module {width:100%;height:210px;}
.panel {background-color:#fff;border:1px solid transparent;border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}
.panel-body {padding:10px}
.panel-title {margin-top:0;margin-bottom:0;font-size:12px;color:inherit}
.label {display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em;margin-top: .3em;}
.layui-red {color:red}
.main_btn > p {height:40px;}
.layui-bg-number {background-color:#F8F8F8;}
.layuimini-notice:hover,.layuimini-myTask:hover {background:#f6f6f6;}
.layuimini-notice,.layuimini-myTask {padding:7px 16px;clear:both;font-size:12px !important;cursor:pointer;position:relative;transition:background 0.2s ease-in-out;}
.layuimini-notice-title,.layuimini-notice-label,.layuimini-myTask-type {
padding-right: 70px !important;text-overflow:ellipsis!important;overflow:hidden!important;white-space:nowrap!important;}
.layuimini-notice-title,.layuimini-myTask-type {line-height:28px;font-size:14px;}
.layuimini-notice-extra,.layuimini-myTask-extra {position:absolute;top:50%;margin-top:-8px;right:16px;display:inline-block;height:16px;color:#999;}
.layui-card {
border: 1px solid #f2f2f2;
border-radius: 5px;
}
.icon {
margin-right: 10px;
color: #1aa094;
}
.icon-cray {
color: #ffb800 !important;
}
.icon-blue {
color: #1e9fff !important;
}
.icon-tip {
color: #ff5722 !important;
}
.layuimini-qiuck-module {
text-align: center;
margin-top: 10px
}
.layuimini-qiuck-module a i {
display: inline-block;
width: 100%;
height: 60px;
line-height: 60px;
text-align: center;
border-radius: 2px;
font-size: 30px;
background-color: #F8F8F8;
color: #333;
transition: all .3s;
-webkit-transition: all .3s;
}
.layuimini-qiuck-module a cite {
position: relative;
top: 2px;
display: block;
color: #666;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
font-size: 14px;
}
.welcome-module {
width: 100%;
height: 210px;
}
.panel {
background-color: #fff;
border: 1px solid transparent;
border-radius: 3px;
-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
box-shadow: 0 1px 1px rgba(0, 0, 0, .05)
}
.panel-body {
padding: 10px
}
.panel-title {
margin-top: 0;
margin-bottom: 0;
font-size: 12px;
color: inherit
}
.label {
display: inline;
padding: .2em .6em .3em;
font-size: 75%;
font-weight: 700;
line-height: 1;
color: #fff;
text-align: center;
white-space: nowrap;
vertical-align: baseline;
border-radius: .25em;
margin-top: .3em;
}
.layui-red {
color: red
}
.main_btn > p {
height: 40px;
}
.layui-bg-number {
background-color: #F8F8F8;
}
.layuimini-notice:hover, .layuimini-myTask:hover {
background: #f6f6f6;
}
.layuimini-notice, .layuimini-myTask {
padding: 7px 16px;
clear: both;
font-size: 12px !important;
cursor: pointer;
position: relative;
transition: background 0.2s ease-in-out;
}
.layuimini-notice-title, .layuimini-notice-label, .layuimini-myTask-type {
padding-right: 70px !important;
text-overflow: ellipsis !important;
overflow: hidden !important;
white-space: nowrap !important;
}
.layuimini-notice-title, .layuimini-myTask-type {
line-height: 28px;
font-size: 14px;
}
.layuimini-notice-extra, .layuimini-myTask-extra {
position: absolute;
top: 50%;
margin-top: -8px;
right: 16px;
display: inline-block;
height: 16px;
color: #999;
}
</style>
</head>
<body>
@ -54,7 +168,7 @@
<h5>仓库数量</h5>
</div>
<div class="panel-content">
<h1 class="no-margins" th:text="${depositoryCount}" >4</h1>
<h1 class="no-margins" th:text="${depositoryCount}">4</h1>
<small>当前仓库总记录数</small>
</div>
</div>
@ -68,7 +182,7 @@
<h5>库存金额统计</h5>
</div>
<div class="panel-content">
<h1 class="no-margins" th:text="${allPrice}" >12032</h1>
<h1 class="no-margins" th:text="${allPrice}">12032</h1>
<small>当前库存总数</small>
</div>
</div>
@ -114,49 +228,57 @@
<div class="welcome-module">
<div class="layui-row layui-col-space10 layuimini-qiuck">
<div class="layui-col-xs3 layuimini-qiuck-module">
<a href="javascript:;" layuimini-content-href="/application_in" data-title="入库申请" data-icon="fa fa-window-maximize">
<a href="javascript:;" layuimini-content-href="/application_in"
data-title="入库申请" data-icon="fa fa-window-maximize">
<i class="layui-icon layui-icon-file-b"></i>
<cite>入库申请</cite>
</a>
</div>
<div class="layui-col-xs3 layuimini-qiuck-module">
<a href="javascript:;" layuimini-content-href="/application_out" data-title="出库申请" data-icon="fa fa-gears">
<a href="javascript:;" layuimini-content-href="/application_out"
data-title="出库申请" data-icon="fa fa-gears">
<i class="fa fa-file-text"></i>
<cite>出库申请</cite>
</a>
</div>
<div class="layui-col-xs3 layuimini-qiuck-module">
<a href="javascript:;" layuimini-content-href="/application_transfer" data-title="转移申请" data-icon="fa fa-file-text">
<a href="javascript:;" layuimini-content-href="/application_transfer"
data-title="转移申请" data-icon="fa fa-file-text">
<i class="fa fa-exchange"></i>
<cite>转移申请</cite>
</a>
</div>
<div class="layui-col-xs3 layuimini-qiuck-module">
<a href="javascript:;" layuimini-content-href="/table_in" data-title="入库查询" data-icon="fa fa-dot-circle-o">
<a href="javascript:;" layuimini-content-href="/table_in" data-title="入库查询"
data-icon="fa fa-dot-circle-o">
<i class="fa fa-cubes"></i>
<cite>入库查询</cite>
</a>
</div>
<div class="layui-col-xs3 layuimini-qiuck-module">
<a href="javascript:;" layuimini-content-href="/table_out" data-title="出库查询" data-icon="fa fa-calendar">
<a href="javascript:;" layuimini-content-href="/table_out" data-title="出库查询"
data-icon="fa fa-calendar">
<i class="fa fa-eye"></i>
<cite>出库查询</cite>
</a>
</div>
<div class="layui-col-xs3 layuimini-qiuck-module">
<a href="javascript:;" layuimini-content-href="/table_stock" data-title="库存查询" data-icon="fa fa-hourglass-end">
<a href="javascript:;" layuimini-content-href="/table_stock"
data-title="库存查询" data-icon="fa fa-hourglass-end">
<i class="fa fa-binoculars"></i>
<cite>库存查询</cite>
</a>
</div>
<div class="layui-col-xs3 layuimini-qiuck-module">
<a href="javascript:;" layuimini-content-href="/stockTaking" data-title="库存盘点" data-icon="fa fa-snowflake-o">
<a href="javascript:;" layuimini-content-href="/stockTaking"
data-title="库存盘点" data-icon="fa fa-snowflake-o">
<i class="fa fa-tasks"></i>
<cite>库存盘点</cite>
</a>
</div>
<div class="layui-col-xs3 layuimini-qiuck-module">
<a href="javascript:;" layuimini-content-href="/material_add" data-title="物料创建" data-icon="fa fa-search">
<a href="javascript:;" layuimini-content-href="/material_add"
data-title="物料创建" data-icon="fa fa-search">
<i class="fa fa-plus"></i>
<cite>物料创建</cite>
</a>
@ -172,7 +294,11 @@
<div class="layui-col-md4">
<div class="layui-card">
<div class="layui-card-header"><i class="fa fa-bullhorn icon icon-tip"></i>系统公告</div>
<div class="layui-card-header">
<i class="fa fa-bullhorn icon icon-tip"></i>系统公告
<i class="fa fa-chevron-right" aria-hidden="true"
style="right: 7px;top: 13px;position: absolute;" onclick="showAllNotice()"></i>
</div>
<div class="layui-card-body layui-text">
<div class="layuimini-notice" th:each="notice,iterStat:${notices}">
<input id="noticeId" style="display:none;" th:value="${notice.getId()}"/>
@ -186,7 +312,11 @@
</div>
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-header"><i class="fa fa fa-map-o icon"></i>我的任务</div>
<div class="layui-card-header">
<i class="fa fa fa-map-o icon"></i>我的任务
<i class="fa fa-chevron-right" aria-hidden="true"
style="right: 7px;top: 13px;position: absolute;" onclick="showAllMyTask()"></i>
</div>
<div class="layui-card-body layui-text">
<div class="layuimini-myTask" th:each="myTask,iterStat:${myTaskList}">
<div class="layuimini-myTask-type" th:text="${myTask.getType()}"></div>
@ -204,7 +334,16 @@
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="/static/js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script>
layui.use(['layer', 'miniTab','echarts'], function () {
function showAllNotice() {
}
function showAllMyTask() {
}
layui.use(['layer', 'miniTab', 'echarts'], function () {
var $ = layui.jquery,
layer = layui.layer,
miniTab = layui.miniTab,
@ -227,14 +366,14 @@
parent.layer.open({
type: 1,
title: '系统公告'+'<span style="float: right;right: 1px;font-size: 12px;color: #b1b3b9;margin-top: 1px">'+noticeTime+'</span>',
title: '系统公告' + '<span style="float: right;right: 1px;font-size: 12px;color: #b1b3b9;margin-top: 1px">' + noticeTime + '</span>',
area: '300px;',
shade: 0.8,
id: 'layuimini-notice',
btn: ['查看', '取消'],
btnAlign: 'c',
moveType: 1,
content:html,
content: html,
success: function (layero) {
var btn = layero.find('.layui-layer-btn');
btn.find('.layui-layer-btn0').click(function () {
@ -262,7 +401,7 @@
$('body').on('click', '.layuimini-myTask', function () {
var id = $(this).children('.layuimini-myTask-id').text();
var type = $(this).children('.layuimini-myTask-type').text();
if(type === '出库请求'){
if (type === '出库请求') {
var index = layer.open({
title: '请求详情',
type: 2,
@ -279,7 +418,7 @@
$(window).on("resize", function () {
layer.full(index);
});
}else if(type === "库存盘点请求"){
} else if (type === "库存盘点请求") {
var index = layer.open({
title: '请求详情',
type: 2,
@ -295,7 +434,7 @@
$(window).on("resize", function () {
layer.full(index);
});
}else if(type === "物料出库请求"){
} else if (type === "物料出库请求") {
var index = layer.open({
title: '请求详情',
type: 2,
@ -316,6 +455,33 @@
});
showAllNotice = function () {
var index = layer.open({
title: '所有公告',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/noticeAll',
});
}
showAllMyTask = function () {
layer.open({
type: 2,
title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: '/my_task',
});
}
});
</script>
</body>

4
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 + ",");
}

178
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<qywxDepartment> qyWxDepartmentList = QyWxConfig.getQyWxDepartmentList("8b283ea8ba44697a18c763443c257db5", 51);
public void Test() {
// 获取所有企业微信的部门列表
List<qywxDepartment> qyWxDepartmentListAll = QyWxConfig.getQyWxDepartmentList("8b283ea8ba44697a18c763443c257db5", 51);
// 设置用于开启线程的部门列表
List<qywxDepartment> qyWxDepartmentList = new ArrayList<>();
// 定义分页数量
double size = 20.0;
// 定义线程数
int threadSize = (int) Math.ceil(qyWxDepartmentListAll.size() / size);
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
// 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
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<Object> 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<Object> future = completionService.submit(taskTest);
futureList.add(future);
}
// 树结构结果集
List<Object> 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<Integer> qyWxDepartmentIdList = QyWxConfig.getQyWxDepartmentIdList("8b283ea8ba44697a18c763443c257db5", 51);
System.out.println(qyWxDepartmentIdList);
}
/**
* 用于构造树形模板
*
* @param qywxDepartment
* @param children
* @return
*/
public Map<String, Object> InitTree(qywxDepartment qywxDepartment, List<Object> children) {
if (qywxDepartment != null) {
Map<String, Object> 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<Object>{
class InitDepartmentTree implements Callable<Object> {
/**
* 用于开启线程的部门列表
@ -45,56 +129,70 @@ public class TestQyWxAdministration {
*/
List<qywxDepartment> qywxDepartmentListAll;
public InitDepartmentTree(List<qywxDepartment> qywxDepartmentList, List<qywxDepartment> qywxDepartmentListAll) {
this.qywxDepartmentList = qywxDepartmentList;
this.qywxDepartmentListAll = qywxDepartmentListAll;
}
@Override
public Object call() throws Exception {
ExecutorService exs = Executors.newFixedThreadPool(qywxDepartmentList.size());
// 结果集
List<Object> list = new ArrayList<>();
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
// 开启对应数目的线程
for (int i = 0; i < qywxDepartmentList.size(); i++) {
qywxDepartment qywxDepartment = qywxDepartmentList.get(i);
// 开启线程
Future<Object> 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<Object>{
/**
* 构造树结构对象
*/
class buildDepartmentTree implements Callable<Object> {
// 所有部门列表
List<qywxDepartment> qywxDepartmentList;
// 当前部门
qywxDepartment qywxDepartment;
public buildDepartmentTree(List<qywxDepartment> qywxDepartmentList, qywxDepartment qywxDepartment) {
this.qywxDepartmentList = qywxDepartmentList;
this.qywxDepartment = qywxDepartment;
}
@Override
public Object call() throws Exception {
List<Object> result = new ArrayList<>();
List<Object> children = new ArrayList<>();
for (qywxDepartment department : qywxDepartmentList) {
// 如果该部门是当前部门的子部门
if(Integer.compare(qywxDepartment.getId(),department.getParentid()) == 0){
Map<String, Object> stringObjectMap = InitTree(qywxDepartment, null);
result.add(stringObjectMap);
if (Integer.compare(qywxDepartment.getId(), department.getParentid()) == 0) {
Map<String, Object> stringObjectMap = InitTree(department, null);
children.add(stringObjectMap);
}
}
return result;
return InitTree(qywxDepartment, children);
}
}
/**
* 用于构造树形模板
* @param qywxDepartment
* @param children
* @return
*/
public Map<String,Object> InitTree(qywxDepartment qywxDepartment, List<Object> children){
if (qywxDepartment != null) {
Map<String, Object> map = new HashMap<>();
map.put("title", qywxDepartment.getName());
map.put("id", qywxDepartment.getId());
map.put("children", children);
return map;
} else {
return null;
}
}
}

Loading…
Cancel
Save