Browse Source

修改部分根据名称查询物料功能

lwx_dev
erdanergou 3 years ago
parent
commit
8a201e7ef0
  1. 10
      src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java
  2. 42
      src/main/java/com/dreamchaser/depository_manage/config/QyWxConfig.java
  3. 18
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TextCardContent.java
  4. 8
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TextTemplateCard.java
  5. 28
      src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java
  6. 3
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  7. 71
      src/main/java/com/dreamchaser/depository_manage/controller/NoticeController.java
  8. 31
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  9. 90
      src/main/java/com/dreamchaser/depository_manage/entity/Notice.java
  10. 2
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  11. 38
      src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.java
  12. 56
      src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.xml
  13. 45
      src/main/java/com/dreamchaser/depository_manage/pojo/NoticeP.java
  14. 7
      src/main/java/com/dreamchaser/depository_manage/service/CompanyService.java
  15. 12
      src/main/java/com/dreamchaser/depository_manage/service/NoticeService.java
  16. 11
      src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java
  17. 78
      src/main/java/com/dreamchaser/depository_manage/service/impl/NoticeServiceImpl.java
  18. 59
      src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java
  19. 2
      src/main/resources/static/css/public.css
  20. 3
      src/main/resources/templates/pages/materialBarCode/materialBarCode_out.html
  21. 126
      src/main/resources/templates/pages/notice/notice-add.html
  22. 10
      src/main/resources/templates/pages/notice/notice-edit.html
  23. 586
      src/main/resources/templates/pages/notice/notice-out.html
  24. 72
      src/main/resources/templates/pages/notice/notice-view.html
  25. 55
      src/main/resources/templates/pages/notice/selectDepartment.html
  26. 202
      src/main/resources/templates/pages/other/welcome.html
  27. 24
      src/main/resources/templates/pages/other/welcome_mobile.html
  28. 15
      src/test/java/com/dreamchaser/depository_manage/TestOther.java
  29. 100
      src/test/java/com/dreamchaser/depository_manage/TestQyWxAdministration.java

10
src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java

@ -23,6 +23,8 @@ import java.util.Map;
@Data @Data
public class PortConfig { public class PortConfig {
// 部署数据库 depository NhE47edekBHxhjYk // 部署数据库 depository NhE47edekBHxhjYk
// 接口地址 // 接口地址
public static String external_url = "http://172.20.2.87:39168"; public static String external_url = "http://172.20.2.87:39168";
// public static String external_url = "http://127.0.0.1:39168"; // public static String external_url = "http://127.0.0.1:39168";
@ -56,14 +58,14 @@ public class PortConfig {
list = new JSONArray(); list = new JSONArray();
} }
List<Post> userPostList = new ArrayList<>(); List<Post> userPostList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) { for (Object o : list) {
Post userPost = JSONObject.toJavaObject((JSONObject) list.get(i), Post.class); Post userPost = JSONObject.toJavaObject((JSONObject) o, Post.class);
userPostList.add(userPost); userPostList.add(userPost);
} }
List<UserByPort> userByPortList = new ArrayList<>(); List<UserByPort> userByPortList = new ArrayList<>();
for (int i = 0; i < userPostList.size(); i++) { for (Post value : userPostList) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
Post userPost = userPostList.get(i); Post userPost = value;
param.put("position", userPost.getId()); param.put("position", userPost.getId());
List<UserByPort> userByPorts = LinkInterfaceUtil.FindUserByMap(param, userToken); List<UserByPort> userByPorts = LinkInterfaceUtil.FindUserByMap(param, userToken);
userByPortList.addAll(userByPorts); userByPortList.addAll(userByPorts);

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

@ -62,20 +62,13 @@ public class QyWxConfig {
// 用于jsapi的url // 用于jsapi的url
public static String jsApiUrl = "https://jy.hxgk.group/"; public static String jsApiUrl = "https://jy.hxgk.group/";
@Autowired
public void setRedisTemplate(RedisTemplate<String,String> redisTemplate){
QyWxConfig.redisTemplate = redisTemplate;
}
// 用于获取企业微信对应token // 用于获取企业微信对应token
public static String GetQYWXToken(String UserAgent) { public static String GetQYWXToken(String UserAgent) {
// 获取redis中当前用户的user-agent // 获取redis中当前用户的user-agent
String token_redis = redisTemplate.opsForValue().get("wms_access_token_" + UserAgent); String token_redis = redisTemplate.opsForValue().get("wms_access_token_" + UserAgent);
if (token_redis != null) { if (token_redis != null) {
return token_redis; return token_redis;
} } else {
else {
String url = String.format(" https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s", QyWxConfig.corpid, QyWxConfig.secret); String url = String.format(" https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s", QyWxConfig.corpid, QyWxConfig.secret);
String get = HttpUtils.doGet(url); String get = HttpUtils.doGet(url);
JSONObject jsonObject = JSONObject.parseObject(get); JSONObject jsonObject = JSONObject.parseObject(get);
@ -116,7 +109,6 @@ public class QyWxConfig {
} }
} }
// 根据获取到的用户code以及token获取用户id // 根据获取到的用户code以及token获取用户id
public static JSONObject GetQYWXUserId(String UserAgent) { public static JSONObject GetQYWXUserId(String UserAgent) {
String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=%s&code=%s", QyWxConfig.GetQYWXToken(UserAgent), QyWxConfig.code); String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=%s&code=%s", QyWxConfig.GetQYWXToken(UserAgent), QyWxConfig.code);
@ -187,6 +179,7 @@ public class QyWxConfig {
/** /**
* 获取当前标签成员 * 获取当前标签成员
*
* @param tempToken * @param tempToken
* @param TAGID * @param TAGID
* @return * @return
@ -209,9 +202,9 @@ public class QyWxConfig {
return userList; return userList;
} }
/** /**
* 用于获取当前企业微信部门详情 * 用于获取当前企业微信部门详情
*
* @param UserAgent * @param UserAgent
* @param id * @param id
* @return * @return
@ -230,7 +223,36 @@ public class QyWxConfig {
} }
} }
/**
* 用于获取企业微信部门列表
*
* @param UserAgent
* @return
*/
public static List<qywxDepartment> getQyWxDepartmentList(String UserAgent, Integer id) {
String tempToken = GetQYWXToken(UserAgent);
String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=%s&id=%s", tempToken, id);
String get = HttpUtils.doGet(url);
JSONObject jsonObject = JSONObject.parseObject(get);
Integer errcode = jsonObject.getInteger("errcode");
if (Integer.compare(errcode, 0) == 0) {
List<qywxDepartment> qywxDepartmentList = new ArrayList<>();
JSONArray department = jsonObject.getJSONArray("department");
for (int i = 0; i < department.size(); i++) {
qywxDepartment qywxDepartment = JSONObject.toJavaObject(department.getJSONObject(i), qywxDepartment.class);
qywxDepartmentList.add(qywxDepartment);
}
return qywxDepartmentList;
} else {
throw new MyException("获取部门列表失败");
}
}
@Autowired
public void setRedisTemplate(RedisTemplate<String, String> redisTemplate) {
QyWxConfig.redisTemplate = redisTemplate;
}
} }

18
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TextCardContent.java

@ -0,0 +1,18 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
/**
* 文本卡片信息中的消息类
*/
@Data
public class TextCardContent {
// 标题,不超过128个字节,超过会自动截断(支持id转译)
private String title;
// 描述,不超过512个字节,超过会自动截断(支持id转译)
private String description;
// 点击后跳转的链接。最长2048字节,请确保包含了协议头(http/https)
private String url;
//按钮文字。 默认为“详情”, 不超过4个文字,超过自动截断。
private String btntxt;
}

8
src/main/java/com/dreamchaser/depository_manage/config/QyWx_template_card/TextTemplateCard.java

@ -0,0 +1,8 @@
package com.dreamchaser.depository_manage.config.QyWx_template_card;
import lombok.Data;
@Data
public class TextTemplateCard extends BaseMessage {
private TextCardContent textcard;
}

28
src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java

@ -39,6 +39,7 @@ public class CompanyController {
/** /**
* 查询组织架构 * 查询组织架构
*
* @param map 查询条件 * @param map 查询条件
* @param request 请求体 * @param request 请求体
* @return * @return
@ -85,6 +86,7 @@ public class CompanyController {
/** /**
* 根据条件查询公司 * 根据条件查询公司
*
* @param map 查询条件 * @param map 查询条件
* @return 返回结果 * @return 返回结果
*/ */
@ -126,6 +128,7 @@ public class CompanyController {
/** /**
* 根据条件查询岗位 * 根据条件查询岗位
*
* @param map 查询条件 * @param map 查询条件
* @return * @return
*/ */
@ -178,6 +181,7 @@ public class CompanyController {
/** /**
* 给岗位设置权限 * 给岗位设置权限
*
* @param map 条件 * @param map 条件
* @return 设置结果 * @return 设置结果
*/ */
@ -233,6 +237,7 @@ public class CompanyController {
/** /**
* 修改岗位的权限 * 修改岗位的权限
*
* @param map 修改条件 * @param map 修改条件
* @return * @return
*/ */
@ -257,8 +262,10 @@ public class CompanyController {
} }
return CrudUtil.postHandle(success, roleAndDepositoryByCondition.size()); return CrudUtil.postHandle(success, roleAndDepositoryByCondition.size());
} }
/** /**
* 根据主键删除权限类型 * 根据主键删除权限类型
*
* @param map 删除条件 * @param map 删除条件
* @return * @return
*/ */
@ -292,14 +299,14 @@ public class CompanyController {
} }
} }
return CrudUtil.postHandle(success, total); return CrudUtil.postHandle(success, total);
} } else {
else{
throw new MyException("所需请求参数缺失!"); throw new MyException("所需请求参数缺失!");
} }
} }
/** /**
* 查询岗位对应的权限 * 查询岗位对应的权限
*
* @param postId 要查询的岗位id * @param postId 要查询的岗位id
* @return * @return
*/ */
@ -330,6 +337,7 @@ public class CompanyController {
/** /**
* 用于进行选择负责人 * 用于进行选择负责人
*
* @param request * @param request
* @return * @return
*/ */
@ -340,4 +348,20 @@ public class CompanyController {
list = companyService.InitTreeMenus(userToken); list = companyService.InitTreeMenus(userToken);
return new RestResponse(list); return new RestResponse(list);
} }
/**
* 用于获取企业微信通讯录下的结构
*
* @param request
* @return
*/
@GetMapping("/departmentTreeMenus")
public RestResponse departmentTreeMenus(HttpServletRequest request) {
List<Object> list = new ArrayList<>();
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
list = companyService.InitTreeMenus(userToken);
return new RestResponse(list);
}
} }

3
src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java

@ -1486,7 +1486,8 @@ public class MaterialController {
// 用于添加条形码与物料编码的对应关系 // 用于添加条形码与物料编码的对应关系
@PostMapping("/addBarCodeByMaterial") @PostMapping("/addBarCodeByMaterial")
public RestResponse addBarCodeByMaterial(@RequestBody Map<String, Object> map, HttpServletRequest request) { public RestResponse addBarCodeByMaterial(@RequestBody Map<String, Object> map, HttpServletRequest request) {
return CrudUtil.postHandle(materialService.addBarCodeByMaterial(map), 1); Integer integer = materialService.addBarCodeByMaterial(map);
return CrudUtil.postHandle(integer, 1);
} }
// 删除条形码与物料编码的对应关系 // 删除条形码与物料编码的对应关系

71
src/main/java/com/dreamchaser/depository_manage/controller/NoticeController.java

@ -1,27 +1,86 @@
package com.dreamchaser.depository_manage.controller; package com.dreamchaser.depository_manage.controller;
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.UserByPort;
import com.dreamchaser.depository_manage.entity.qywxDepartment;
import com.dreamchaser.depository_manage.pojo.NoticeP;
import com.dreamchaser.depository_manage.pojo.RestResponse; import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.service.NoticeService; import com.dreamchaser.depository_manage.service.NoticeService;
import com.dreamchaser.depository_manage.service.impl.QyWxOperationService;
import com.dreamchaser.depository_manage.utils.CrudUtil; import com.dreamchaser.depository_manage.utils.CrudUtil;
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil;
import com.dreamchaser.depository_manage.utils.Md5;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
* @author Dreamchaser * @author Dreamchaser
*/ */
@RestController @RestController
@RequestMapping("/notice")
public class NoticeController { public class NoticeController {
@Autowired @Autowired
private NoticeService noticeService; NoticeService noticeService;
@Autowired
QyWxOperationService qyWxOperationService;
@PostMapping("/notice") @PostMapping("/notice")
public RestResponse addNotice(@RequestBody Map<String,Object> map){ public RestResponse addNotice(@RequestBody Map<String,Object> map, HttpServletRequest request){
return CrudUtil.postHandle(noticeService.addNotice(map),1); UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
map.put("userId",userByPort.getId());
map.put("state",1);
// 获取插入结果
Integer integer = noticeService.addNotice(map);
if(Integer.compare(integer,1) == 0){
// 如果成功插入
String header = request.getHeader("user-agent");
String crypt = Md5.crypt(header);
// 开启线程推送应用消息
/*new Thread(new Runnable() {
@Override
public void run() {
qyWxOperationService.sendNoticeForAllUser(ObjectFormatUtil.toInteger(map.get("id")),crypt);
}
}).start();*/
} }
@GetMapping("/notices") return CrudUtil.postHandle(integer,1);
public RestResponse findNotices(@RequestParam Map<String,Object> map){
return new RestResponse(noticeService.findNoticeByCondition(map));
} }
@GetMapping("/findAllNotices")
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);
return new RestResponse(noticeByCondition);
}
@PostMapping("/notice_del")
public RestResponse DelNotice(@RequestBody Map<String,Object> map,HttpServletRequest request){
return null;
}
} }

31
src/main/java/com/dreamchaser/depository_manage/controller/PageController.java

@ -797,9 +797,17 @@ public class PageController {
@GetMapping("/notice_edit") @GetMapping("/notice_edit")
public String notice_edit() { public String notice_edit() {
return "pages/other/notice-edit"; return "pages/notice/notice-edit";
} }
@GetMapping("/notice_add")
public String notice_add() {
return "pages/notice/notice-add";
}
@GetMapping("/notice_out")
public String notice_out() {return "pages/notice/notice-out";}
@GetMapping("/chart_in") @GetMapping("/chart_in")
public ModelAndView chart_in() { public ModelAndView chart_in() {
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
@ -2378,4 +2386,25 @@ public class PageController {
} }
/**
* 用于查看当前公告信息
* @param id 待查看公告id
* @return
*/
@GetMapping("/noticeView")
public ModelAndView noticeView(Integer id){
ModelAndView mv = new ModelAndView();
mv.setViewName("pages/notice/notice-view");
NoticeP noticeById = noticeService.findNoticeById(id);
mv.addObject("record",noticeById);
return mv;
}
@GetMapping("/selectDepartment")
public String selectDepartment(){
return "pages/notice/selectDepartment";
}
} }

90
src/main/java/com/dreamchaser/depository_manage/entity/Notice.java

@ -1,5 +1,7 @@
package com.dreamchaser.depository_manage.entity; package com.dreamchaser.depository_manage.entity;
import lombok.Data;
import java.util.Date; import java.util.Date;
/** /**
@ -8,6 +10,7 @@ import java.util.Date;
* @author bianj * @author bianj
* @version 1.0.0 2021-06-14 * @version 1.0.0 2021-06-14
*/ */
@Data
public class Notice implements java.io.Serializable { public class Notice implements java.io.Serializable {
/** 版本号 */ /** 版本号 */
private static final long serialVersionUID = -2744388334561767209L; private static final long serialVersionUID = -2744388334561767209L;
@ -23,94 +26,17 @@ public class Notice implements java.io.Serializable {
private String content; private String content;
/** 发布时间 */ /** 发布时间 */
private String time; private Long time;
/** /**
* 获取公告主键 * 发布人员
*
* @return 公告主键
*/ */
public Integer getId() { private Integer userId;
return this.id;
}
/** /**
* 设置公告主键 * 公告状态
*
* @param id
* 公告主键
*/ */
public void setId(Integer id) { private Integer state;
this.id = id;
}
/**
* 获取公告标题
*
* @return 公告标题
*/
public String getTitle() {
return this.title;
}
/**
* 设置公告标题
*
* @param title
* 公告标题
*/
public void setTitle(String title) {
this.title = title;
}
/**
* 获取公告内容
*
* @return 公告内容
*/
public String getContent() {
return this.content;
}
/**
* 设置公告内容
*
* @param content
* 公告内容
*/
public void setContent(String content) {
this.content = content;
}
/**
* 获取发布时间
*
* @return 发布时间
*/
public String getTime() {
return this.time;
}
/**
* 设置发布时间
*
* @param time
* 发布时间
*/
public void setTime(String time) {
this.time = time;
}
/* This code was generated by TableGo tools, mark 2 end. */
@Override
public String toString() {
return "Notice{" +
"id=" + id +
", title='" + title + '\'' +
", content='" + content + '\'' +
", time='" + time + '\'' +
'}';
}
} }

2
src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml

@ -802,7 +802,7 @@
<insert id="addBarCodeAndMaterialForMoreOne" parameterType="map"> <insert id="addBarCodeAndMaterialForMoreOne" parameterType="map">
insert into qrcodeandmaterial(id,mcode,barCode,1) insert into qrcodeandmaterial(id,mcode,barCode,flag)
values values
<foreach collection="list" index="index" item="item" separator=","> <foreach collection="list" index="index" item="item" separator=",">
(#{id}, (#{id},

38
src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.java

@ -2,6 +2,7 @@ package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.Notice; import com.dreamchaser.depository_manage.entity.Notice;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.aspectj.weaver.ast.Not;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
@ -21,6 +22,20 @@ public interface NoticeMapper {
*/ */
Integer addNotice(Map<String,Object> map); Integer addNotice(Map<String,Object> map);
/**
* 修改公告信息
* @param notice 待修改公告
* @return
*/
Integer updateNotice(Notice notice);
/**
* 批量修改公告信息
* @param notices
* @return
*/
Integer updateNotices(List<Notice> notices);
/** /**
* 根据条件查询符合条件的公告信息 * 根据条件查询符合条件的公告信息
* @param map 参数map * @param map 参数map
@ -28,4 +43,27 @@ public interface NoticeMapper {
*/ */
List<Notice> findNoticeByCondition(Map<String,Object> map); List<Notice> findNoticeByCondition(Map<String,Object> map);
/**
* 根据主键删除公告
* @param id 待删除公告id
* @return
*/
Integer deleteNoticeById(Integer id);
/**
* 根据主键批量删除公告
* @param list 待删除公告id列表
* @return
*/
Integer deleteNoticeByIds(List<Integer> list);
/**
* 根据主键查询对应公告
* @param id 待查询主键id
* @return
*/
Notice findNoticeById(Integer id);
} }

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

@ -10,11 +10,13 @@
<result column="title" property="title" jdbcType="VARCHAR" /> <result column="title" property="title" jdbcType="VARCHAR" />
<result column="content" property="content" jdbcType="VARCHAR" /> <result column="content" property="content" jdbcType="VARCHAR" />
<result column="time" property="time" jdbcType="INTEGER" /> <result column="time" property="time" jdbcType="INTEGER" />
<result column="state" property="state" jdbcType="INTEGER" />
<result column="userId" property="userId" jdbcType="INTEGER" />
</resultMap> </resultMap>
<!-- 表查询字段 --> <!-- 表查询字段 -->
<sql id="allColumns"> <sql id="allColumns">
n.id, n.title, n.content, n.time n.id, n.title, n.content, n.time,n.state,n.userId
</sql> </sql>
<!-- 查询所有 --> <!-- 查询所有 -->
@ -35,8 +37,17 @@
<if test="content != null and content != ''"> <if test="content != null and content != ''">
AND n.content LIKE CONCAT('%', #{content}, '%') AND n.content LIKE CONCAT('%', #{content}, '%')
</if> </if>
<if test="time != null"> <if test="startDate != null and startDate != ''">
AND n.time = #{time} AND n.time &gt;= #{startDate}
</if>
<if test="endDate != null and endDate != ''">
AND n.time &lt;= #{endDate}
</if>
<if test="userId != null and userId != ''">
and n.userId = #{userId}
</if>
<if test="state != null and state != ''">
and n.state = #{state}
</if> </if>
order by n.time DESC order by n.time DESC
<if test="begin != null and size != null"> <if test="begin != null and size != null">
@ -44,6 +55,12 @@
</if> </if>
</select> </select>
<select id="findNoticeById" resultMap="noticeMap" parameterType="int">
SELECT
<include refid="allColumns" />
FROM notice n WHERE n.id = #{id}
</select>
<!-- 根据主键查询信息 --> <!-- 根据主键查询信息 -->
<select id="findNoticeByIds" resultMap="noticeMap" parameterType="list"> <select id="findNoticeByIds" resultMap="noticeMap" parameterType="list">
SELECT SELECT
@ -55,46 +72,56 @@
</select> </select>
<!-- 新增信息 --> <!-- 新增信息 -->
<insert id="addNotice"> <insert id="addNotice" useGeneratedKeys="true" keyProperty="id">
INSERT INTO notice ( INSERT INTO notice (
title, content, time title, content, time,userId,state
) VALUES ( ) VALUES (
#{title}, #{title},
#{content}, #{content},
#{time} #{time},
#{userId},
#{state}
) )
</insert> </insert>
<!-- 批量新增信息 --> <!-- 批量新增信息 -->
<insert id="addNotices" parameterType="list"> <insert id="addNotices" parameterType="list">
INSERT INTO notice ( INSERT INTO notice (
id, title, content, time id, title, content, time,userId,state
) VALUES ) VALUES
<foreach collection="list" index="index" item="item" separator=","> <foreach collection="list" index="index" item="item" separator=",">
( (
#{item.id}, #{item.id},
#{item.title}, #{item.title},
#{item.content}, #{item.content},
#{item.time} #{item.time},
#{item.userId},
#{item.state},
) )
</foreach> </foreach>
</insert> </insert>
<!-- 修改信息--> <!-- 修改信息-->
<update id="updateNotice"> <update id="updateNotice">
UPDATE notice update notice
<set> <set>
<if test="title != null"> <if test="title != null and title !=''">
title = #{title}, title = #{title},
</if> </if>
<if test="content != null"> <if test="content != null">
content = #{content}, content = #{content},
</if> </if>
<if test="time != null"> <if test="time != null and time != ''">
time = #{time} time = #{time},
</if>
<if test="state != null and state != ''">
state = #{state}
</if> </if>
</set> </set>
WHERE id = #{id} where id = #{id}
</update> </update>
<!-- 批量修改信息 --> <!-- 批量修改信息 -->
@ -111,6 +138,9 @@
<if test="item.time != null"> <if test="item.time != null">
time = #{item.time} time = #{item.time}
</if> </if>
<if test="item.state != null and item.state != ''">
state = #{item.state}
</if>
</set> </set>
WHERE id = #{item.id} WHERE id = #{item.id}
</foreach> </foreach>

45
src/main/java/com/dreamchaser/depository_manage/pojo/NoticeP.java

@ -0,0 +1,45 @@
package com.dreamchaser.depository_manage.pojo;
import com.dreamchaser.depository_manage.entity.Notice;
import com.dreamchaser.depository_manage.utils.DateUtil;
import lombok.Data;
@Data
public class NoticeP {
/** 公告主键 */
private Integer id;
/** 公告标题 */
private String title;
/** 公告内容 */
private String content;
/** 发布时间 */
private String time;
/**
* 发布人员
*/
private Integer userId;
/**
* 公告状态
*/
private Integer state;
/**
* 发布人员名称
*/
private String userName;
public NoticeP(Notice notice) {
this.id = notice.getId();
this.time = DateUtil.TimeStampToDateTime(notice.getTime());
this.title = notice.getTitle();
this.content = notice.getContent();
this.userId = notice.getUserId();
this.state = notice.getState();
}
}

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

@ -1,6 +1,7 @@
package com.dreamchaser.depository_manage.service; package com.dreamchaser.depository_manage.service;
import com.dreamchaser.depository_manage.entity.Company; import com.dreamchaser.depository_manage.entity.Company;
import com.dreamchaser.depository_manage.entity.User;
import com.dreamchaser.depository_manage.entity.UserByPort; import com.dreamchaser.depository_manage.entity.UserByPort;
import java.util.List; import java.util.List;
@ -93,4 +94,10 @@ public interface CompanyService {
* @return * @return
*/ */
List<Object> InitTreeMenus(UserByPort userToken); List<Object> InitTreeMenus(UserByPort userToken);
/**
* 用于构造企业微信行政组织结构
*/
List<Object> BuildQyWxAdministrationTreeMenus(UserByPort userByPort);
} }

12
src/main/java/com/dreamchaser/depository_manage/service/NoticeService.java

@ -1,6 +1,7 @@
package com.dreamchaser.depository_manage.service; package com.dreamchaser.depository_manage.service;
import com.dreamchaser.depository_manage.entity.Notice; import com.dreamchaser.depository_manage.entity.Notice;
import com.dreamchaser.depository_manage.pojo.NoticeP;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -21,5 +22,14 @@ public interface NoticeService {
* @param map 参数map * @param map 参数map
* @return 符合条件的公告列表 * @return 符合条件的公告列表
*/ */
List<Notice> findNoticeByCondition(Map<String,Object> map); List<NoticeP> findNoticeByCondition(Map<String,Object> map);
/**
* 根据主键id获取公告信息
* @param id 待查询id
* @return
*/
NoticeP findNoticeById(Integer id);
} }

11
src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java

@ -185,6 +185,17 @@ public class CompanyServiceImpl implements CompanyService {
return list; return list;
} }
/**
* 用于构造企业微信行政组织结构
*/
@Override
public List<Object> BuildQyWxAdministrationTreeMenus(UserByPort userByPort) {
return null;
}
/** /**
* 用于构造人员树 * 用于构造人员树
*/ */

78
src/main/java/com/dreamchaser/depository_manage/service/impl/NoticeServiceImpl.java

@ -1,17 +1,18 @@
package com.dreamchaser.depository_manage.service.impl; package com.dreamchaser.depository_manage.service.impl;
import com.dreamchaser.depository_manage.entity.Notice; import com.dreamchaser.depository_manage.entity.Notice;
import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.mapper.NoticeMapper; import com.dreamchaser.depository_manage.mapper.NoticeMapper;
import com.dreamchaser.depository_manage.pojo.NoticeP;
import com.dreamchaser.depository_manage.service.NoticeService; import com.dreamchaser.depository_manage.service.NoticeService;
import com.dreamchaser.depository_manage.utils.DateUtil; import com.dreamchaser.depository_manage.utils.DateUtil;
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Calendar; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.Map;
/** /**
* @author Dreamchaser * @author Dreamchaser
@ -20,20 +21,75 @@ import java.util.Map;
public class NoticeServiceImpl implements NoticeService { public class NoticeServiceImpl implements NoticeService {
@Autowired @Autowired
NoticeMapper noticeMapper; NoticeMapper noticeMapper;
/**
* 增加一条公告信息
*
* @param map 参数map
* @return 受影响的行数
*/
@Override @Override
public Integer addNotice(Map<String, Object> map) { public Integer addNotice(Map<String, Object> map) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 设置当前时间
Calendar instance = Calendar.getInstance(); map.put("time", System.currentTimeMillis());
map.put("time",DateUtil.DateTimeToTimeStamp(simpleDateFormat.format(instance.getTime())));
return noticeMapper.addNotice(map); return noticeMapper.addNotice(map);
} }
/**
* 根据条件查询符合条件的公告信息
*
* @param map 参数map
* @return 符合条件的公告列表
*/
@Override @Override
public List<Notice> findNoticeByCondition(Map<String, Object> map) { public List<NoticeP> findNoticeByCondition(Map<String, Object> map) {
Integer size = 10,page=1;
if (map.containsKey("size")){
size= ObjectFormatUtil.toInteger(map.get("size"));
map.put("size", size);
}
if (map.containsKey("page")){
page=ObjectFormatUtil.toInteger(map.get("page"));
map.put("begin",(page-1)*size);
}
if (map.containsKey("startDate")) {
String startDate = (String) map.get("startDate");
map.put("startDate", DateUtil.DateTimeByMonthToTimeStamp(startDate));
}
if (map.containsKey("endDate")) {
String endDate = (String) map.get("endDate");
map.put("endDate", DateUtil.DateTimeByMonthToTimeStamp(endDate));
}
List<Notice> notice = noticeMapper.findNoticeByCondition(map); List<Notice> notice = noticeMapper.findNoticeByCondition(map);
for (int i = 0; i < notice.size(); i++) { List<NoticeP> result = new ArrayList<>();
notice.get(i).setTime(DateUtil.TimeStampToDateTime(Long.parseLong(notice.get(i).getTime()))); for (Notice value : notice) {
UserByPort user = LinkInterfaceUtil.FindUserById(value.getUserId(), null);
NoticeP np = new NoticeP(value);
np.setUserName(user.getName());
result.add(np);
}
return result;
} }
return notice;
/**
* 根据主键id获取公告信息
*
* @param id 待查询id
* @return
*/
@Override
public NoticeP findNoticeById(Integer id) {
Notice noticeById = noticeMapper.findNoticeById(id);
NoticeP noticeP = new NoticeP(noticeById);
// 获取发起人
UserByPort user = LinkInterfaceUtil.FindUserById(noticeById.getUserId(), null);
noticeP.setUserName(user.getName());
return noticeP;
} }
} }

59
src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java

@ -11,6 +11,7 @@ import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.*; import com.dreamchaser.depository_manage.mapper.*;
import com.dreamchaser.depository_manage.pojo.ApplicationOutRecordP; import com.dreamchaser.depository_manage.pojo.ApplicationOutRecordP;
import com.dreamchaser.depository_manage.pojo.StockTakingChildP; import com.dreamchaser.depository_manage.pojo.StockTakingChildP;
import com.dreamchaser.depository_manage.service.NoticeService;
import com.dreamchaser.depository_manage.utils.DateUtil; import com.dreamchaser.depository_manage.utils.DateUtil;
import com.dreamchaser.depository_manage.utils.HttpUtils; import com.dreamchaser.depository_manage.utils.HttpUtils;
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil; import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil;
@ -51,6 +52,10 @@ public class QyWxOperationService {
MaterialTypeMapper materialTypeMapper; MaterialTypeMapper materialTypeMapper;
@Autowired
NoticeMapper noticeMapper;
/** /**
* 用于向企业微信发送出库消息 * 用于向企业微信发送出库消息
* *
@ -2526,6 +2531,60 @@ public class QyWxOperationService {
} }
/**
* 用于向企业中所有用户发送公告信息
* @param nid 公告id
* @param userAgent md5加密后user-agent
* @return
*/
public JSONObject sendNoticeForAllUser(Integer nid,String userAgent){
// 获取当前要发生的公告信息
Notice noticeById = noticeMapper.findNoticeById(nid);
TextTemplateCard textTemplateCard = new TextTemplateCard();
// 设置消息接收者为所有人
textTemplateCard.setTouser("@all");
// 设置消息类型,此时固定为:textcard
textTemplateCard.setMsgtype("textcard");
// 设置企业应用的id
textTemplateCard.setAgentid(QyWxConfig.AgentId);
// 定义卡片内容
TextCardContent textCardContent = new TextCardContent();
// 设置标题
textCardContent.setTitle(noticeById.getTitle());
String noticeContent = "<div class='gray'>"+DateUtil.TimeStampToDateTime(noticeById.getTime())+
"</div><div class='normal'>"+noticeById.getContent()+"</div><div class='highlight'>"+
LinkInterfaceUtil.FindUserById(noticeById.getUserId(),null).getName()+"</div>";
// 设置内容
textCardContent.setDescription(noticeContent);
// 设置点击后跳转的链接
textCardContent.setUrl("https://jy.hxgk.group/noticeView?id="+noticeById.getId());
// 设置跳转按钮文本
textCardContent.setBtntxt("详情");
// 设置内容
textTemplateCard.setTextcard(textCardContent);
String jsonString = JSONObject.toJSONString(textTemplateCard);
jsonString = String.format(jsonString);
// 3.获取请求的url
// 获取access_token:根据企业id和应用密钥获取access_token,并拼接请求url
String accessToken = QyWxConfig.GetQYWXToken(userAgent);
String url = QyWxConfig.sendMessage_url.replace("ACCESS_TOKEN", accessToken);
// 4.调用接口,发送消息
String s1 = HttpUtils.doPost(url, jsonString);
// 将返回结果转为json对象
JSONObject jsonObject = JSON.parseObject(s1);
// 返回
return jsonObject;
}
/** /**
* 用于当在系统内进行审批后向其他所有用户发送消息 * 用于当在系统内进行审批后向其他所有用户发送消息
* *

2
src/main/resources/static/css/public.css

@ -25,7 +25,7 @@ body {
} }
.layuimini-form > .layui-form-item > .layui-form-label { .layuimini-form > .layui-form-item > .layui-form-label {
width: 120px !important; width: 120px ;
} }
.layuimini-form > .layui-form-item > .layui-input-block { .layuimini-form > .layui-form-item > .layui-input-block {

3
src/main/resources/templates/pages/materialBarCode/materialBarCode_out.html

@ -110,6 +110,7 @@
var req = {}; var req = {};
req.mid = mid; req.mid = mid;
req.barCodeList = barCode; req.barCodeList = barCode;
if(barCode.length > 0){
$.ajax({ $.ajax({
url: "/material/addBarCodeByMaterial", url: "/material/addBarCodeByMaterial",
type: "post", type: "post",
@ -126,6 +127,8 @@
}); });
} }
}) })
}
}; };

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

@ -0,0 +1,126 @@
<!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">
<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">
<fieldset class="layui-elem-field">
<legend style="font-size: 30px;padding-top: 20px;text-align: center">公告发布</legend>
<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">
<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" lay-verify="required"/>
<i class="layui-icon layui-icon-search"
style="display: inline;right: 0;position: absolute;"
id="selectDepartment"></i>
</div>
</div>
</div>
</div>
<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>
</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>
</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>
</div>
</div>
</div>
</div>
</fieldset>
</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>
function selectDepartment(){
}
layui.use(['form', 'layer', 'laydate', 'inputTag'], function () {
var form = layui.form,
layer = layui.layer,
inputTag = layui.inputTag,
laydate = layui.laydate,
$ = layui.$;
//日期
laydate.render({
elem: '#date'
});
//监听提交
form.on('submit(noticeBtn)', function (data) {
$.ajax({
url: "/notice/notice",
data: JSON.stringify(data.field),
type: "post",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (data) {
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
} else {
layer.msg("公告发布成功", {
icon: 6,//成功的表情
time: 1000 //1秒关闭(如果不配置,默认是3秒)
}, function () {
window.location = "/notice_add"
});
}
}
});
return false;
});
selectDepartment = function () {
}
});
</script>
</body>
</html>

10
src/main/resources/templates/pages/other/notice-edit.html → src/main/resources/templates/pages/notice/notice-edit.html

@ -11,12 +11,13 @@
</head> </head>
<body> <body>
<div class="layui-container"> <div class="layuimini-container">
<div class="layuimini-main">
<div class="layui-main layui-card" style="width: 100%;border-radius: 10px;height: 50%"> <div class="layui-main layui-card" style="width: 100%;border-radius: 10px;height: 50%">
<fieldset class="layui-elem-field"> <fieldset class="layui-elem-field">
<legend style="font-size: 30px;padding-top: 20px;text-align: center">公告发布</legend> <legend style="font-size: 30px;padding-top: 20px;text-align: center">公告发布</legend>
<div class="layui-field-box"> <div class="layui-field-box">
<div class="layui-form layuimini-form" style="margin: 20px;margin-top: 30px"> <div class="layui-form" style="margin-top: 30px">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">公告标题:</label> <label class="layui-form-label">公告标题:</label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -39,6 +40,7 @@
</div> </div>
</fieldset> </fieldset>
</div>
</div> </div>
</div> </div>
@ -59,7 +61,7 @@
//监听提交 //监听提交
form.on('submit(noticeBtn)', function (data) { form.on('submit(noticeBtn)', function (data) {
$.ajax({ $.ajax({
url: "/notice", url: "/notice/notice",
data: JSON.stringify(data.field), data: JSON.stringify(data.field),
type: "post", type: "post",
dataType: 'json', dataType: 'json',
@ -72,7 +74,7 @@
icon: 6,//成功的表情 icon: 6,//成功的表情
time: 1000 //1秒关闭(如果不配置,默认是3秒) time: 1000 //1秒关闭(如果不配置,默认是3秒)
},function(){ },function(){
window.location="/notice_edit" window.location="/notice_add"
}); });
} }
} }

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

@ -0,0 +1,586 @@
<!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>
<!-- 状态展示-->
<script type="text/html" id="switchTpl">
<input type="checkbox" name="state" value="{{d.oldId}}" lay-skin="switch" lay-text="启用|禁用"
lay-filter="changeState" {{ d.state== 1 ? 'checked' : '' }} >
</script>
<script type="text/html" id="toolbarDemo">
<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>
<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>
<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>
</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 () {
var $ = layui.jquery,
form = layui.form,
laydate = layui.laydate,
upload = layui.upload,
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: '状态', width: 100, templet: '#switchTpl', align: "center"},
{title: '操作', minWidth: 200, toolbar: '#currentTableBar', align: "center"}
]
],
limits: [10, 15, 20, 25, 50, 100],
limit: 10,
page: true,
skin: 'line',
done: function () {
}
});
// 监听搜索操作
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;
});
/**
* toolbar监听事件
*/
table.on('toolbar(currentTableFilter)', function (obj) {
if (obj.event === 'add') { // 监听添加操作
var index = layer.open({
title: '发布公告',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/notice_add',
});
$(window).on("resize", function () {
layer.full(index);
});
} else if (obj.event === 'delete') { // 监听删除操作
var checkStatus = table.checkStatus('currentTableId')
, data = checkStatus.data;
var req = {};
req.ids = [];
for (i = 0, len = data.length; i < len; i++) {
req.ids[i] = data[i].oldId;
}
if (req.ids.length > 0) {
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 {
layer.msg("删除成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
});
//执行搜索重载
table.reload('currentTableId', {
url: '/materialType/materialTypeRecord',
page: {
curr: 1
}
}, 'data');
return false;
}
}
})
})
} else {
layer.msg("未选中记录,请确认!");
return false;
}
}
});
//用于导入数据
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)
});
table.on('tool(currentTableFilter)', function (obj) {
let data = obj.data;
if (obj.event === 'detail') {
req = {};
req.parentId = parentId;
var index = layer.open({
title: '物料种类详情',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/materialType_detail?id=' + data.oldId,
end: function () {
//执行搜索重载
table.reload('currentTableId', {
url: '/materialType/materialTypeRecord',
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.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);//失败的表情
} 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') { // 彻底删除
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);//失败的表情
} else {
obj.del();
layer.msg("删除成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
});
}
}
})
}, function () {
// 执行重加载
table.reload('currentTableId', {
url: '/materialType/materialTypeRecord',
page: {
curr: 1
},
where: {"parentId": parentId}
});
});
}
}
})
}
});
//监听状态操作
form.on('switch(changeState)', function (obj) {
var req = new Map;
if (obj.elem.checked) {
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),
contentType: "application/json;charset=utf-8",
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);//失败的表情
} else {
layer.msg("修改成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function () {
table.reload('currentTableId', {
url: '/materialType/materialTypeRecord',
page: {
curr: 1
},
where: {"parentId": parentId}
});
})
}
}
})
}, function () {
table.reload('currentTableId', {
url: '/materialType/materialTypeRecord',
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",
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}
});
})
}
}
})
}
});
});
</script>
</body>
</html>

72
src/main/resources/templates/pages/notice/notice-view.html

@ -0,0 +1,72 @@
<!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="layui-elem-field" >
<legend style="font-size: 30px;padding-top: 20px;text-align: center"
th:text="${record.getTitle()}"></legend>
<div class="layui-fluid">
<div class="layui-card-body" style="padding: 0">
<form 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="请输入公告标题..." readonly class="layui-input"
th:value="${record.getUserName()}"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">发布时间:</label>
<div class="layui-input-block">
<input name="title" type="text" placeholder="请输入公告标题..." readonly class="layui-input"
th:value="${record.getTime()}"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">公告内容:</label>
<div class="layui-input-block">
<textarea name="content" readonly style="height: 30em" placeholder="请填写公告内容..."
class="layui-textarea" lay-verify="required"
th:text="${record.getContent()}"></textarea>
</div>
</div>
</form>
</div>
</div>
</fieldset>
</div>
</div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
layui.use(['form', 'layer', 'laydate'], function () {
var form = layui.form,
layer = layui.layer,
laydate = layui.laydate,
$ = layui.$;
//日期
laydate.render({
elem: '#date'
});
//监听提交
});
</script>
</body>
</html>

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

@ -0,0 +1,55 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</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;
test = tree.render({
elem: '#test2'
, data: []
, click: function (obj) {
if (obj.data.children !== undefined) {
return false
}
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);
}
});
$.ajax({
url: "/company/departmentTreeMenus",
data: JSON.stringify(req),
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
beforeSend:function () {
this.layerIndex = layer.load(0, { shade: [0.5, '#393D49'] });
},
success: function (d) {
layer.close(this.layerIndex);
var data2 = d.data;
test.reload({
data: data2
});
}
});
})
</script>
</body>
</html>

202
src/main/resources/templates/pages/other/welcome.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/lib/font-awesome-4.7.0/css/font-awesome.min.css" media="all">
<link rel="stylesheet" href="/static/css/public.css" media="all"> <link rel="stylesheet" href="/static/css/public.css" media="all">
<style> <style>
.layui-card {border:1px solid #f2f2f2;border-radius:5px;} .layui-card {
.icon {margin-right:10px;color:#1aa094;} border: 1px solid #f2f2f2;
.icon-cray {color:#ffb800!important;} border-radius: 5px;
.icon-blue {color:#1e9fff!important;} }
.icon-tip {color:#ff5722!important;}
.layuimini-qiuck-module {text-align:center;margin-top: 10px} .icon {
.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;} margin-right: 10px;
.layuimini-qiuck-module a cite {position:relative;top:2px;display:block;color:#666;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:14px;} color: #1aa094;
.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} .icon-cray {
.panel-title {margin-top:0;margin-bottom:0;font-size:12px;color:inherit} color: #ffb800 !important;
.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;} .icon-blue {
.layui-bg-number {background-color:#F8F8F8;} color: #1e9fff !important;
.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;}
.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 { .layuimini-notice-title, .layuimini-notice-label, .layuimini-myTask-type {
padding-right: 70px !important;text-overflow:ellipsis!important;overflow:hidden!important;white-space:nowrap!important;} padding-right: 70px !important;
.layuimini-notice-title,.layuimini-myTask-type {line-height:28px;font-size:14px;} text-overflow: ellipsis !important;
.layuimini-notice-extra,.layuimini-myTask-extra {position:absolute;top:50%;margin-top:-8px;right:16px;display:inline-block;height:16px;color:#999;} 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> </style>
</head> </head>
<body> <body>
@ -114,49 +228,57 @@
<div class="welcome-module"> <div class="welcome-module">
<div class="layui-row layui-col-space10 layuimini-qiuck"> <div class="layui-row layui-col-space10 layuimini-qiuck">
<div class="layui-col-xs3 layuimini-qiuck-module"> <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> <i class="layui-icon layui-icon-file-b"></i>
<cite>入库申请</cite> <cite>入库申请</cite>
</a> </a>
</div> </div>
<div class="layui-col-xs3 layuimini-qiuck-module"> <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> <i class="fa fa-file-text"></i>
<cite>出库申请</cite> <cite>出库申请</cite>
</a> </a>
</div> </div>
<div class="layui-col-xs3 layuimini-qiuck-module"> <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> <i class="fa fa-exchange"></i>
<cite>转移申请</cite> <cite>转移申请</cite>
</a> </a>
</div> </div>
<div class="layui-col-xs3 layuimini-qiuck-module"> <div class="layui-col-xs3 layuimini-qiuck-module">
<a href="javascript:;" layuimini-content-href="/chart_in_back" data-title="入库可视化" data-icon="fa fa-dot-circle-o"> <a href="javascript:;" layuimini-content-href="/chart_in_back"
data-title="入库可视化" data-icon="fa fa-dot-circle-o">
<i class="fa fa-bar-chart"></i> <i class="fa fa-bar-chart"></i>
<cite>入库可视化</cite> <cite>入库可视化</cite>
</a> </a>
</div> </div>
<div class="layui-col-xs3 layuimini-qiuck-module"> <div class="layui-col-xs3 layuimini-qiuck-module">
<a href="javascript:;" layuimini-content-href="/chart_out_back" data-title="出库可视化" data-icon="fa fa-calendar"> <a href="javascript:;" layuimini-content-href="/chart_out_back"
data-title="出库可视化" data-icon="fa fa-calendar">
<i class="fa fa-pie-chart"></i> <i class="fa fa-pie-chart"></i>
<cite>出库可视化</cite> <cite>出库可视化</cite>
</a> </a>
</div> </div>
<div class="layui-col-xs3 layuimini-qiuck-module"> <div class="layui-col-xs3 layuimini-qiuck-module">
<a href="javascript:;" layuimini-content-href="/chart_stock_back" data-title="库存可视化" data-icon="fa fa-hourglass-end"> <a href="javascript:;" layuimini-content-href="/chart_stock_back"
data-title="库存可视化" data-icon="fa fa-hourglass-end">
<i class="fa fa-area-chart"></i> <i class="fa fa-area-chart"></i>
<cite>库存可视化</cite> <cite>库存可视化</cite>
</a> </a>
</div> </div>
<div class="layui-col-xs3 layuimini-qiuck-module"> <div class="layui-col-xs3 layuimini-qiuck-module">
<a href="javascript:;" layuimini-content-href="/my_task" data-title="我的任务" data-icon="fa fa-snowflake-o"> <a href="javascript:;" layuimini-content-href="/my_task" data-title="我的任务"
data-icon="fa fa-snowflake-o">
<i class="fa fa-tasks"></i> <i class="fa fa-tasks"></i>
<cite>我的任务</cite> <cite>我的任务</cite>
</a> </a>
</div> </div>
<div class="layui-col-xs3 layuimini-qiuck-module"> <div class="layui-col-xs3 layuimini-qiuck-module">
<a href="javascript:;" layuimini-content-href="/my_apply" data-title="我的申请" data-icon="fa fa-search"> <a href="javascript:;" layuimini-content-href="/my_apply" data-title="我的申请"
data-icon="fa fa-search">
<i class="fa fa-paper-plane"></i> <i class="fa fa-paper-plane"></i>
<cite>我的申请</cite> <cite>我的申请</cite>
</a> </a>
@ -176,6 +298,7 @@
<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>系统公告</div>
<div class="layui-card-body layui-text"> <div class="layui-card-body layui-text">
<div class="layuimini-notice" th:each="notice,iterStat:${notices}"> <div class="layuimini-notice" th:each="notice,iterStat:${notices}">
<input id="noticeId" style="display:none;" th:value="${notice.getId()}"/>
<div class="layuimini-notice-title" th:text="${notice.getTitle()}">修改选项卡样式</div> <div class="layuimini-notice-title" th:text="${notice.getTitle()}">修改选项卡样式</div>
<div class="layuimini-notice-extra" th:text="${notice.getTime()}">2019-07-11 23:06</div> <div class="layuimini-notice-extra" th:text="${notice.getTime()}">2019-07-11 23:06</div>
<div class="layuimini-notice-content layui-hide" th:text="${notice.getContent()}"> <div class="layuimini-notice-content layui-hide" th:text="${notice.getContent()}">
@ -217,7 +340,8 @@
$('body').on('click', '.layuimini-notice', function () { $('body').on('click', '.layuimini-notice', function () {
var title = $(this).children('.layuimini-notice-title').text(), var title = $(this).children('.layuimini-notice-title').text(),
noticeTime = $(this).children('.layuimini-notice-extra').text(), noticeTime = $(this).children('.layuimini-notice-extra').text(),
content = $(this).children('.layuimini-notice-content').html(); content = $(this).children('.layuimini-notice-content').html(),
nid = $(this).children("#noticeId").val();
var html = '<div style="padding:15px 20px; text-align:justify; line-height: 22px;border-bottom:1px solid #e2e2e2;background-color: #2f4056;color: #ffffff">\n' + var html = '<div style="padding:15px 20px; text-align:justify; line-height: 22px;border-bottom:1px solid #e2e2e2;background-color: #2f4056;color: #ffffff">\n' +
'<div style="text-align: center;margin-bottom: 20px;font-weight: bold;border-bottom:1px solid #718fb5;padding-bottom: 5px"><h4 class="text-danger">' + title + '</h4></div>\n' + '<div style="text-align: center;margin-bottom: 20px;font-weight: bold;border-bottom:1px solid #718fb5;padding-bottom: 5px"><h4 class="text-danger">' + title + '</h4></div>\n' +
'<div style="font-size: 12px">' + content + '</div>\n' + '<div style="font-size: 12px">' + content + '</div>\n' +
@ -234,10 +358,20 @@
content: html, content: html,
success: function (layero) { success: function (layero) {
var btn = layero.find('.layui-layer-btn'); var btn = layero.find('.layui-layer-btn');
// btn.find('.layui-layer-btn0').attr({ btn.find('.layui-layer-btn0').click(function () {
// href: 'https://gitee.com/zhongshaofa/layuimini', layer.open({
// target: '_blank' type: 2,
// }); title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: "/noticeView?id=" + nid
});
}
);
} }
}); });
}); });

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

@ -175,6 +175,7 @@
<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>系统公告</div>
<div class="layui-card-body layui-text"> <div class="layui-card-body layui-text">
<div class="layuimini-notice" th:each="notice,iterStat:${notices}"> <div class="layuimini-notice" th:each="notice,iterStat:${notices}">
<input id="noticeId" style="display:none;" th:value="${notice.getId()}"/>
<div class="layuimini-notice-title" th:text="${notice.getTitle()}"></div> <div class="layuimini-notice-title" th:text="${notice.getTitle()}"></div>
<div class="layuimini-notice-extra" th:text="${notice.getTime()}"></div> <div class="layuimini-notice-extra" th:text="${notice.getTime()}"></div>
<div class="layuimini-notice-content layui-hide" th:text="${notice.getContent()}"> <div class="layuimini-notice-content layui-hide" th:text="${notice.getContent()}">
@ -217,11 +218,13 @@
$('body').on('click', '.layuimini-notice', function () { $('body').on('click', '.layuimini-notice', function () {
var title = $(this).children('.layuimini-notice-title').text(), var title = $(this).children('.layuimini-notice-title').text(),
noticeTime = $(this).children('.layuimini-notice-extra').text(), noticeTime = $(this).children('.layuimini-notice-extra').text(),
content = $(this).children('.layuimini-notice-content').html(); content = $(this).children('.layuimini-notice-content').html(),
nid = $(this).children("#noticeId").val();
var html = '<div style="padding:15px 20px; text-align:justify; line-height: 22px;border-bottom:1px solid #e2e2e2;background-color: #2f4056;color: #ffffff">\n' + var html = '<div style="padding:15px 20px; text-align:justify; line-height: 22px;border-bottom:1px solid #e2e2e2;background-color: #2f4056;color: #ffffff">\n' +
'<div style="text-align: center;margin-bottom: 20px;font-weight: bold;border-bottom:1px solid #718fb5;padding-bottom: 5px"><h4 class="text-danger">' + title + '</h4></div>\n' + '<div style="text-align: center;margin-bottom: 20px;font-weight: bold;border-bottom:1px solid #718fb5;padding-bottom: 5px"><h4 class="text-danger">' + title + '</h4></div>\n' +
'<div style="font-size: 12px">' + content + '</div>\n' + '<div style="font-size: 12px">' + content + '</div>\n' +
'</div>\n'; '</div>\n';
parent.layer.open({ parent.layer.open({
type: 1, 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>',
@ -234,10 +237,21 @@
content:html, content:html,
success: function (layero) { success: function (layero) {
var btn = layero.find('.layui-layer-btn'); var btn = layero.find('.layui-layer-btn');
// btn.find('.layui-layer-btn0').attr({ btn.find('.layui-layer-btn0').click(function () {
// href: 'https://gitee.com/zhongshaofa/layuimini', layer.open({
// target: '_blank' type: 2,
// }); title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: "/noticeView?id=" + nid
});
}
);
} }
}); });
}); });

15
src/test/java/com/dreamchaser/depository_manage/TestOther.java

@ -1,15 +0,0 @@
package com.dreamchaser.depository_manage;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestOther {
@Test
public void Test(){
System.out.println(Integer.compare(3, 0) == 0 );
}
}

100
src/test/java/com/dreamchaser/depository_manage/TestQyWxAdministration.java

@ -0,0 +1,100 @@
package com.dreamchaser.depository_manage;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.entity.ThreeAboutMan;
import com.dreamchaser.depository_manage.entity.qywxDepartment;
import com.dreamchaser.depository_manage.service.impl.QyWxOperationService;
import org.junit.Test;
import org.junit.runner.RunWith;
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;
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestQyWxAdministration {
@Test
public void Test(){
List<qywxDepartment> qyWxDepartmentList = QyWxConfig.getQyWxDepartmentList("8b283ea8ba44697a18c763443c257db5", 51);
System.out.println(qyWxDepartmentList);
}
/**
* 用于创建部门树结构
*/
class InitDepartmentTree implements Callable<Object>{
/**
* 用于开启线程的部门列表
*/
List<qywxDepartment> qywxDepartmentList;
/**
* 全部部门列表
*/
List<qywxDepartment> qywxDepartmentListAll;
@Override
public Object call() throws Exception {
return null;
}
}
class buildDepartmentTree implements Callable<Object>{
// 所有部门列表
List<qywxDepartment> qywxDepartmentList;
// 当前部门
qywxDepartment qywxDepartment;
@Override
public Object call() throws Exception {
List<Object> result = new ArrayList<>();
for (qywxDepartment department : qywxDepartmentList) {
// 如果该部门是当前部门的子部门
if(Integer.compare(qywxDepartment.getId(),department.getParentid()) == 0){
Map<String, Object> stringObjectMap = InitTree(qywxDepartment, null);
result.add(stringObjectMap);
}
}
return result;
}
}
/**
* 用于构造树形模板
* @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