Browse Source

优化查询

lwx_dev
erdanergou 3 years ago
parent
commit
91b4ea8c01
  1. 13
      src/main/java/com/dreamchaser/depository_manage/config/PortConfig.java
  2. 56
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_approval_template/ApprovalTemplate.java
  3. 17
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_approval_template/Approval_template_apply_data.java
  4. 25
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_approval_template/Approval_template_apply_data_contents.java
  5. 24
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_approval_template/Approval_template_approver.java
  6. 18
      src/main/java/com/dreamchaser/depository_manage/config/QyWx_approval_template/Approval_template_summary_info.java
  7. 2
      src/main/java/com/dreamchaser/depository_manage/config/WebMvcConfig.java
  8. 38
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java
  9. 6
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  10. 3
      src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java
  11. 89
      src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java
  12. 4
      src/main/resources/templates/index.html
  13. 267
      src/main/resources/templates/pages/application/application-out.html
  14. 10
      src/test/java/com/dreamchaser/depository_manage/Test.java

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

@ -109,4 +109,17 @@ public class PortConfig {
e.printStackTrace();
}
}
// 获取当前登录用户所在部门的企业微信id
public static JSONObject getUserPortByQyWx(Integer mainPortId){
String url = external_url+"/org/getgovcont";
Map<String,Object> map = new HashMap<>();
map.put("id",mainPortId);
map.put("idstr",String.valueOf(mainPortId));
String jsonString = JSONObject.toJSONString(map);
String s = HttpUtils.doPost(url, jsonString);
JSONObject jsonObject = JSONObject.parseObject(s);
JSONObject data = jsonObject.getJSONObject("data");
return data;
}
}

56
src/main/java/com/dreamchaser/depository_manage/config/QyWx_approval_template/ApprovalTemplate.java

@ -0,0 +1,56 @@
package com.dreamchaser.depository_manage.config.QyWx_approval_template;
import lombok.Data;
import java.util.List;
/**
* 用于审批模板的创建
*/
@Data
public class ApprovalTemplate {
/**
* 申请人userid此审批申请将以此员工身份提交申请人需在应用可见范围内
*/
private String creator_userid;
/**
* 模板id可在获取审批申请详情审批状态变化回调通知中获得也可在审批模板的模板编辑页面链接中获得暂不支持通过接口提交[打卡补卡][调班]模板审批单
*/
private String template_id;
/**
* 审批人模式0-通过接口指定审批人抄送人此时approvernotifyer等参数可用; 1-使用此模板在管理后台设置的审批流程(需要保证审批流程中没有申请人自选节点)支持条件审批默认为0
*/
private int use_template_approver;
/**
* 提单者提单部门id不填默认为主部门
*/
private int choose_department;
/**
* 抄送人节点userid列表仅use_template_approver为0时生效
*/
private List<String> notifyer;
/**
* 抄送方式1-提单时抄送默认值 2-单据通过后抄送3-提单和单据通过后抄送仅use_template_approver为0时生效
*/
private int notify_type;
/**
* 审批申请数据可定义审批申请中各个控件的值其中必填项必须有值选填项可为空数据结构同获取审批申请详情接口返回值中同名参数apply_data
*/
private Approval_template_apply_data apply_data;
/**
* 摘要信息用于显示在审批通知卡片审批列表的摘要信息最多3行
*/
private List<Approval_template_summary_info> summary_list;
}

17
src/main/java/com/dreamchaser/depository_manage/config/QyWx_approval_template/Approval_template_apply_data.java

@ -0,0 +1,17 @@
package com.dreamchaser.depository_manage.config.QyWx_approval_template;
import lombok.Data;
import java.util.List;
/**
* 审批申请数据可定义审批申请中各个控件的值其中必填项必须有值选填项可为空数据结构同获取审批申请详情接口返回值中同名参数apply_data
*/
@Data
public class Approval_template_apply_data {
/**
* 控件类型Text-文本Textarea-多行文本Number-数字Money-金额Date-日期/日期+时间Selector-单选/多选
* Contact-成员/部门Tips-说明文字File-附件Table-明细Location-位置RelatedApproval-关联审批单Formula-公式DateRange-时长
*/
private List<Approval_template_apply_data_contents> contents;
}

25
src/main/java/com/dreamchaser/depository_manage/config/QyWx_approval_template/Approval_template_apply_data_contents.java

@ -0,0 +1,25 @@
package com.dreamchaser.depository_manage.config.QyWx_approval_template;
import lombok.Data;
/**
* 控件相关数据
*/
@Data
public class Approval_template_apply_data_contents {
/**
* 控件类型Text-文本Textarea-多行文本Number-数字Money-金额Date-日期/日期+时间Selector-单选/多选
* Contact-成员/部门Tips-说明文字File-附件Table-明细Location-位置RelatedApproval-关联审批单Formula-公式DateRange-时长
*/
private String control;
/**
* 控件id控件的唯一id可通过获取审批模板详情接口获取
*/
private String id;
/**
* 控件值 需在此为申请人在各个控件中填写内容不同控件有不同的赋值参数具体说明详见附录模板配置的控件属性为必填时对应value值需要有值
*/
private Object value;
}

24
src/main/java/com/dreamchaser/depository_manage/config/QyWx_approval_template/Approval_template_approver.java

@ -0,0 +1,24 @@
package com.dreamchaser.depository_manage.config.QyWx_approval_template;
import lombok.Data;
import java.util.List;
/**
* 审批流程信息用于指定审批申请的审批流程支持单人审批多人会签多人或签可能有多个审批节点仅use_template_approver为0时生效
*/
@Data
public class Approval_template_approver {
/**
* 节点审批方式1-或签2-会签仅在节点为多人审批时有效
*/
private int attr;
/**
* 审批节点审批人userid列表若为多人会签多人或签需填写每个人的userid
*/
private List<String> userid;
}

18
src/main/java/com/dreamchaser/depository_manage/config/QyWx_approval_template/Approval_template_summary_info.java

@ -0,0 +1,18 @@
package com.dreamchaser.depository_manage.config.QyWx_approval_template;
import lombok.Data;
/**
* 摘要行信息
*/
@Data
public class Approval_template_summary_info {
/**
* 摘要行显示文字用于记录列表和消息通知的显示不要超过20个字符
*/
private String text;
/**
* 摘要行显示语言中文zh_CN注意不是zh-CN英文en
*/
private String lang;
}

2
src/main/java/com/dreamchaser/depository_manage/config/WebMvcConfig.java

@ -15,7 +15,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new UserInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login", "/register", "/sendCode", "/error","/QyWxLogin","/callback")
.excludePathPatterns("/login", "/register", "/sendCode", "/error","/QyWxLogin","/callback","/getMaterialAll")
.excludePathPatterns("classpath:/static/**")
.excludePathPatterns("/static/**");
}

38
src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java

@ -309,18 +309,34 @@ public class DepositoryRecordController {
map.put("parentId",id);
}
integer += depositoryRecordService.insertApplicationOutMin(map);
// 开启一个线程执行发送信息操作
new Thread(new Runnable() {
@Override
public void run() {
// 向企业微信中对应用户发送消息
JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true,crypt);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
// 申请人number
redisTemplateForHash.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
redisTemplateForHash.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
}
}).start();
// 开启一个线程开启审批
new Thread(new Runnable() {
@Override
public void run() {
}
}).start();
}
// 向企业微信中对应用户发送消息
JSONObject jsonObject = qyWxOperationService.sendQyWxToApplicationOutMessage(departMentHeadQyWxName.toString(), ObjectFormatUtil.toInteger(id), true,crypt);
// 将当前返回结果保存到redis中
Map<String,Object> QyWxMessageMap = new HashMap<>();
QyWxMessageMap.put("MsgId",jsonObject.getString("msgid"));
QyWxMessageMap.put("responseCode",jsonObject.getString("response_code"));
// key user:300450:QyWxOut:1
// 申请人number
redisTemplateForHash.opsForHash().putAll("user:"+userToken.getNumber()+":QyWxOutId:"+id,QyWxMessageMap);
// 设置过期时间为三天
redisTemplateForHash.expire("user:"+userToken.getNumber()+":QyWxOutId:"+id,72,TimeUnit.HOURS);
}else{
// 插入主订单
map.put("departmenthead",departmentHeadId.toString());

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

@ -134,8 +134,10 @@ public class PageController {
@GetMapping("/getMaterialAll")
public String getMaterialAll(){
return "pages/material/selectMaterial";
}

3
src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java

@ -42,6 +42,9 @@ public class UserInterceptor extends HandlerInterceptorAdapter {
session.invalidate();
return true;
}
if("/getMaterialAll".equals(request.getServletPath())){
return true;
}
if("/getCaptchaid".equals(request.getServletPath())){
return true;
}

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

@ -3,7 +3,11 @@ package com.dreamchaser.depository_manage.service.impl;
import cn.hutool.core.lang.Snowflake;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.config.QyWx_approval_template.ApprovalTemplate;
import com.dreamchaser.depository_manage.config.QyWx_approval_template.Approval_template_apply_data;
import com.dreamchaser.depository_manage.config.QyWx_approval_template.Approval_template_apply_data_contents;
import com.dreamchaser.depository_manage.config.QyWx_template_card.*;
import com.dreamchaser.depository_manage.controller.PageController;
import com.dreamchaser.depository_manage.entity.*;
@ -1345,5 +1349,90 @@ public class QyWxOperationService {
}
/**
* 用于发送出库审批
* @param userAgent
* @return
*/
public JSONObject sendOutApprovalTemplate(String userAgent,UserByPort userToken,Integer mainId){
// 获取当前出库主订单
ApplicationOutRecordP mainRecord = depositoryRecordMapper.findApplicationOutRecordPById(mainId);
// 获取当前出库明细
List<ApplicationOutRecordMin> minRecordList = depositoryRecordMapper.findApplicationOutRecordMinByParent(mainId);
// 定义审批模板
ApprovalTemplate approvalTemplate = new ApprovalTemplate();
// 获取申请人的userId
String workwechat = userToken.getWorkwechat();
// 设置申请人
approvalTemplate.setCreator_userid(workwechat);
// 设置模板id
approvalTemplate.setTemplate_id(QyWxConfig.out_template_id);
// 设置审批人模式为在管理后台设置的审批流程
approvalTemplate.setUse_template_approver(1);
// 审批申请数据,可定义审批申请中各个控件的值,其中必填项必须有值,选填项可为空,数据结构同“获取审批申请详情”接口返回值中同名参数“apply_data”
Approval_template_apply_data approval_template_apply_data = new Approval_template_apply_data();
//定义模板控件——发起人
Approval_template_apply_data_contents approval_template_apply_data_contents_initiator = new Approval_template_apply_data_contents();
// 控件类型
approval_template_apply_data_contents_initiator.setControl("Contact");
// 控件id
approval_template_apply_data_contents_initiator.setId("Contact-1668051509196");
// 成员控件值(control参数为Contact,且value参数为members)
Map<String,Object> members_initiator = new HashMap<>();
Map<String,String> contact_user = new HashMap<>();
List<Map<String,String>> membersMap_initiator = new ArrayList<>();
contact_user.put("userid",workwechat);
contact_user.put("name",userToken.getName());
membersMap_initiator.add(contact_user);
members_initiator.put("members",membersMap_initiator);
approval_template_apply_data_contents_initiator.setValue(members_initiator);
//定义模板控件——发起时间
Approval_template_apply_data_contents approval_template_apply_data_contents_time = new Approval_template_apply_data_contents();
approval_template_apply_data_contents_time.setControl("Date");
approval_template_apply_data_contents_time.setId("Date-1668051535322");
Map<String,Object> members_time = new HashMap<>();
Map<String,String> contact_time = new HashMap<>();
contact_time.put("type","hour");
contact_time.put("s_timestamp", String.valueOf(System.currentTimeMillis()/1000));
members_time.put("date",contact_time);
approval_template_apply_data_contents_time.setValue(members_time);
//定义模板控件——所在部门
Approval_template_apply_data_contents approval_template_apply_data_contents_department = new Approval_template_apply_data_contents();
approval_template_apply_data_contents_department.setControl("Contact");
approval_template_apply_data_contents_department.setId("Contact-1668048405619");
// 获取当前登录用户部门与企业微信部门对照
JSONObject userPortByQyWx = PortConfig.getUserPortByQyWx(userToken.getMaindeparment());
String portName = userPortByQyWx.getString("name");
Integer portByQyWxInteger = userPortByQyWx.getInteger("wechatorganizationid");
// 部门控件值(control参数为Contact,且value参数为members)
Map<String,Object> members_port = new HashMap<>();
Map<String,String> contact_port = new HashMap<>();
List<Map<String,String>> membersMap_port = new ArrayList<>();
contact_port.put("openapi_id",portByQyWxInteger.toString());
contact_port.put("name",portName);
membersMap_port.add(contact_user);
members_port.put("departments",membersMap_port);
approval_template_apply_data_contents_department.setValue(members_port);
return null;
}
}

4
src/main/resources/templates/index.html

@ -157,6 +157,8 @@
miniAdmin = layui.miniAdmin;
var dataByConfig;
var uid = $("#uid").text();
var options = {
clearUrl: "/static/api/clear.json", // 缓存清理接口
@ -224,7 +226,7 @@
timestamp: data.timestamp, // 必填,生成签名的时间戳
nonceStr: data.noncestr, // 必填,生成签名的随机串
signature: data.jsapi_ticket_enterprises,// 必填,签名,见 附录-JS-SDK使用权限签名算法
jsApiList: ['scanQRCode'] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
jsApiList: ['invoke','thirdPartyOpenPage','scanQRCode'] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
});
}
});

267
src/main/resources/templates/pages/application/application-out.html

@ -12,22 +12,29 @@
</head>
<body>
<style>
.inputdiv{
display:flex;background-color: #fff;height: 38px;line-height: 38px;border: 1px solid rgb(238, 238, 238);
.inputdiv {
display: flex;
background-color: #fff;
height: 38px;
line-height: 38px;
border: 1px solid rgb(238, 238, 238);
}
.layui-form-label{
.layui-form-label {
padding: 9px 0px;
text-align: left;
}
.layui-input-block{
.layui-input-block {
margin-left: 80px;
}
.layui-form-select{
.layui-form-select {
width: 100%;
border-style: none;
}
.layui-card-body{
.layui-card-body {
padding: 10px 5px;
}
@ -35,7 +42,7 @@
<div class="layuimini-container">
<div class="layuimini-main">
<div class="layui-fluid">
<!-- 出库申请-->
<!-- 出库申请-->
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto;">
<div carousel-item style="overflow: inherit">
<div>
@ -43,15 +50,18 @@
<div class="layui-card" id="cardParent">
<div class="layui-card-body" id="cardItem">
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<i class="layui-icon layui-icon-subtraction" style="display: inline"
onclick="deleteItem(this)"></i>
<div class="layui-form-item">
<label class="layui-form-label">物料名称:</label>
<div class="layui-input-block">
<div class="inputdiv">
<input type="text" placeholder="请选择物料" class="layui-input" style="border-style: none"
<input type="text" placeholder="请选择物料" class="layui-input"
style="border-style: none"
id="openSonByMaterial" onblur="selectMaterialByName(this)"
lay-verify="required"/>
<i class="layui-icon layui-icon-search" style="display: inline" id="selectMaterial" onclick="selectMaterial(this)"></i>
<i class="layui-icon layui-icon-search" style="display: inline"
id="selectMaterial" onclick="selectMaterial(this)"></i>
</div>
<input type="text" name="mid" class="layui-input" id="mid"
style="display: none" lay-verify="required"/>
@ -60,7 +70,8 @@
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block">
<input id="code" name="code" type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
<input id="code" name="code" type="text" placeholder="请填写入物料编码" value=""
onblur="selectCode(this)"
class="layui-input" lay-verify="required">
</div>
</div>
@ -72,7 +83,8 @@
value=""
class="layui-input"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" id="barCodeImg"
<img src="/static/images/search.ico" height="16" width="16"
id="barCodeImg"
style="margin-top: 10px" onclick="scanBarCode(this)">
</div>
</div>
@ -80,7 +92,8 @@
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
<input name="quantity" type="number" placeholder="请填写入物料数量" value="" onblur="MaterialQuantityIsTrue(this)" id="quantity"
<input name="quantity" type="number" placeholder="请填写入物料数量" value=""
onblur="MaterialQuantityIsTrue(this)" id="quantity"
class="layui-input" lay-verify="number" required>
</div>
</div>
@ -91,13 +104,15 @@
class="layui-textarea"></textarea>
</div>
</div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
<i class="layui-icon layui-icon-addition" style="display: inline"
onclick="addItem(this)"></i>
</div>
<!-- 提交按钮-->
<!-- 提交按钮-->
<div class="layui-form-item" id="btn_sub">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep" style="margin-bottom: 30px;margin-left: 15%">
<button class="layui-btn" lay-submit lay-filter="formStep"
style="margin-bottom: 30px;margin-left: 15%">
&emsp;提交申请&emsp;
</button>
</div>
@ -133,23 +148,40 @@
</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 src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js"></script>
<script>
// 用于添加标签
function addItem(obj){}
function addItem(obj) {
}
// 用于删除标签
function deleteItem(obj){}
function deleteItem(obj) {
}
// 用于编码查询
function selectCode(obj){}
function selectCode(obj) {
}
// 用于点击搜索按钮
function selectMaterial(obj){}
function selectMaterial(obj) {
}
// 用于物料名称查询
function selectMaterialByName(obj){}
function selectMaterialByName(obj) {
}
// 用于判断当前物料数量是否合适
function MaterialQuantityIsTrue(){}
function MaterialQuantityIsTrue() {
}
// 用于扫描条形码
function scanBarCode() {}
function scanBarCode() {
}
// 用于重新渲染页面
function Coverpage() {}
function Coverpage() {
}
// 用于暂存卡片个数
var params = [];
// 用于卡片编号
@ -175,13 +207,13 @@
form.on('submit(formStep)', function (data) {
data = data.field;
data.params = params;
if(data.mid === undefined){
if (data.mid === undefined) {
// 如果没有初始项
var dataKeys = Object.keys(data);
var dataKey;
for (let i = 0; i < dataKeys.length; i++) {
dataKey = dataKeys[i];
if(dataKey.includes("mid")){
if (dataKey.includes("mid")) {
break;
}
}
@ -189,13 +221,13 @@
var keyNumber = dataKey.split("mid")[1];
for (let index = 0; index < dataKeys.length; index++) {
var tempKey = dataKeys[index];
if(tempKey.includes(keyNumber)){
var key = tempKey.replace(keyNumber,"");
if (tempKey.includes(keyNumber)) {
var key = tempKey.replace(keyNumber, "");
data[key] = data[tempKey];
delete data[tempKey];
}
}
data.params = remove(data.params,Number(keyNumber));
data.params = remove(data.params, Number(keyNumber));
}
$.ajax({
url: "/depositoryRecord/applicationOut",
@ -210,35 +242,69 @@
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.message);//失败的表情
return;
} else {
/*let url = window.location.href.split("#")[0];
var req = {};
req.url = url;
$.ajax({
url: "/QyWxSignature",
type: "get",
datatype: "json",
data: (req),
contentType: "application/json;charset=utf-8",
success: function (d) {
var data = d.data;
console.log(data)
console.log(parent)
parent.wx.agentConfig({
corpid: data.corpid, // 必填,企业微信的corpid,必须与当前登录的企业一致
agentid: data.agentid, // 必填,企业微信的应用id (e.g. 1000247)
timestamp: data.timestamp, // 必填,生成签名的时间戳
nonceStr: data.noncestr, // 必填,生成签名的随机串
signature: data.jsapi_ticket_app,// 必填,签名,见附录-JS-SDK使用权限签名算法
jsApiList: ['thirdPartyOpenPage'], //必填,传入需要使用的接口名称
success: function (res) {
// 回调
parent.wx.invoke('thirdPartyOpenPage', {
"oaType": "10001",// String
"templateId": "3WKiKVCzyLv3Y1LaHZxp4DimQEpCdvYP52HsAUtF",// String
"thirdNo": "123456456",// String
"extData": {
'fieldList': [{
'title': '采购类型',
'type': 'text',
'value': '市场活动',
},
{
'title': '订单链接',
'type': 'link',
'value': 'https://work.weixin.qq.com',
}],
}
},
function (res) {
// 输出接口的回调信息
console.log(res);
});
},
fail: function (res) {
if (res.errMsg.indexOf('function not exist') > -1) {
alert('版本过低请升级')
}
console.log(res)
}
});
}
});*/
layer.msg("申请提交成功", {
icon: 6,//成功的表情
time: 500 //1秒关闭(如果不配置,默认是3秒)
}, function () {
step.next('#stepForm');
});
parent.wx.invoke('thirdPartyOpenPage', {
"oaType": "10001",// String
"templateId": "3WKiKVCzyLv3Y1LaHZxp4DimQEpCdvYP52HsAUtF",// String
"thirdNo": "123456123456",// String
"extData": {
'fieldList': [{
'title': '采购类型',
'type': 'text',
'value': '市场活动',
},
{
'title': '订单链接',
'type': 'link',
'value': 'https://work.weixin.qq.com',
}],
}
},
function(res) {
// 输出接口的回调信息
console.log(res);
});
}
},
complete: function () {
@ -268,7 +334,7 @@
NewIdNumber = NewIdNumber + 1;
// 物料名称栏目
var materialItem = `
<div class="layui-card-body" id=`+"cardItem"+NewIdNumber+`>
<div class="layui-card-body" id=` + "cardItem" + NewIdNumber + `>
<hr>
<i class="layui-icon layui-icon-subtraction" style="display: inline" onclick="deleteItem(this)"></i>
<div class="layui-form-item">
@ -279,14 +345,14 @@
id="openSonByMaterial" lay-verify="required" onblur="selectMaterialByName(this)"/>
<i class="layui-icon layui-icon-search" style="display: inline" id="selectMaterial" onclick="selectMaterial(this)"></i>
</div>
<input type="text" name=`+"mid"+NewIdNumber+` class="layui-input" id="mid"
<input type="text" name=` + "mid" + NewIdNumber + ` class="layui-input" id="mid"
style="display: none" lay-verify="required" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block">
<input id=`+"code"+NewIdNumber+` name=`+"code"+NewIdNumber+` type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
<input id=` + "code" + NewIdNumber + ` name=` + "code" + NewIdNumber + ` type="text" placeholder="请填写入物料编码" value="" onblur="selectCode(this)"
class="layui-input" lay-verify="required">
</div>
</div>
@ -294,11 +360,11 @@
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id=`+"barCode"+NewIdNumber+` name=`+"barCode"+NewIdNumber +` type="text" placeholder="请填写入条形编码"
<input id=` + "barCode" + NewIdNumber + ` name=` + "barCode" + NewIdNumber + ` type="text" placeholder="请填写入条形编码"
value=""
class="layui-input"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" id=`+"barCodeImg"+NewIdNumber+`
<img src="/static/images/search.ico" height="16" width="16" id=` + "barCodeImg" + NewIdNumber + `
style="margin-top: 10px" onclick="scanBarCode(this)">
</div>
</div>
@ -306,14 +372,14 @@
<div class="layui-form-item">
<label class="layui-form-label">物料数量:</label>
<div class="layui-input-block">
<input name=`+"quantity"+NewIdNumber+` type="number" placeholder="请填写入物料数量" value="" onblur="MaterialQuantityIsTrue(this)"
id=`+"quantity"+NewIdNumber+` class="layui-input" lay-verify="number">
<input name=` + "quantity" + NewIdNumber + ` type="number" placeholder="请填写入物料数量" value="" onblur="MaterialQuantityIsTrue(this)"
id=` + "quantity" + NewIdNumber + ` class="layui-input" lay-verify="number">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
<textarea name=`+"applyRemark"+NewIdNumber+` placeholder="请填写相关原因及申请原因" value=""
<textarea name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea>
</div>
</div>
@ -321,9 +387,9 @@
</div>`;
// 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber)
$("#stepForm").css("height",height+422 +'px');
$("#"+parentId).after(materialItem);
params.push(NewIdNumber);
$("#stepForm").css("height", height + 422 + 'px');
$("#" + parentId).after(materialItem);
};
// 用于重新渲染页面
@ -366,7 +432,7 @@
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<select id=`+"barCode"+NewIdNumber+` name=`+"barCode"+NewIdNumber+`></select>
<select id=` + "barCode" + NewIdNumber + ` name=` + "barCode" + NewIdNumber + `></select>
<img src="/static/images/search.ico" height="16" width="16" style="margin-top: 10px" onclick="scanBarCode(this)" >
</div>
</div>
@ -395,7 +461,7 @@
params.push(NewIdNumber)
}
$("#stepForm").css("height", height + 532 + 'px');
var materialItem = firstItem + lastItem; // 最终
var materialItem = firstItem + lastItem; // 最终
$("#btn_sub").before(materialItem)
};
@ -408,15 +474,16 @@
// 获取祖父节点
var reparent = parent.parentNode;
var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
$("#stepForm").css("height",height-422 +'px');
params = remove(params,parentId);
$("#stepForm").css("height", height - 422 + 'px');
params = remove(params, parentId);
reparent.removeChild(parent);
};
//删除数组中指定元素
function remove(arr, item) {
var result = [];
for (let i = 0; i < arr.length; i++) {
if(arr[i] === item){
if (arr[i] === item) {
continue;
}
result.push(arr[i]);
@ -425,7 +492,7 @@
}
// 用于实现通过编码查询物料
selectCode = function(obj){
selectCode = function (obj) {
// 输入code
var code = obj.value;
// 获取对应元素
@ -446,19 +513,18 @@
url: "/material/findMatrialByCode",
type: "get",
dataType: 'json',
data:(req),
data: (req),
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;
if(d == null){
if (d == null) {
layer.msg("仓库中暂无该物料");
materialName.value = "";
materialId.value = "";
obj.value = "";
$('#place'+objId).empty();
$('#place' + objId).empty();
}else
{
} else {
materialName.value = d.mname;
materialId.value = d.id;
var idNumber = materialId.name.split("mid")[1];
@ -469,12 +535,12 @@
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var id = barCodeInput.id;
$("#"+id).remove();
$("#barCode"+idNumber).empty();
var barCode = $("#barCode"+idNumber);
if(barCode.length > 0) {
$("#" + id).remove();
$("#barCode" + idNumber).empty();
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
}else{
} else {
var barCodeSelect = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`;
@ -510,9 +576,9 @@
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
content: '/selectMaterialByCard?mname='+mname+'&type=2&clickObj='+parentId,
move : '.layui-layer-title',
fixed:false,
content: '/selectMaterialByCard?mname=' + mname + '&type=2&clickObj=' + parentId,
move: '.layui-layer-title',
fixed: false,
end: function () {
var mid = materialId.value;
$.ajax({
@ -523,7 +589,7 @@
success: function (d) {
var material = d.data.materialById;
var code = material.code;
if(code === undefined){
if (code === undefined) {
code = "";
}
codeValue.value = code;
@ -553,22 +619,21 @@
url: "/material/findInventoryByCondition",
type: "post",
dataType: 'json',
data:JSON.stringify(req),
data: JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
if(d.count > 1){
if (d.count > 1) {
layer.msg("请点击右侧搜索确定物品");
materialId.value = "";
codeValue.value = "";
return false;
}else if(d.count === 0){
} else if (d.count === 0) {
layer.msg("没有该物品,请确认输入是否正确");
materialId.value = "";
codeValue.value = "";
materialName.value = "";
return false;
}
else{
} else {
var material = d.data[0];
materialName.value = material.mname;
materialId.value = material.id;
@ -583,7 +648,7 @@
desc: 'scanQRCode desc',
needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
scanType: ["barCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有
success: function(res) {
success: function (res) {
// 回调
var result = res.resultStr;//当needResult为1时返回处理结果
var req = {};
@ -635,26 +700,26 @@
//用于判断当前物料数量是否合适
MaterialQuantityIsTrue = function (obj) {
var id = obj.id.split("quantity")[1];
var mcode = $("#code"+id).val(); // 获取到当前输入的物料编码
if(mcode === "" || mcode ===undefined || mcode === null){
layer.msg("请输入物料的正确编码!",{icon:0,time:500},function () {
$("#quantity"+id).val("")
var mcode = $("#code" + id).val(); // 获取到当前输入的物料编码
if (mcode === "" || mcode === undefined || mcode === null) {
layer.msg("请输入物料的正确编码!", {icon: 0, time: 500}, function () {
$("#quantity" + id).val("")
});
}else{
} else {
var req = {};
req.code = mcode;
req.quantity = $("#quantity"+id).val();
req.quantity = $("#quantity" + id).val();
$.ajax({
url:"/material/MaterialQuantityIsTrue",
type:"post",
data:JSON.stringify(req),
url: "/material/MaterialQuantityIsTrue",
type: "post",
data: JSON.stringify(req),
dataType: 'json',
contentType: "application/json;charset=utf-8",
success:function (res) {
success: function (res) {
var flag = res.data;
if(!flag){ // 如果当前数目不合适
layer.msg("当前物料数量不足",{icon:0,time:500},function () {
$("#quantity"+id).val("");
if (!flag) { // 如果当前数目不合适
layer.msg("当前物料数量不足", {icon: 0, time: 500}, function () {
$("#quantity" + id).val("");
// 获取对应元素
var parent = obj.parentNode.parentNode.parentNode;
var children = parent.childNodes[5];

10
src/test/java/com/dreamchaser/depository_manage/Test.java

@ -71,16 +71,10 @@ import org.xml.sax.InputSource;
public class Test {
@Autowired
QyWxOperationService qyWxOperationService;
@org.junit.Test
public void test1() throws AesException, IOException, ParserConfigurationException, SAXException {
String agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.35";
String crypt = Md5.crypt(agent);
JSONObject approvalTemplateInfo = qyWxOperationService.getApprovalTemplateInfo(crypt, QyWxConfig.out_template_id);
System.out.println(approvalTemplateInfo);
JSONObject userPortByQyWx = PortConfig.getUserPortByQyWx(102);
System.out.println(userPortByQyWx);
}

Loading…
Cancel
Save