Browse Source

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

lwx_dev
erdanergou 3 years ago
parent
commit
8a201e7ef0
  1. 16
      src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java
  2. 108
      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. 158
      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. 12
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  11. 38
      src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.java
  12. 58
      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. 35
      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. 220
      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

16
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,16 +58,16 @@ 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);
} }
return userByPortList; return userByPortList;

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

@ -35,7 +35,7 @@ public class QyWxConfig {
public static String code = ""; //userCode public static String code = ""; //userCode
public static String sendMessage_url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN"; public static String sendMessage_url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN";
public static RedisTemplate<String,String> redisTemplate; public static RedisTemplate<String, String> redisTemplate;
// 用于回调配置的token // 用于回调配置的token
public static String sToken = "sM4MFE44fAKdtqvq81HYygqmrdUn"; public static String sToken = "sM4MFE44fAKdtqvq81HYygqmrdUn";
@ -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);
@ -92,21 +85,21 @@ public class QyWxConfig {
Set<String> keys = redisTemplate.keys("wms_access_token_*"); Set<String> keys = redisTemplate.keys("wms_access_token_*");
// 获取遍历器 // 获取遍历器
Iterator<String> iterator = keys.iterator(); Iterator<String> iterator = keys.iterator();
while (iterator.hasNext()){ // 如果有下个,则进行遍历 while (iterator.hasNext()) { // 如果有下个,则进行遍历
// 获取当前key // 获取当前key
String next = iterator.next(); String next = iterator.next();
// 当前key对应的token // 当前key对应的token
String next_access_token = redisTemplate.opsForValue().get(next); String next_access_token = redisTemplate.opsForValue().get(next);
if(accessToken.equals(next_access_token)){ if (accessToken.equals(next_access_token)) {
// 如果当前token相等 // 如果当前token相等
// 获取当前的过期时间 // 获取当前的过期时间
expires_in = redisTemplate.opsForValue().getOperations().getExpire(next,TimeUnit.SECONDS); expires_in = redisTemplate.opsForValue().getOperations().getExpire(next, TimeUnit.SECONDS);
} }
} }
redisTemplate.opsForValue().set("wms_access_token_"+UserAgent,accessToken); redisTemplate.opsForValue().set("wms_access_token_" + UserAgent, accessToken);
redisTemplate.expire("wms_access_token_"+UserAgent,expires_in, TimeUnit.SECONDS); redisTemplate.expire("wms_access_token_" + UserAgent, expires_in, TimeUnit.SECONDS);
return accessToken; return accessToken;
} else { } else {
@ -116,10 +109,9 @@ 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);
String get = HttpUtils.doGet(url); String get = HttpUtils.doGet(url);
JSONObject jsonObject = JSONObject.parseObject(get); JSONObject jsonObject = JSONObject.parseObject(get);
return jsonObject; return jsonObject;
@ -127,51 +119,51 @@ public class QyWxConfig {
} }
// 用于拼接发送链接 // 用于拼接发送链接
public static String getQYWXCodeUrl(){ public static String getQYWXCodeUrl() {
String encode = null; String encode = null;
try { try {
encode = URLEncoder.encode(QyWxConfig.callBackUrl, "utf-8"); encode = URLEncoder.encode(QyWxConfig.callBackUrl, "utf-8");
} catch (UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
e.printStackTrace(); e.printStackTrace();
} }
String url = String.format("https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_base&agentid=%s#wechat_redirect",QyWxConfig.corpid,encode,QyWxConfig.secret); String url = String.format("https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_base&agentid=%s#wechat_redirect", QyWxConfig.corpid, encode, QyWxConfig.secret);
return url; return url;
} }
// 获取企业的jsapi_ticket // 获取企业的jsapi_ticket
public static JSONObject getQyWxJsApiTicketForEnterprise(String UserAgent){ public static JSONObject getQyWxJsApiTicketForEnterprise(String UserAgent) {
// 如果token不为"",则使用token,否则获取新token // 如果token不为"",则使用token,否则获取新token
String tempToken = GetQYWXToken(UserAgent); String tempToken = GetQYWXToken(UserAgent);
String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=%s",tempToken); String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=%s", tempToken);
String get = HttpUtils.doGet(url); String get = HttpUtils.doGet(url);
JSONObject jsonObject = JSONObject.parseObject(get); JSONObject jsonObject = JSONObject.parseObject(get);
return jsonObject; return jsonObject;
} }
// 获取应用的jsapi_ticket // 获取应用的jsapi_ticket
public static JSONObject getQyWxJsApiTicketForApp(String UserAgent){ public static JSONObject getQyWxJsApiTicketForApp(String UserAgent) {
// 如果token不为"",则使用token,否则获取新token // 如果token不为"",则使用token,否则获取新token
String tempToken = GetQYWXToken(UserAgent); String tempToken = GetQYWXToken(UserAgent);
String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/ticket/get?access_token=%s&type=agent_config",tempToken); String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/ticket/get?access_token=%s&type=agent_config", tempToken);
String get = HttpUtils.doGet(url); String get = HttpUtils.doGet(url);
JSONObject jsonObject = JSONObject.parseObject(get); JSONObject jsonObject = JSONObject.parseObject(get);
return jsonObject; return jsonObject;
} }
// 获取企业微信中仓储中心负责人标签的成员的userId // 获取企业微信中仓储中心负责人标签的成员的userId
public static List<String> getQyWxLabelUserList(String UserAgent){ public static List<String> getQyWxLabelUserList(String UserAgent) {
// 获取当前token // 获取当前token
String tempToken = GetQYWXToken(UserAgent); String tempToken = GetQYWXToken(UserAgent);
String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/tag/list?access_token=%s",tempToken); String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/tag/list?access_token=%s", tempToken);
String get = HttpUtils.doGet(url); String get = HttpUtils.doGet(url);
JSONObject jsonObject = JSONObject.parseObject(get); JSONObject jsonObject = JSONObject.parseObject(get);
Integer errcode = jsonObject.getInteger("errcode"); Integer errcode = jsonObject.getInteger("errcode");
List<String> userIdList = new ArrayList<>(); List<String> userIdList = new ArrayList<>();
if(Integer.compare(0,errcode) == 0){ if (Integer.compare(0, errcode) == 0) {
JSONArray taglist = jsonObject.getJSONArray("taglist"); JSONArray taglist = jsonObject.getJSONArray("taglist");
for (Object o : taglist) { for (Object o : taglist) {
qywxLabel qywxLabel = JSONObject.toJavaObject((JSON) o, qywxLabel.class); qywxLabel qywxLabel = JSONObject.toJavaObject((JSON) o, qywxLabel.class);
if(qywxLabel.getTagname().contains("仓储中心负责人")){ if (qywxLabel.getTagname().contains("仓储中心负责人")) {
List<qywxLabelUser> qyWxLabelUserList = getQyWxLabelUserList(tempToken, qywxLabel.getTagid().toString()); List<qywxLabelUser> qyWxLabelUserList = getQyWxLabelUserList(tempToken, qywxLabel.getTagid().toString());
for (qywxLabelUser qywxLabelUser : qyWxLabelUserList) { for (qywxLabelUser qywxLabelUser : qyWxLabelUserList) {
userIdList.add(qywxLabelUser.getUserid()); userIdList.add(qywxLabelUser.getUserid());
@ -179,58 +171,88 @@ public class QyWxConfig {
break; break;
} }
} }
}else{ } else {
throw new MyException("获取标签列表失败"); throw new MyException("获取标签列表失败");
} }
return userIdList; return userIdList;
} }
/** /**
* 获取当前标签成员 * 获取当前标签成员
*
* @param tempToken * @param tempToken
* @param TAGID * @param TAGID
* @return * @return
*/ */
public static List<qywxLabelUser> getQyWxLabelUserList(String tempToken,String TAGID){ public static List<qywxLabelUser> getQyWxLabelUserList(String tempToken, String TAGID) {
String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/tag/get?access_token=%s&tagid=%s",tempToken,TAGID); String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/tag/get?access_token=%s&tagid=%s", tempToken, TAGID);
String get = HttpUtils.doGet(url); String get = HttpUtils.doGet(url);
JSONObject jsonObject = JSONObject.parseObject(get); JSONObject jsonObject = JSONObject.parseObject(get);
Integer errcode = jsonObject.getInteger("errcode"); Integer errcode = jsonObject.getInteger("errcode");
List<qywxLabelUser> userList = new ArrayList<>(); List<qywxLabelUser> userList = new ArrayList<>();
if(Integer.compare(errcode,0) == 0){ if (Integer.compare(errcode, 0) == 0) {
JSONArray userlist = jsonObject.getJSONArray("userlist"); JSONArray userlist = jsonObject.getJSONArray("userlist");
for (Object o : userlist) { for (Object o : userlist) {
qywxLabelUser qywxLabelUser = JSONObject.toJavaObject((JSON) o, qywxLabelUser.class); qywxLabelUser qywxLabelUser = JSONObject.toJavaObject((JSON) o, qywxLabelUser.class);
userList.add(qywxLabelUser); userList.add(qywxLabelUser);
} }
}else{ } else {
throw new MyException("获取标签成员失败"); throw new MyException("获取标签成员失败");
} }
return userList; return userList;
} }
/** /**
* 用于获取当前企业微信部门详情 * 用于获取当前企业微信部门详情
*
* @param UserAgent * @param UserAgent
* @param id * @param id
* @return * @return
*/ */
public static qywxDepartment getQyWxDepartment(String UserAgent,Integer id){ public static qywxDepartment getQyWxDepartment(String UserAgent, Integer id) {
String tempToken = GetQYWXToken(UserAgent); String tempToken = GetQYWXToken(UserAgent);
String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/department/get?access_token=%s&id=%s",tempToken,id); String url = String.format("https://qyapi.weixin.qq.com/cgi-bin/department/get?access_token=%s&id=%s", tempToken, id);
String get = HttpUtils.doGet(url); String get = HttpUtils.doGet(url);
JSONObject jsonObject = JSONObject.parseObject(get); JSONObject jsonObject = JSONObject.parseObject(get);
Integer errcode = jsonObject.getInteger("errcode"); Integer errcode = jsonObject.getInteger("errcode");
if(Integer.compare(errcode,0) == 0){ if (Integer.compare(errcode, 0) == 0) {
qywxDepartment qywxDepartment = JSONObject.toJavaObject(jsonObject.getJSONObject("department"), qywxDepartment.class); qywxDepartment qywxDepartment = JSONObject.toJavaObject(jsonObject.getJSONObject("department"), qywxDepartment.class);
return qywxDepartment; return qywxDepartment;
}else{ } else {
throw new MyException("获取部门信息失败"); throw new MyException("获取部门信息失败");
} }
} }
/**
* 用于获取企业微信部门列表
*
* @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;
}

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

@ -39,156 +39,160 @@ public class CompanyController {
/** /**
* 查询组织架构 * 查询组织架构
* @param map 查询条件 *
* @param map 查询条件
* @param request 请求体 * @param request 请求体
* @return * @return
*/ */
@PostMapping("/allCompanyByParent") @PostMapping("/allCompanyByParent")
public RestResponse findCompanyByNoParent(@RequestParam Map<String,Object>map, HttpServletRequest request){ public RestResponse findCompanyByNoParent(@RequestParam Map<String, Object> map, HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken"); UserByPort userToken = (UserByPort) request.getAttribute("userToken");
String url = PortConfig.external_url +"/org/govlist"; String url = PortConfig.external_url + "/org/govlist";
Object page = map.get("page"); Object page = map.get("page");
Object pagesize = map.get("pagesize"); Object pagesize = map.get("pagesize");
String superior = (String) map.get("superior"); String superior = (String) map.get("superior");
Integer level = ObjectFormatUtil.toInteger(map.get("level")); Integer level = ObjectFormatUtil.toInteger(map.get("level"));
if("".equals(superior)){ if ("".equals(superior)) {
superior = "313"; superior = "313";
} }
map.put("page",ObjectFormatUtil.toInteger(page)); map.put("page", ObjectFormatUtil.toInteger(page));
map.put("pagesize",ObjectFormatUtil.toInteger(pagesize)); map.put("pagesize", ObjectFormatUtil.toInteger(pagesize));
map.put("superior",superior); map.put("superior", superior);
map.put("level",level); map.put("level", level);
map.put("state",1); map.put("state", 1);
String jsonString = JSONObject.toJSONString(map); String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url,paramObject, HTTP.UTF_8,userToken); post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userToken);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
JSONObject jsonObject = JSONObject.parseObject(post); JSONObject jsonObject = JSONObject.parseObject(post);
JSONObject data = (JSONObject) jsonObject.get("data"); JSONObject data = (JSONObject) jsonObject.get("data");
JSONArray list = (JSONArray) data.get("list"); JSONArray list = (JSONArray) data.get("list");
if(list == null){ if (list == null) {
list = new JSONArray(); list = new JSONArray();
} }
Integer total = ObjectFormatUtil.toInteger(data.get("total")); Integer total = ObjectFormatUtil.toInteger(data.get("total"));
List<AdministrationP> administrationPList = new ArrayList<>(); List<AdministrationP> administrationPList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
Administration administration = JSONObject.toJavaObject((JSONObject)list.get(i), Administration.class); Administration administration = JSONObject.toJavaObject((JSONObject) list.get(i), Administration.class);
AdministrationP administrationP = new AdministrationP(administration); AdministrationP administrationP = new AdministrationP(administration);
administrationPList.add(administrationP); administrationPList.add(administrationP);
} }
return new RestResponse(administrationPList,total,200); return new RestResponse(administrationPList, total, 200);
} }
/** /**
* 根据条件查询公司 * 根据条件查询公司
*
* @param map 查询条件 * @param map 查询条件
* @return 返回结果 * @return 返回结果
*/ */
@PostMapping("/companyByCondition") @PostMapping("/companyByCondition")
public RestResponse findcompanyByCondition(@RequestParam Map<String,Object> map,HttpServletRequest request){ public RestResponse findcompanyByCondition(@RequestParam Map<String, Object> map, HttpServletRequest request) {
UserByPort userByPort = (UserByPort)request.getAttribute("userToken"); UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
String url = PortConfig.external_url + "/org/govlist"; String url = PortConfig.external_url + "/org/govlist";
if(map.containsKey("state")){ if (map.containsKey("state")) {
Object state = map.get("state"); Object state = map.get("state");
map.put("state",ObjectFormatUtil.toInteger(state)); map.put("state", ObjectFormatUtil.toInteger(state));
} }
Object page = map.get("page"); Object page = map.get("page");
Object pagesize = map.get("pagesize"); Object pagesize = map.get("pagesize");
map.put("page",ObjectFormatUtil.toInteger(page)); map.put("page", ObjectFormatUtil.toInteger(page));
map.put("pagesize",ObjectFormatUtil.toInteger(pagesize)); map.put("pagesize", ObjectFormatUtil.toInteger(pagesize));
String jsonString = JSONObject.toJSONString(map); String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url,paramObject, HTTP.UTF_8,userByPort); post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userByPort);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
JSONObject jsonObject = JSONObject.parseObject(post); JSONObject jsonObject = JSONObject.parseObject(post);
JSONObject data = (JSONObject) jsonObject.get("data"); JSONObject data = (JSONObject) jsonObject.get("data");
JSONArray list = (JSONArray) data.get("list"); JSONArray list = (JSONArray) data.get("list");
if(list == null){ if (list == null) {
list = new JSONArray(); list = new JSONArray();
} }
Integer total = ObjectFormatUtil.toInteger(data.get("total")); Integer total = ObjectFormatUtil.toInteger(data.get("total"));
List<AdministrationP> administrationPList = new ArrayList<>(); List<AdministrationP> administrationPList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
Administration administration = JSONObject.toJavaObject((JSONObject)list.get(i), Administration.class); Administration administration = JSONObject.toJavaObject((JSONObject) list.get(i), Administration.class);
AdministrationP administrationP = new AdministrationP(administration); AdministrationP administrationP = new AdministrationP(administration);
administrationPList.add(administrationP); administrationPList.add(administrationP);
} }
return new RestResponse(list,total,200); return new RestResponse(list, total, 200);
} }
/** /**
* 根据条件查询岗位 * 根据条件查询岗位
*
* @param map 查询条件 * @param map 查询条件
* @return * @return
*/ */
@PostMapping("/allPostByOrganization") @PostMapping("/allPostByOrganization")
public RestResponse allPostByParent(@RequestParam Map<String,Object> map,HttpServletRequest request) { public RestResponse allPostByParent(@RequestParam Map<String, Object> map, HttpServletRequest request) {
UserByPort userByPort = (UserByPort)request.getAttribute("userToken"); UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
String url = PortConfig.external_url + "/org/positionlist"; String url = PortConfig.external_url + "/org/positionlist";
Object page = map.get("page"); Object page = map.get("page");
Object pagesize = map.get("pagesize"); Object pagesize = map.get("pagesize");
map.put("page",ObjectFormatUtil.toInteger(page)); map.put("page", ObjectFormatUtil.toInteger(page));
map.put("pagesize",ObjectFormatUtil.toInteger(pagesize)); map.put("pagesize", ObjectFormatUtil.toInteger(pagesize));
String jsonString = JSONObject.toJSONString(map); String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
try { try {
post = HttpUtils.send(url,paramObject, HTTP.UTF_8,userByPort); post = HttpUtils.send(url, paramObject, HTTP.UTF_8, userByPort);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
JSONObject jsonObject = JSONObject.parseObject(post); JSONObject jsonObject = JSONObject.parseObject(post);
JSONObject data = (JSONObject) jsonObject.get("data"); JSONObject data = (JSONObject) jsonObject.get("data");
JSONArray list = (JSONArray) data.get("list"); JSONArray list = (JSONArray) data.get("list");
if(list == null){ if (list == null) {
list = new JSONArray(); list = new JSONArray();
} }
Integer total = ObjectFormatUtil.toInteger(data.get("total")); Integer total = ObjectFormatUtil.toInteger(data.get("total"));
List<PostP> postList = new ArrayList<>(); List<PostP> postList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
Post object = JSONObject.toJavaObject((JSONObject)list.get(i), Post.class); Post object = JSONObject.toJavaObject((JSONObject) list.get(i), Post.class);
PostP postP = new PostP(object); PostP postP = new PostP(object);
List<RoleAndDepository> depositoryAndRole = roleService.findDepositoryAndRole(postP.getId()); List<RoleAndDepository> depositoryAndRole = roleService.findDepositoryAndRole(postP.getId());
if(depositoryAndRole != null) { if (depositoryAndRole != null) {
StringBuilder Depository = new StringBuilder(); StringBuilder Depository = new StringBuilder();
for (int j = 0; j < depositoryAndRole.size(); j++) { for (int j = 0; j < depositoryAndRole.size(); j++) {
String depositoryName = depositoryAndRole.get(i).getDepositoryName(); String depositoryName = depositoryAndRole.get(i).getDepositoryName();
if(depositoryName == null){ if (depositoryName == null) {
depositoryName = ""; depositoryName = "";
} }
Depository.append(depositoryName + " "); Depository.append(depositoryName + " ");
} }
postP.setDepositoryName(Depository.toString()); postP.setDepositoryName(Depository.toString());
}else{ } else {
postP.setDepositoryName(""); postP.setDepositoryName("");
} }
postList.add(postP); postList.add(postP);
} }
return new RestResponse(postList,total,200); return new RestResponse(postList, total, 200);
} }
/** /**
* 给岗位设置权限 * 给岗位设置权限
*
* @param map 条件 * @param map 条件
* @return 设置结果 * @return 设置结果
*/ */
@PostMapping("/post_role") @PostMapping("/post_role")
public RestResponse addUser(@RequestBody Map<String, Object> map,HttpServletRequest request) { public RestResponse addUser(@RequestBody Map<String, Object> map, HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken"); UserByPort userToken = (UserByPort) request.getAttribute("userToken");
Map<String,Object> userParam = new HashMap<>(); Map<String, Object> userParam = new HashMap<>();
userParam.put("position",ObjectFormatUtil.toInteger(map.get("userid"))); userParam.put("position", ObjectFormatUtil.toInteger(map.get("userid")));
List<UserByPort> userByPortList = LinkInterfaceUtil.FindUserByMap(userParam,userToken); List<UserByPort> userByPortList = LinkInterfaceUtil.FindUserByMap(userParam, userToken);
Integer success = 0; Integer success = 0;
if(map.containsKey("depositoryId")) { if (map.containsKey("depositoryId")) {
for (int i = 0; i < userByPortList.size(); i++) { for (int i = 0; i < userByPortList.size(); i++) {
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("userId", userByPortList.get(i).getId()); param.put("userId", userByPortList.get(i).getId());
@ -206,7 +210,7 @@ public class CompanyController {
success += roleService.addUserOrPostRoleAndDepository(insert); success += roleService.addUserOrPostRoleAndDepository(insert);
} }
} }
}else{ } else {
List<Depository> depositoryAll = depositoryService.findDepositoryAll(); List<Depository> depositoryAll = depositoryService.findDepositoryAll();
for (int i = 0; i < depositoryAll.size(); i++) { for (int i = 0; i < depositoryAll.size(); i++) {
for (int j = 0; j < userByPortList.size(); j++) { for (int j = 0; j < userByPortList.size(); j++) {
@ -221,50 +225,53 @@ public class CompanyController {
Map<String, Object> insert = new HashMap<>(); Map<String, Object> insert = new HashMap<>();
insert.put("classes", 2); insert.put("classes", 2);
insert.put("authority", 0); insert.put("authority", 0);
insert.put("depositoryId",depositoryAll.get(i).getId()); insert.put("depositoryId", depositoryAll.get(i).getId());
insert.put("userid", userByPortList.get(j).getId()); insert.put("userid", userByPortList.get(j).getId());
success += roleService.addUserOrPostRoleAndDepository(insert); success += roleService.addUserOrPostRoleAndDepository(insert);
} }
} }
} }
} }
return CrudUtil.postHandle(success,success); return CrudUtil.postHandle(success, success);
} }
/** /**
* 修改岗位的权限 * 修改岗位的权限
*
* @param map 修改条件 * @param map 修改条件
* @return * @return
*/ */
@PostMapping("/postRole_edit") @PostMapping("/postRole_edit")
public RestResponse editPostRole(@RequestBody Map<String, Object> map) { public RestResponse editPostRole(@RequestBody Map<String, Object> map) {
Map<String,Object> userParam = new HashMap<>(); Map<String, Object> userParam = new HashMap<>();
Integer oldDepository = ObjectFormatUtil.toInteger(map.get("oldDepository")); Integer oldDepository = ObjectFormatUtil.toInteger(map.get("oldDepository"));
Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId")); Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId"));
userParam.put("position",ObjectFormatUtil.toInteger(map.get("userid"))); userParam.put("position", ObjectFormatUtil.toInteger(map.get("userid")));
Map<String,Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("depositoryId",oldDepository); param.put("depositoryId", oldDepository);
param.put("classes",2); param.put("classes", 2);
List<RoleAndDepository> roleAndDepositoryByCondition = roleService.findRoleAndDepositoryByCondition(param); List<RoleAndDepository> roleAndDepositoryByCondition = roleService.findRoleAndDepositoryByCondition(param);
Integer success = 0; Integer success = 0;
for (int i = 0; i < roleAndDepositoryByCondition.size(); i++) { for (int i = 0; i < roleAndDepositoryByCondition.size(); i++) {
RoleAndDepository roleAndDepository = roleAndDepositoryByCondition.get(i); RoleAndDepository roleAndDepository = roleAndDepositoryByCondition.get(i);
Map<String,Object> update = new HashMap<>(); Map<String, Object> update = new HashMap<>();
update.put("roleId",roleAndDepository.getId()); update.put("roleId", roleAndDepository.getId());
update.put("depositoryId",depositoryId); update.put("depositoryId", depositoryId);
update.put("classes",2); update.put("classes", 2);
success += roleService.UpdateRoleAndDepositoryById(update); success += roleService.UpdateRoleAndDepositoryById(update);
} }
return CrudUtil.postHandle(success,roleAndDepositoryByCondition.size()); return CrudUtil.postHandle(success, roleAndDepositoryByCondition.size());
} }
/** /**
* 根据主键删除权限类型 * 根据主键删除权限类型
*
* @param map 删除条件 * @param map 删除条件
* @return * @return
*/ */
@PostMapping("/postRole_del") @PostMapping("/postRole_del")
public RestResponse deleteRoleAndDepository(@RequestBody Map<String,Object> map){ public RestResponse deleteRoleAndDepository(@RequestBody Map<String, Object> map) {
if(map.containsKey("depositoryId")) { if (map.containsKey("depositoryId")) {
Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId")); Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId"));
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("depositoryId", depositoryId); param.put("depositoryId", depositoryId);
@ -275,9 +282,9 @@ public class CompanyController {
success += roleService.deleteRoleAndDepositoryById(roleAndDepositoryByCondition.get(i).getId()); success += roleService.deleteRoleAndDepositoryById(roleAndDepositoryByCondition.get(i).getId());
} }
return CrudUtil.postHandle(success, roleAndDepositoryByCondition.size()); return CrudUtil.postHandle(success, roleAndDepositoryByCondition.size());
}else if(map.containsKey("depositoryIds")){ } else if (map.containsKey("depositoryIds")) {
Integer num = 0; Integer num = 0;
List<Integer> depositoryIds =(List<Integer>) map.get("depositoryIds"); List<Integer> depositoryIds = (List<Integer>) map.get("depositoryIds");
Integer success = 0; Integer success = 0;
Integer total = 0; Integer total = 0;
for (int i = 0; i < depositoryIds.size(); i++) { for (int i = 0; i < depositoryIds.size(); i++) {
@ -292,29 +299,29 @@ 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
*/ */
@GetMapping("/findPostRole") @GetMapping("/findPostRole")
public RestResponse findPostRole(@RequestParam("postId") Integer postId,HttpServletRequest request){ public RestResponse findPostRole(@RequestParam("postId") Integer postId, HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken"); UserByPort userToken = (UserByPort) request.getAttribute("userToken");
Map<String,Object> userParam = new HashMap<>(); Map<String, Object> userParam = new HashMap<>();
userParam.put("position",postId); userParam.put("position", postId);
List<UserByPort> userByPortList = LinkInterfaceUtil.FindUserByMap(userParam,userToken); List<UserByPort> userByPortList = LinkInterfaceUtil.FindUserByMap(userParam, userToken);
Post postById = LinkInterfaceUtil.findPostById(postId,userToken); Post postById = LinkInterfaceUtil.findPostById(postId, userToken);
List<RoleAndDepository> roleAndDepositoryByCondition = new ArrayList<>(); List<RoleAndDepository> roleAndDepositoryByCondition = new ArrayList<>();
if(userByPortList.size() != 0){ if (userByPortList.size() != 0) {
Map<String,Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("classes",2); param.put("classes", 2);
param.put("userId",userByPortList.get(0).getId()); param.put("userId", userByPortList.get(0).getId());
roleAndDepositoryByCondition = roleService.findRoleAndDepositoryByCondition(param); roleAndDepositoryByCondition = roleService.findRoleAndDepositoryByCondition(param);
} }
List<PostP> postPS = new ArrayList<>(); List<PostP> postPS = new ArrayList<>();
@ -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
NoticeService noticeService;
@Autowired @Autowired
private NoticeService noticeService; 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();*/
}
return CrudUtil.postHandle(integer,1);
} }
@GetMapping("/notices") @GetMapping("/findAllNotices")
public RestResponse findNotices(@RequestParam Map<String,Object> map){ public RestResponse findNotices(@RequestParam Map<String,Object> map,HttpServletRequest request){
return new RestResponse(noticeService.findNoticeByCondition(map)); 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() {
return this.id;
}
/**
* 设置公告主键
*
* @param id
* 公告主键
*/
public void setId(Integer id) {
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() { private Integer userId;
return this.time;
}
/** /**
* 设置发布时间 * 公告状态
*
* @param time
* 发布时间
*/ */
public void setTime(String time) { private Integer state;
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 + '\'' +
'}';
}
} }

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

@ -86,7 +86,7 @@
<result column="introduce" property="introduce" jdbcType="VARCHAR" /> <result column="introduce" property="introduce" jdbcType="VARCHAR" />
</association> </association>
</resultMap> </resultMap>
<!-- 当前批次中物料与生产日期字段映射--> <!-- 当前批次中物料与生产日期字段映射-->
<resultMap id="MaterialAndProducedDate" type="com.dreamchaser.depository_manage.entity.MaterialAndProducedDate"> <resultMap id="MaterialAndProducedDate" type="com.dreamchaser.depository_manage.entity.MaterialAndProducedDate">
<id column="id" property="id" jdbcType="INTEGER" /> <id column="id" property="id" jdbcType="INTEGER" />
@ -136,7 +136,7 @@
<sql id="allColumnsAndTypeNameOnViewByInventory"> <sql id="allColumnsAndTypeNameOnViewByInventory">
id,mid,depositoryId,mname,quantity,price,mtid,mstate,tname,dname,version,amounts ,unit ,texture,mcode,depositoryCode,producedDate,shelfLife,productionPlace,brand,remark,numberOfTemporary id,mid,depositoryId,mname,quantity,price,mtid,mstate,tname,dname,version,amounts ,unit ,texture,mcode,depositoryCode,producedDate,shelfLife,productionPlace,brand,remark,numberOfTemporary
</sql> </sql>
<sql id="allColumnsByMaterialAndProducedDate"> <sql id="allColumnsByMaterialAndProducedDate">
mp.id,mp.inid,mp.mid,mp.quantity,mp.expendnum,mp.inventory,mp.producedDate,mp.barCode,mp.qrCode mp.id,mp.inid,mp.mid,mp.quantity,mp.expendnum,mp.inventory,mp.producedDate,mp.barCode,mp.qrCode
</sql> </sql>
@ -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},
@ -888,7 +888,7 @@
where id = #{id} where id = #{id}
</update> </update>
<!-- 修改数据 --> <!-- 修改数据 -->
<update id="updateMaterial"> <update id="updateMaterial">
UPDATE material UPDATE material
@ -1009,12 +1009,12 @@
</update> </update>
<!-- 根据主键删除数据 --> <!-- 根据主键删除数据 -->
<delete id="deleteMaterialById" parameterType="int"> <delete id="deleteMaterialById" parameterType="int">
DELETE FROM material WHERE id = #{id} DELETE FROM material WHERE id = #{id}
</delete> </delete>
<!-- 根据主键批量删除数据 <!-- 根据主键批量删除数据
<delete id="deleteMaterialByIds" parameterType="list"> <delete id="deleteMaterialByIds" parameterType="list">
DELETE FROM material WHERE id IN DELETE FROM material WHERE id IN

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

58
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 notice; return result;
}
/**
* 根据主键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 {

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

@ -110,22 +110,25 @@
var req = {}; var req = {};
req.mid = mid; req.mid = mid;
req.barCodeList = barCode; req.barCodeList = barCode;
$.ajax({ if(barCode.length > 0){
url: "/material/addBarCodeByMaterial", $.ajax({
type: "post", url: "/material/addBarCodeByMaterial",
data: JSON.stringify(req), type: "post",
dataType: "json", data: JSON.stringify(req),
contentType: "application/json;charset=utf-8", dataType: "json",
success: function (d) { contentType: "application/json;charset=utf-8",
table.reload('currentTableId', { success: function (d) {
url: '/material/findMaterialBarCode', table.reload('currentTableId', {
page: { url: '/material/findMaterialBarCode',
curr: 1 page: {
}, curr: 1
where: {"mid": mid} },
}); where: {"mid": mid}
} });
}) }
})
}
}; };

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>

220
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;}
.layuimini-notice-title,.layuimini-notice-label,.layuimini-myTask-type { .icon-tip {
padding-right: 70px !important;text-overflow:ellipsis!important;overflow:hidden!important;white-space:nowrap!important;} color: #ff5722 !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;}
.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> </style>
</head> </head>
<body> <body>
@ -54,7 +168,7 @@
<h5>仓库数量</h5> <h5>仓库数量</h5>
</div> </div>
<div class="panel-content"> <div class="panel-content">
<h1 class="no-margins" th:text="${depositoryCount}" >4</h1> <h1 class="no-margins" th:text="${depositoryCount}">4</h1>
<small>当前仓库总记录数</small> <small>当前仓库总记录数</small>
</div> </div>
</div> </div>
@ -68,7 +182,7 @@
<h5>库存金额统计</h5> <h5>库存金额统计</h5>
</div> </div>
<div class="panel-content"> <div class="panel-content">
<h1 class="no-margins" th:text="${allPrice}" >12032</h1> <h1 class="no-margins" th:text="${allPrice}">12032</h1>
<small>当前库存总数</small> <small>当前库存总数</small>
</div> </div>
</div> </div>
@ -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()}">
@ -203,7 +326,7 @@
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script> <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 src="/static/js/lay-config.js?v=1.0.4" charset="utf-8"></script>
<script> <script>
layui.use(['layer', 'miniTab','echarts'], function () { layui.use(['layer', 'miniTab', 'echarts'], function () {
var $ = layui.jquery, var $ = layui.jquery,
layer = layui.layer, layer = layui.layer,
miniTab = layui.miniTab, miniTab = layui.miniTab,
@ -217,27 +340,38 @@
$('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>',
area: '300px;', area: '300px;',
shade: 0.8, shade: 0.8,
id: 'layuimini-notice', id: 'layuimini-notice',
btn: ['查看', '取消'], btn: ['查看', '取消'],
btnAlign: 'c', btnAlign: 'c',
moveType: 1, moveType: 1,
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
});
}
);
} }
}); });
}); });
@ -249,7 +383,7 @@
$('body').on('click', '.layuimini-myTask', function () { $('body').on('click', '.layuimini-myTask', function () {
var id = $(this).children('.layuimini-myTask-id').text(); var id = $(this).children('.layuimini-myTask-id').text();
var type = $(this).children('.layuimini-myTask-type').text(); var type = $(this).children('.layuimini-myTask-type').text();
if(type === '出库请求'){ if (type === '出库请求') {
var index = layer.open({ var index = layer.open({
title: '请求详情', title: '请求详情',
type: 2, type: 2,
@ -266,7 +400,7 @@
$(window).on("resize", function () { $(window).on("resize", function () {
layer.full(index); layer.full(index);
}); });
}else if(type === "库存盘点请求"){ } else if (type === "库存盘点请求") {
var index = layer.open({ var index = layer.open({
title: '请求详情', title: '请求详情',
type: 2, type: 2,
@ -282,7 +416,7 @@
$(window).on("resize", function () { $(window).on("resize", function () {
layer.full(index); layer.full(index);
}); });
}else if(type === "物料出库请求"){ } else if (type === "物料出库请求") {
var index = layer.open({ var index = layer.open({
title: '请求详情', title: '请求详情',
type: 2, type: 2,

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