Browse Source

实现拆单添加功能

lwx_dev
erdanergou 3 years ago
parent
commit
1cf02cbe7b
  1. 6
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  2. 29
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  3. 48
      src/main/java/com/dreamchaser/depository_manage/controller/SplitController.java
  4. 2
      src/main/java/com/dreamchaser/depository_manage/exceptionHandler/CustomExceptionHandler.java
  5. 8
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java
  6. 17
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  7. 9
      src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.java
  8. 40
      src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml
  9. 108
      src/main/java/com/dreamchaser/depository_manage/pojo/SplitInfoP.java
  10. 7
      src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java
  11. 206
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  12. 1
      src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java
  13. 31
      src/main/resources/templates/pages/application/application-in.html
  14. 1
      src/main/resources/templates/pages/application/application-in_scanQrCode.html
  15. 2
      src/main/resources/templates/pages/application/application-out.html
  16. 2
      src/main/resources/templates/pages/application/application-transfer.html
  17. 2
      src/main/resources/templates/pages/application/application-transfer_back.html
  18. 113
      src/main/resources/templates/pages/material/selectMaterial.html
  19. 127
      src/main/resources/templates/pages/material/selectMaterialByApproval.html
  20. 468
      src/main/resources/templates/pages/split/split-out.html
  21. 450
      src/main/resources/templates/pages/split/split_add.html
  22. 273
      src/test/java/com/dreamchaser/depository_manage/TestForSelectMaterialByName.java
  23. 17
      target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  24. 40
      target/classes/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml
  25. 31
      target/classes/templates/pages/application/application-in.html
  26. 1
      target/classes/templates/pages/application/application-in_scanQrCode.html
  27. 2
      target/classes/templates/pages/application/application-out.html
  28. 2
      target/classes/templates/pages/application/application-transfer.html
  29. 2
      target/classes/templates/pages/application/application-transfer_back.html
  30. 113
      target/classes/templates/pages/material/selectMaterial.html
  31. 127
      target/classes/templates/pages/material/selectMaterialByApproval.html

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

@ -246,7 +246,11 @@ public class MaterialController {
}else if("4".equals(type)){ }else if("4".equals(type)){
list = materialService.InitTreeMenus_Test(); list = materialService.InitTreeMenus_Test();
}*/ }*/
list = materialService.InitTreeMenus_Test(); if(!"".equals(mname)){
list = materialService.InitTreeForSelectName(mname.split(",")[0]);
}else {
list = materialService.InitTreeMenus_Test();
}
return new RestResponse(list); return new RestResponse(list);
} }

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

@ -396,6 +396,25 @@ public class PageController {
return mv; return mv;
} }
@GetMapping("split-out")
public ModelAndView split_out(HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView();
mv.setViewName("pages/split/split-out");
Map<String, Object> map = new HashMap<>();
Integer role = userToken.getIsadmin();
if (role == null) {
role = 1;
}
if (role == 4) {
mv.addObject("display", "inline-block");
} else {
mv.addObject("display", "none");
}
return mv;
}
@GetMapping("/material_out") @GetMapping("/material_out")
public ModelAndView material_out(HttpServletRequest request) { public ModelAndView material_out(HttpServletRequest request) {
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
@ -493,10 +512,9 @@ public class PageController {
// 物料树形菜单页面 // 物料树形菜单页面
@GetMapping("/selectMaterial") @GetMapping("/selectMaterial")
public ModelAndView selectMaterial(String mname, String type) { public ModelAndView selectMaterial(String mname) {
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.addObject("mname", mname); mv.addObject("mname", mname);
mv.addObject("type", type);
mv.setViewName("pages/material/selectMaterial"); mv.setViewName("pages/material/selectMaterial");
return mv; return mv;
} }
@ -702,6 +720,13 @@ public class PageController {
return mv; return mv;
} }
@GetMapping("/split_add")
public ModelAndView split_add(){
ModelAndView mv = new ModelAndView();
mv.setViewName("pages/split/split_add");
return mv;
}
@GetMapping("/table_user") @GetMapping("/table_user")
public ModelAndView table_user(HttpServletRequest request) { public ModelAndView table_user(HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken"); UserByPort userToken = (UserByPort) request.getAttribute("userToken");

48
src/main/java/com/dreamchaser/depository_manage/controller/SplitController.java

@ -0,0 +1,48 @@
package com.dreamchaser.depository_manage.controller;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.service.SplitUnitService;
import com.dreamchaser.depository_manage.utils.CrudUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
@RestController
@RequestMapping("/split")
public class SplitController {
@Autowired
SplitUnitService splitUnitService;
/**
* 用于添加一条拆单记录
* @param map 待添加数据
* @param request
* @return
*/
@PostMapping("/splitAdd")
public RestResponse splitAdd(@RequestBody Map<String,Object> map, HttpServletRequest request){
if(map.containsKey("quantity") && map.containsKey("newUnit")){
return CrudUtil.postHandle(1,splitUnitService.addSplitInfo(map));
}else{
throw new MyException("缺少必要参数");
}
}
/**
* 用于根据条件查询拆单记录
* @param map 待查询条件
* @param request
* @return
*/
@GetMapping("/split_out")
public RestResponse splitOut(@RequestParam Map<String,Object> map,HttpServletRequest request){
return null;
}
}

2
src/main/java/com/dreamchaser/depository_manage/exceptionHandler/CustomExceptionHandler.java

@ -11,7 +11,6 @@ import org.springframework.web.bind.annotation.ResponseBody;
/** /**
* 全局异常捕捉处理 * 全局异常捕捉处理
* @author 金昊霖
*/ */
@ControllerAdvice @ControllerAdvice
@Slf4j @Slf4j
@ -20,7 +19,6 @@ public class CustomExceptionHandler {
@ResponseBody @ResponseBody
@ExceptionHandler(value = Exception.class) @ExceptionHandler(value = Exception.class)
public RestResponse errorHandler(MyException e) { public RestResponse errorHandler(MyException e) {
return new RestResponse(null,e.getCode(),new StatusInfo(e.getMsg(),e.getMsg())); return new RestResponse(null,e.getCode(),new StatusInfo(e.getMsg(),e.getMsg()));
} }

8
src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java

@ -304,6 +304,14 @@ public interface MaterialMapper {
*/ */
List<Material> findMaterialByTypeIds(List<Long> list); List<Material> findMaterialByTypeIds(List<Long> list);
/**
* 批量查询当前类型下包含该名称的物料
* @param map 待查询数据
* @return
*/
List<Material> findMaterialByTypeIdsAndMname(Map<String,Object> map);
/** /**
* 添加当前批次下的物料与生产日期对应 * 添加当前批次下的物料与生产日期对应
* @param map * @param map

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

@ -472,7 +472,7 @@
</select> </select>
<select id="findMaterialByTypeIds" resultMap="InventoryMap" parameterType="list"> <select id="findMaterialByTypeIds" resultMap="materialMap" parameterType="list">
SELECT SELECT
<include refid="allColumns" /> <include refid="allColumns" />
from material m from material m
@ -484,6 +484,21 @@
and state = 1; and state = 1;
</select> </select>
<select id="findMaterialByTypeIdsAndMname" resultMap="materialMap" parameterType="map">
SELECT
<include refid="allColumns" />
from material m
where
m.mname like concat('%',#{mname},'%')
and
m.type_id in
<foreach collection="list" index="index" item="item" open="("
separator="," close=")">
#{item}
</foreach>
and state = 1;
</select>
<select id="findMaterialByDepositorysAndType" resultMap="InventoryMap" parameterType="map"> <select id="findMaterialByDepositorysAndType" resultMap="InventoryMap" parameterType="map">
SELECT SELECT
<include refid="allColumnsAndTypeNameOnViewByInventory" /> <include refid="allColumnsAndTypeNameOnViewByInventory" />

9
src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.java

@ -2,6 +2,7 @@ package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.SplitInfo; import com.dreamchaser.depository_manage.entity.SplitInfo;
import com.dreamchaser.depository_manage.entity.SplitInventory; import com.dreamchaser.depository_manage.entity.SplitInventory;
import com.dreamchaser.depository_manage.pojo.SplitInfoP;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@ -95,4 +96,12 @@ public interface SplitUnitMapper {
*/ */
SplitInventory findSplitInventoryByIidAndSid(Map<String,Object> map); SplitInventory findSplitInventoryByIidAndSid(Map<String,Object> map);
/**
* 根据条件查询对应拆单详细信息
* @param map 查询条件
* @return
*/
List<SplitInfoP> findSplitInfoPByCondition(Map<String,Object> map);
} }

40
src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml

@ -25,6 +25,27 @@
<result column="saveQuantity" property="saveQuantity" jdbcType="INTEGER"/> <result column="saveQuantity" property="saveQuantity" jdbcType="INTEGER"/>
</resultMap> </resultMap>
<resultMap id="splitInfoPMap" type="com.dreamchaser.depository_manage.pojo.SplitInfoP">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="mid" property="mid" jdbcType="INTEGER" />
<result column="quantity" property="quantity" jdbcType="INTEGER" />
<result column="sparentId" property="sparentId" jdbcType="INTEGER" />
<result column="sstate" property="sstate" jdbcType="INTEGER" />
<result column="mstate" property="mstate" jdbcType="INTEGER" />
<result column="oldUnit" property="oldUnit" jdbcType="VARCHAR" />
<result column="newUnit" property="newUnit" jdbcType="VARCHAR" />
<result column="version" property="version" jdbcType="VARCHAR" />
<result column="texture" property="texture" jdbcType="VARCHAR" />
<result column="mcode" property="mcode" jdbcType="VARCHAR" />
<result column="mname" property="mname" jdbcType="VARCHAR" />
<result column="typeName" property="typeName" jdbcType="VARCHAR" />
<result column="shelfLife" property="shelfLife" jdbcType="INTEGER"/>
<result column="productionPlace" property="productionPlace" jdbcType="VARCHAR"/>
<result column="brand" property="brand" jdbcType="VARCHAR"/>
<result column="remark" property="remark" jdbcType="VARCHAR"/>
</resultMap>
<sql id="splitInfoAllColumns"> <sql id="splitInfoAllColumns">
s.id,s.mid,s.oldUnit,s.newUnit,s.quantity,s.parentId,s.state s.id,s.mid,s.oldUnit,s.newUnit,s.quantity,s.parentId,s.state
</sql> </sql>
@ -33,6 +54,10 @@
si.id,si.iid,si.sid.si.outQuantity,si.inQuantity,si.saveQuantity si.id,si.iid,si.sid.si.outQuantity,si.inQuantity,si.saveQuantity
</sql> </sql>
<sql id="splitInfoPAllColumns">
id,mid,oldUnit,newUnit,quantity,sparentId,sstate,shelfLife,productionPlace,brand,remark,mname,typeName,mcode,mstate,version,texture
</sql>
<select id="findSplitInfoByMidAndUnit" parameterType="map" resultMap="splitInfoMap"> <select id="findSplitInfoByMidAndUnit" parameterType="map" resultMap="splitInfoMap">
select select
<include refid="splitInfoAllColumns"/> <include refid="splitInfoAllColumns"/>
@ -162,6 +187,21 @@
</foreach> </foreach>
</delete> </delete>
<select id="findSplitInfoPByCondition" parameterType="map" resultMap="splitInfoPMap">
select
<include refid="splitInfoPAllColumns"/>
from findsplitInfo
where 1 = 1
<if test="mname != null and mname != ''">
and mname like concat('%',#{mname},'%')
</if>
<if test="oldUnit != null and oldUnit != ''">
and oldUnit like concat('%',#{oldUnit},'%')
</if>
<if test="newUnit != null and newUnit != ''">
and newUnit like concat('%',#{newUnit},'%')
</if>
</select>

108
src/main/java/com/dreamchaser/depository_manage/pojo/SplitInfoP.java

@ -0,0 +1,108 @@
package com.dreamchaser.depository_manage.pojo;
import com.dreamchaser.depository_manage.entity.SplitInfo;
import lombok.Data;
/**
* 用于展示拆单具体信息
*/
@Data
public class SplitInfoP {
/**
* 拆单id
*/
private Integer id;
/**
* 物料id
*/
private Integer mid;
/**
* 旧计量单位
*/
private String oldUnit;
/**
* 新计量单位
*/
private String newUnit;
/**
* 新旧单位映射数
*/
private Integer quantity;
/**
* 父级id
*/
private Integer sparentId;
/**
* 状态1启用2禁用3删除
*/
private Integer sstate;
/**
* 物料名称
*/
private String mname;
/**
* 物料类型
*/
private String typeName;
/**
* 物料规格型号
*/
private String version;
/**
* 物料材质
*/
private String texture;
/**
* 物料编码
*/
private String mcode;
/**
* 物料保质期
*/
private Integer shelfLife;
/**
* 用于展示的物料保质期
*/
private String showShelfLife;
/**
* 物料生产地
*/
private String productionPlace;
/**
* 物料品牌
*/
private String brand;
/**
* 物料备注
*/
private String remark;
/**
* 物料状态
*/
private Integer mstate;
public SplitInfoP(SplitInfo splitInfo) {
this.id = splitInfo.getId();
this.mid = splitInfo.getId();
this.oldUnit = splitInfo.getOldUnit();
this.newUnit = splitInfo.getNewUnit();
this.sparentId = splitInfo.getParentId();
this.sstate = splitInfo.getState();
}
public SplitInfoP(){
}
}

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

@ -343,4 +343,11 @@ public interface MaterialService {
* @return * @return
*/ */
Integer editPlaceMaterial(Map<String,Object> map); Integer editPlaceMaterial(Map<String,Object> map);
/**
* 通过物料名称构造树
* @param mname 物料名称
* @return
*/
List<Object> InitTreeForSelectName(String mname);
} }

206
src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java

@ -2202,5 +2202,211 @@ public class MaterialServiceImpl implements MaterialService {
} }
/**
* 用于构造物料树结构(通过物料名称搜索)
* @return
*/
public List<Object> InitTreeForSelectName(String mname) {
// 获取所有物料类型
List<MaterialType> materialTypeAll = materialTypeMapper.findMaterialTypeAll();
// 物料总数
Integer totalVal = materialTypeAll.size();
// 定义分页数量
double size = 100.0;
// 定义线程数
Integer threadSize = (int) Math.ceil(totalVal / size);
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
// 树结构结果集
List<Object> list = new ArrayList<>();
// 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
// 物料类型id列表
List<Long> materialTypeList = new ArrayList<>();
for (int i = 0; i < materialTypeAll.size(); i++) {
// 获取当前类型
MaterialType materialType = materialTypeAll.get(i);
if (((i + 1) % 100) == 0) { // 如果有100个开启线程进行处理
materialTypeList.add(materialType.getOldId());
Future<Object> future = completionService.submit(new TaskTestForSelectMname(materialTypeList,mname));
futureList.add(future); // 添加到结果集
materialTypeList = new ArrayList<>(); // 情况列表
} else {
// 添加id到列表中
materialTypeList.add(materialType.getOldId());
}
}
if (materialTypeList.size() > 0) {
// 如果有剩余,开启线程进行处理
Future<Object> future = completionService.submit(new TaskTestForSelectMname(materialTypeList,mname));
futureList.add(future);
}
// 3.获取结果
for (int i = 0; i < threadSize; i++) {
Object result = null;
try {
result = completionService.take().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
list.addAll((Collection<?>) result);
}
// 进行最终的封装
return buildTreeForSelectName(list);
}
// 用于执行测试新算法(通过物料名称搜索)
class TaskTestForSelectMname implements Callable<Object> {
// 待处理的物料类型id列表
List<Long> materialTypeIdList;
String mname;
public TaskTestForSelectMname(List<Long> materialTypeByCondition,String mname) {
this.materialTypeIdList = materialTypeByCondition;
this.mname = mname;
}
@Override
public Object call() throws Exception {
// 定义树结构结果集
List<Object> list = new ArrayList<>();
// 查询当前物料类型id列表中的物料类型
Map<String,Object> paramForMnameAndMtid = new HashMap<>();
paramForMnameAndMtid.put("list",materialTypeIdList);
paramForMnameAndMtid.put("mname",mname);
List<Material> materialByTypeIds = materialMapper.findMaterialByTypeIdsAndMname(paramForMnameAndMtid);
// 查询当前物料类型所包含的物料
List<MaterialType> materialTypeByOldIds = materialTypeMapper.findMaterialTypeByOldIds(materialTypeIdList);
// 定义线程集
ExecutorService exs = Executors.newFixedThreadPool(materialTypeByOldIds.size());
// 定义线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
for (int i = 0; i < materialTypeByOldIds.size(); i++) {
// 获取当前物料类型
MaterialType mt = materialTypeByOldIds.get(i);
// 开启对应线程
Future<Object> future = completionService.submit(new MtTaskTestForSelectMname(mt, materialByTypeIds,mname));
// 添加到线程结果列表
futureList.add(future);
}
// 3.获取结果
for (int i = 0; i < materialTypeIdList.size(); i++) {
Object result = null;
try {
result = completionService.take().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
list.add(result);
}
return list;
}
}
// 用于执行测试新算法(通过物料名称搜索)
class MtTaskTestForSelectMname implements Callable<Object> {
MaterialType mt; // 物料类型
List<Material> materiaList; // 物料列表
String mname;
public MtTaskTestForSelectMname(MaterialType mt, List<Material> materiaList,String mname) {
this.mt = mt;
this.materiaList = materiaList;
this.mname = mname;
}
@Override
public Object call() throws Exception {
// 开启对应数量的线程
List<Material> materialList = new ArrayList<>();
for (int i = 0; i < materiaList.size(); i++) {
Material material = materiaList.get(i);
// 如果当前物料是当前物料类型下的物料
if (Long.compare(material.getMaterialTypeId(), mt.getOldId()) == 0) {
materialList.add(material);
}
}
// 将物料打包成树结构对应结果
List<Object> objectList = AddMaterialByTypeForSelectMname(materialList);
// 封装成对应的结构
Map<String, Object> objectMap = InitTreeMenusForSelectName(mt, objectList);
return objectMap;
}
}
// 构造树形组件数据模板(通过物料名称搜索)
public Map<String, Object> InitTreeMenusForSelectName(MaterialType mt, List<Object> children) {
if (mt != null) {
Map<String, Object> map = new HashMap<>();
map.put("title", mt.getTname());
map.put("id", mt.getOldId());
map.put("parentId",mt.getParentId());
map.put("children", children);
return map;
} else {
return null;
}
}
// 在类别后添加物料名称(通过物料名称搜索)
public List<Object> AddMaterialByTypeForSelectMname(List<Material> materialList) {
List<Object> result = new ArrayList<>();
for (int i = 0; i < materialList.size(); i++) {
Material material = materialList.get(i);
Map<String, Object> map = new HashMap<>();
String version = material.getVersion();
if (version == null) {
version = "";
}
String title = material.getMname() + ",规格型号: " + version;
map.put("title", title);
map.put("id", material.getId());
result.add(map);
}
return result;
}
/**
* 用于构造树结构通过物料名称搜索)
* @param list 树列表
* @return
*/
public List<Object> buildTreeForSelectName(List<Object> list){
// 定义树结构
List<Object> result = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
// 构造为jsonObject类
JSONObject jsonObject = new JSONObject((Map<String, Object>) list.get(i));
JSONArray children = jsonObject.getJSONArray("children");
if(children.size() > 0){
result.add(jsonObject);
}
}
return result;
}
} }

1
src/main/java/com/dreamchaser/depository_manage/service/impl/SplitUnitServiceImpl.java

@ -63,6 +63,7 @@ public class SplitUnitServiceImpl implements SplitUnitService {
map.put("parentId",null); map.put("parentId",null);
} }
// 插入 // 插入
map.put("state",1);
return splitUnitMapper.addSplitInfo(map); return splitUnitMapper.addSplitInfo(map);
} }

31
src/main/resources/templates/pages/application/application-in.html

@ -444,6 +444,7 @@
params = remove(params, parentId); params = remove(params, parentId);
reparent.removeChild(parent); reparent.removeChild(parent);
}; };
//删除数组中指定元素 //删除数组中指定元素
function remove(arr, item) { function remove(arr, item) {
var result = []; var result = [];
@ -455,6 +456,7 @@
} }
return result; return result;
} }
// 用于选择生产日期 // 用于选择生产日期
selectDate = function (obj) { selectDate = function (obj) {
var name = obj.id; var name = obj.id;
@ -500,7 +502,7 @@
materialId.value = ""; materialId.value = "";
priceValue.value = ""; priceValue.value = "";
obj.value = ""; obj.value = "";
$("#barCode" + idNumber).remove(); $("#barCode" + idNumber).empty();
form.render(); form.render();
} else { } else {
@ -509,19 +511,22 @@
priceValue.value = d.price; priceValue.value = d.price;
// 获取物料与条形码的对应关系 // 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"]; var materialAndBarCodeList = d["materialAndBarCodeList"];
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
}
if (materialAndBarCodeList.length > 0) { if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码 // 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var id = barCodeInput.id; var id = barCodeInput.id;
$("#" + id).remove(); $("#" + id).remove();
$("#barCode" + idNumber).empty();
var barCode = $("#barCode" + idNumber); var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) { if (barCode.length > 0) {
barCode.empty(); barCode.empty();
} else { } else {
var barCodeSelect = ` var barCodeSelect = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `> <select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`; </select>`;
$("#" + barCodeImg.id).before(barCodeSelect); $("#" + barCodeImg.id).before(barCodeSelect);
} }
@ -531,11 +536,6 @@
$("#barCode" + idNumber).append(new Option(item.bmcode, item.bmcode));//往下拉菜单里添加元素 $("#barCode" + idNumber).append(new Option(item.bmcode, item.bmcode));//往下拉菜单里添加元素
}); });
form.render(); form.render();
} else {
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
}
} }
var shelfLife = d.shelfLife; var shelfLife = d.shelfLife;
if (shelfLife !== null && shelfLife !== undefined) { if (shelfLife !== null && shelfLife !== undefined) {
@ -569,7 +569,7 @@
var priceValue = priceItem[1]; var priceValue = priceItem[1];
// 条形码条码 // 条形码条码
var barCodeItem = barCodeChildren.childNodes[3]; var barCodeItem = barCodeChildren.childNodes[3];
mname = mname.split(",")[0];
layer.open({ layer.open({
type: 2, type: 2,
title: '弹窗内容', title: '弹窗内容',
@ -590,7 +590,7 @@
}, },
end: function () { end: function () {
var mid = materialId.value; var mid = materialId.value;
if(mid !== ''){ if (mid !== '') {
$.ajax({ $.ajax({
url: "/material/findMatrialById?mid=" + mid, url: "/material/findMatrialById?mid=" + mid,
type: "get", type: "get",
@ -605,14 +605,15 @@
codeValue.value = code; codeValue.value = code;
priceValue.value = material.price; priceValue.value = material.price;
var materialAndBarCodeList = material["materialAndBarCodeList"]; var materialAndBarCodeList = material["materialAndBarCodeList"];
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var idNumber = materialId.name.split("mid")[1];
if (materialAndBarCodeList.length > 0) { if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码 // 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var id = barCodeInput.id; var id = barCodeInput.id;
$("#" + id).remove(); $("#" + id).remove();
// barCodeInput.style = "display:none"; // barCodeInput.style = "display:none";
var idNumber = materialId.name.split("mid")[1];
var barCodeSelect = ` var barCodeSelect = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `> <select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`; </select>`;
@ -623,6 +624,8 @@
$("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 $("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
}); });
form.render(); form.render();
} else {
console.log(1)
} }
var shelfLife = material.shelfLife; var shelfLife = material.shelfLife;
if (shelfLife !== null && shelfLife !== undefined) { if (shelfLife !== null && shelfLife !== undefined) {

1
src/main/resources/templates/pages/application/application-in_scanQrCode.html

@ -667,6 +667,7 @@
var materialName = materialItem[1]; var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3]; var materialId = materialName.parentNode.parentNode.childNodes[3];
var mname = materialName.value; var mname = materialName.value;
mname = mname.split(",")[0];
layer.open({ layer.open({
type: 2, type: 2,
title: '弹窗内容', title: '弹窗内容',

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

@ -882,6 +882,8 @@
var barCodeChildren = parent.childNodes[9]; var barCodeChildren = parent.childNodes[9];
// 条形码条码 // 条形码条码
var barCodeItem = barCodeChildren.childNodes[3]; var barCodeItem = barCodeChildren.childNodes[3];
mname = mname.split(",")[0];
layer.open({ layer.open({
type: 2, type: 2,
title: '弹窗内容', title: '弹窗内容',

2
src/main/resources/templates/pages/application/application-transfer.html

@ -643,6 +643,8 @@
var mname = materialName.value; var mname = materialName.value;
var barCodeChildren = parent.childNodes[9]; var barCodeChildren = parent.childNodes[9];
var barCodeItem = barCodeChildren.childNodes[3]; var barCodeItem = barCodeChildren.childNodes[3];
mname = mname.split(",")[0];
layer.open({ layer.open({
type: 2, type: 2,
title: '弹窗内容', title: '弹窗内容',

2
src/main/resources/templates/pages/application/application-transfer_back.html

@ -378,6 +378,8 @@
var materialName = materialItem[1]; var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3]; var materialId = materialName.parentNode.parentNode.childNodes[3];
var mname = materialName.value; var mname = materialName.value;
mname = mname.split(",")[0];
layer.open({ layer.open({
type: 2, type: 2,
title: '弹窗内容', title: '弹窗内容',

113
src/main/resources/templates/pages/material/selectMaterial.html

@ -12,52 +12,46 @@
<body> <body>
<div id="test2" class="demo-tree"></div> <div id="test2" class="demo-tree"></div>
<input id="mname" name="mname" th:value="${mname}" style="display: none"> <input id="mname" name="mname" th:value="${mname}" style="display: none">
<input id="type" name="type" th:value="${type}" style="display: none">
<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> <script>
layui.use(['form', 'layer', 'dropdown', 'tree'], function () { layui.use(['form', 'layer', 'dropdown', 'tree'], function () {
var $ = layui.jquery, var $ = layui.jquery,
tree = layui.tree; tree = layui.tree;
var mname = $("#mname").val(); var mname = $("#mname").val();
var type = $("#type").val();
// 用于暂存当前查询结果 // 用于暂存当前查询结果
var tempData = []; var tempData = [];
var req = {}; var req = {};
req.mname = mname; req.mname = mname;
req.type = type;
var test = tree.render({ var test = tree.render({
elem: '#test2' elem: '#test2'
, data: [] , data: []
, click: function (obj) { , click: function (obj) {
var state = obj.state;
if (obj.data.children !== undefined) { if (obj.data.children !== undefined) {
if("open" === state){ if (mname === "") {
var id = obj.data.id; var state = obj.state;
var param = {}; var param = {};
let id = obj.data.id;
param.mtId = id; param.mtId = id;
param.mname = mname; if ("open" === state) {
param.type = type; param.mname = mname;
if(placeId !== "-1"){ param.type = "1";
param.placeId = placeId; addTreeChildren(param);
param.depositoryId = depositoryId; } else {
param.mtId = id;
closeTreeChildren(param);
return false
} }
addTreeChildren(param);
}else{
var param = {};
param.mtId = id;
closeTreeChildren(param);
return false
} }
}else{ } else {
materialName.value = obj.data.title; let midItem = $("#mid", window.parent.document)[0];
materialId.value = obj.data.id; let mnameItem = $("#mname",window.parent.document)[0];
midItem.value = obj.data.id;
mnameItem.value = obj.data.title;
var index = parent.layer.getFrameIndex(window.name); var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index); parent.layer.close(index);
} }
} }
}); });
@ -68,8 +62,8 @@
type: 'post', type: 'post',
dataType: 'json', dataType: 'json',
contentType: "application/json;charset=utf-8", contentType: "application/json;charset=utf-8",
beforeSend:function () { beforeSend: function () {
this.layerIndex = layer.load(0, { shade: [0.5, '#393D49'] }); this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
}, },
success: function (d) { success: function (d) {
layer.close(this.layerIndex); layer.close(this.layerIndex);
@ -82,53 +76,47 @@
}); });
$("#test2").on("click",".layui-tree-entry",function(event){ $("#test2").on("click", ".layui-tree-entry", function (event) {
var target = $(event.target); var target = $(event.target);
var id = this.parentNode.getAttribute("data-id"); var id = this.parentNode.getAttribute("data-id");
var context = target.context.className; var context = target.context.className;
if(context.includes("layui-tree-main")){ if (mname === "") {
var childrenName = this.childNodes[0].childNodes[0].childNodes[0].className; if (context.includes("layui-tree-main")) {
if(childrenName.includes("layui-icon-addition")){ var childrenName = this.childNodes[0].childNodes[0].childNodes[0].className;
// console.log("隐藏") if (childrenName.includes("layui-icon-addition")) {
var param = {}; // console.log("隐藏")
param.mtId = id; var param = {};
closeTreeChildren(param); param.mtId = id;
}else if(childrenName.includes("layui-icon-subtraction")){ closeTreeChildren(param);
var param = {}; } else if (childrenName.includes("layui-icon-subtraction")) {
param.mtId = id; var param = {};
param.mname = mname; param.mtId = id;
param.type = type; param.mname = mname;
if(placeId !== "-1"){ param.type = "1";
param.placeId = placeId; addTreeChildren(param);
param.depositoryId = depositoryId;
}
addTreeChildren(param);
}
}else if(context.includes("layui-icon")){
if(context.includes("layui-icon-addition")){
var param = {};
param.mtId = id;
closeTreeChildren(param);
// console.log("隐藏")
}else if(context.includes("layui-icon-subtraction")){
var param = {};
param.mtId = id;
param.mname = mname;
param.type = type;
if(placeId !== "-1"){
param.placeId = placeId;
param.depositoryId = depositoryId;
} }
addTreeChildren(param); } else if (context.includes("layui-icon")) {
if (context.includes("layui-icon-addition")) {
var param = {};
param.mtId = id;
closeTreeChildren(param);
// console.log("隐藏")
} else if (context.includes("layui-icon-subtraction")) {
var param = {};
param.mtId = id;
param.mname = mname;
param.type = "1";
addTreeChildren(param);
}
} }
} }
}); });
// 用于添加分支 // 用于添加分支
addTreeChildren = function(param) { addTreeChildren = function (param) {
$.ajax({ $.ajax({
url: "/material/getNewTreeForMtId", url: "/material/getNewTreeForMtId",
data: JSON.stringify(param), data: JSON.stringify(param),
@ -140,8 +128,7 @@
}, },
success: function (d) { success: function (d) {
layer.close(this.layerIndex); layer.close(this.layerIndex);
var data2 = d.data; tempData = d.data;
tempData = data2;
test.reload({ test.reload({
data: tempData data: tempData
}); });

127
src/main/resources/templates/pages/material/selectMaterialByApproval.html

@ -28,54 +28,55 @@
var depositoryId = $("#depositoryId").val(); var depositoryId = $("#depositoryId").val();
// 用于暂存当前查询结果 // 用于暂存当前查询结果
var tempData = []; var tempData = [];
var req = {}; var req = {};
req.mname = mname; req.mname = mname;
req.type = type; req.type = type;
if(placeId !== "-1"){ if (placeId !== "-1") {
req.placeId = placeId; req.placeId = placeId;
req.depositoryId = depositoryId; req.depositoryId = depositoryId;
} }
var test = tree.render({ var test = tree.render({
elem: '#test2' elem: '#test2'
, data: [] , data: []
, click: function (obj) { , click: function (obj) {
var state = obj.state; var state = obj.state;
if (obj.data.children !== undefined) { if (obj.data.children !== undefined) {
if("open" === state){ if (mname === "") {
var id = obj.data.id; if ("open" === state) {
var param = {}; var id = obj.data.id;
param.mtId = id; var param = {};
param.mname = mname; param.mtId = id;
param.type = type; param.mname = mname;
if(placeId !== "-1"){ param.type = type;
param.placeId = placeId; if (placeId !== "-1") {
param.depositoryId = depositoryId; param.placeId = placeId;
param.depositoryId = depositoryId;
}
addTreeChildren(param);
} else {
// console.log("隐藏");
var param = {};
param.mtId = id;
closeTreeChildren(param);
return false
} }
addTreeChildren(param);
}else{
// console.log("隐藏");
var param = {};
param.mtId = id;
closeTreeChildren(param);
return false
} }
}else{ }
var windowParent = $("#"+clickObj,window.parent.document)[0]; else {
var windowParent = $("#" + clickObj, window.parent.document)[0];
var children = windowParent.childNodes[5]; var children = windowParent.childNodes[5];
var materialItem = children.childNodes[3].childNodes[1].childNodes; var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1]; var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3]; var materialId = materialName.parentNode.parentNode.childNodes[3];
materialName.value = obj.data.title; materialName.value = obj.data.title;
materialId.value = obj.data.id; materialId.value = obj.data.id;
var index = parent.layer.getFrameIndex(window.name); var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index); parent.layer.close(index);
} }
} }
}); });
$.ajax({ $.ajax({
@ -84,8 +85,8 @@
type: 'post', type: 'post',
dataType: 'json', dataType: 'json',
contentType: "application/json;charset=utf-8", contentType: "application/json;charset=utf-8",
beforeSend:function () { beforeSend: function () {
this.layerIndex = layer.load(0, { shade: [0.5, '#393D49'] }); this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
}, },
success: function (d) { success: function (d) {
layer.close(this.layerIndex); layer.close(this.layerIndex);
@ -98,53 +99,57 @@
}); });
$("#test2").on("click",".layui-tree-entry",function(event){ $("#test2").on("click", ".layui-tree-entry", function (event) {
var target = $(event.target); var target = $(event.target);
var id = this.parentNode.getAttribute("data-id"); var id = this.parentNode.getAttribute("data-id");
var context = target.context.className; var context = target.context.className;
if(context.includes("layui-tree-main")){ if (mname === "") {
var childrenName = this.childNodes[0].childNodes[0].childNodes[0].className; if (context.includes("layui-tree-main")) {
if(childrenName.includes("layui-icon-addition")){ var childrenName = this.childNodes[0].childNodes[0].childNodes[0].className;
// console.log("隐藏") if (childrenName.includes("layui-icon-addition")) {
var param = {}; // console.log("隐藏")
param.mtId = id; var param = {};
closeTreeChildren(param); param.mtId = id;
}else if(childrenName.includes("layui-icon-subtraction")){ closeTreeChildren(param);
var param = {}; } else if (childrenName.includes("layui-icon-subtraction")) {
param.mtId = id; var param = {};
param.mname = mname; param.mtId = id;
param.type = type; param.mname = mname;
if(placeId !== "-1"){ param.type = type;
param.placeId = placeId; if (placeId !== "-1") {
param.depositoryId = depositoryId; param.placeId = placeId;
} param.depositoryId = depositoryId;
addTreeChildren(param); }
addTreeChildren(param);
}
}else if(context.includes("layui-icon")){
if(context.includes("layui-icon-addition")){
var param = {};
param.mtId = id;
closeTreeChildren(param);
// console.log("隐藏")
}else if(context.includes("layui-icon-subtraction")){
var param = {};
param.mtId = id;
param.mname = mname;
param.type = type;
if(placeId !== "-1"){
param.placeId = placeId;
param.depositoryId = depositoryId;
} }
addTreeChildren(param); } else if (context.includes("layui-icon")) {
if (context.includes("layui-icon-addition")) {
var param = {};
param.mtId = id;
closeTreeChildren(param);
// console.log("隐藏")
} else if (context.includes("layui-icon-subtraction")) {
var param = {};
param.mtId = id;
param.mname = mname;
param.type = type;
if (placeId !== "-1") {
param.placeId = placeId;
param.depositoryId = depositoryId;
}
addTreeChildren(param);
}
} }
} }
}); });
// 用于添加分支 // 用于添加分支
addTreeChildren = function(param) { addTreeChildren = function (param) {
$.ajax({ $.ajax({
url: "/material/getNewTreeForMtId", url: "/material/getNewTreeForMtId",
data: JSON.stringify(param), data: JSON.stringify(param),

468
src/main/resources/templates/pages/split/split-out.html

@ -0,0 +1,468 @@
<!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="brand" name="brand" autocomplete="off"/>
</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.id}}" 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" lay-event="applicationIn"> 入库申请
</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-normal 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'], function () {
var $ = layui.jquery,
form = layui.form,
table = layui.table,
upload = layui.upload;
table.render({
elem: "#currentTableId",
url: '/split/split_out',
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: 'state', title: '状态', minWidth: 80, templet: '#switchTpl'},
{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.mname !== '') {
req.mname = data.mname;
}
if (data.brand !== '') {
req.brand = data.brand;
}
if (data.materialTypeId != '') {
req.materialTypeId = data.materialTypeId;
}
if (data.state != '') {
req.state = data.state;
}
if (data.code != '') {
req.code = data.code
}
//执行搜索重载
table.reload('currentTableId', {
url: '/material/material',
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: '/material_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].id;
}
if (req.ids.length > 0) {
layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) {
$.ajax({
url: '/material/material_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: '/material/material',
page: {
curr: 1
}
}, 'data');
return false;
}
}
})
})
} else {
layer.msg("未选中记录,请确认!");
return false;
}
} else if (obj.event === 'applicationIn') {
// 入库申请
var checkStatus = table.checkStatus('currentTableId')
, data = checkStatus.data;
var req = {};
req.mids = [];
// 获取所有选中的id
for (i = 0, len = data.length; i < len; i++) {
req.mids[i] = data[i].id;
}
$.ajax({
url: "/material/temporaryValueForMaterial",
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 (d) {
layer.close(this.layerIndex);
if (d.status == 200) {
layer.open({
type: 2,
title: '入库',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['100%', '100%'],
move: '.layui-layer-title',
fixed: false,
content: '/applicationInByMaterial',
end: function () {
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}
})
}
}
})
}
});
//用于导入数据
var upLoader = upload.render({
elem: "#u_fileUpload", // 绑定元素
url: '/excel/importExcelByMaterial', // 上传接口
accept: 'file', // 允许上传的格式,
before: function (obj) { //obj参数包含的信息,跟 choose回调完全一致,可参见上文。
layer.load(); //上传loading
},
exts: 'xls|xlsx|csv',
done: function (res) {
layer.closeAll('loading'); //关闭loading
//如果上传成功
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
}
if (res.code === 200) {
for (let i = 0; i < res.data.dataList.length; i++) {
var mname = res.data.dataList[i]["mname"];
var code = res.data.dataList[i]["code"] == null || res.data.dataList[i]["code"] == undefined ? "" : res.data.dataList[i]["code"];
var version = res.data.dataList[i]["version"] == null || res.data.dataList[i]["version"] == undefined ? "" : res.data.dataList[i]["version"];
var texture = res.data.dataList[i]["texture"] == null || res.data.dataList[i]["texture"] == undefined ? "" : res.data.dataList[i]["texture"];
var unit = res.data.dataList[i]["unit"] == null || res.data.dataList[i]["unit"] == undefined ? "" : res.data.dataList[i]["unit"];
var typeId = res.data.dataList[i]["typeId"] == null || res.data.dataList[i]["typeId"] == undefined ? "" : res.data.dataList[i]["typeId"];
var show = "<p style='color: #00FF00'>" + mname + " " + version + " " + code + " " + texture + " " + unit + " " + typeId + " :成功" + "</p>";
re += show
}
layer.open({
type: 1,
skin: 'layui-layer-rim', //加上边框
area: ['500px', '500px'], //宽高
content: re
})
} else {
layer.msg(res.msg)
}
},
error: function () {
layer.closeAll('loading'); //关闭loading
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') {
var index = layer.open({
title: '仓库信息详情',
type: 2,
shade: 0.2,
maxmin: true,
shadeClose: true,
area: ['100%', '100%'],
content: '/material_view?id=' + data.id,
end: function () {
//执行搜索重载
table.reload('currentTableId', {
url: '/material/material',
page: {
curr: 1
}
}, 'data');
}
});
$(window).on("resize", function () {
layer.full(index);
});
return false;
} else if (obj.event === 'delete') {
var req = {};
req.id = data.id;
layer.confirm('真的删除么', {icon: 2, title: '提示'}, function (index) {
$.ajax({
url: '/material/material_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 === 'realDelete') { //彻底删除
var req = {};
req.id = data.id;
layer.confirm('该操作会造成不可逆后果,是否继续?', {
btn: ['继续', '取消'] //按钮
}, function () {
$.ajax({
url: '/material/realDeleteMaterial',
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: '/repository/warehouseRecord',
page: {
curr: 1
},
where: {"parentId": parentId}
});
});
} else if (obj.event == 'manager') {
layer.open({
type: 2,
title: '仓管员信息',
shadeClose: true,
shade: false,
maxmin: true, //开启最大化最小化按钮
area: ['893px', '600px'],
content: '/ManagerViewByMid?id=' + data.id
});
}
});
//监听状态操作
form.on('switch(changeState)', function (obj) {
var req = new Map;
if (obj.elem.checked) {
req["state"] = 1
}
req["id"] = this.value;
$.ajax({
url: "/material/material_edit",
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 () {
window.location = '/material_out'
})
}
}
})
});
});
</script>
</body>
</html>

450
src/main/resources/templates/pages/split/split_add.html

@ -0,0 +1,450 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>拆单</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/js/lay-module/step-lay/step.css" media="all">
</head>
<body>
<style>
.inputdiv {
display: flex;
background-color: #fff;
height: 38px;
line-height: 38px;
border: 1px solid rgb(238, 238, 238);
}
.layui-form-label {
padding: 9px 0px;
text-align: left;
}
.layui-input-block {
margin-left: 80px;
}
.layui-fluid {
padding-left: 0px;
padding-right: 0px;
}
.inputdiv .layui-unselect {
border-style: none;
width: 100%;
}
</style>
<div class="layuimini-container">
<div class="layuimini-main">
<fieldset class="table-search-fieldset" style="padding: 10px 2px 5px;">
<legend>物料拆单</legend>
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-body" style="padding-left:0px;padding-right:0px">
<div>
<form class="layui-form layui-form-pane"
style="margin: 0 auto;max-width: 700px;padding-top: 5px; padding-bottom: 50px"
lay-filter="formStep">
<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"
id="mname" onblur="selectMaterialByName(this)"
lay-verify="required"/>
<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"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="code" name="code" type="text" placeholder="请填写入物料编码" value=""
onblur="selectCode(this)"
class="layui-input" lay-verify="required"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16"
id="qrCodeImg"
style="margin-top: 10px" onclick="scanCode(this)">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">条形编码:</label>
<div class="layui-input-block" style="margin: 0px;">
<div class="inputdiv">
<input id="barCode" name="barCode" type="text" readonly
value=""
class="layui-input"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16"
id="barCodeImg"
style="margin-top: 10px" onclick="scanBarCode(this)">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">规格型号:</label>
<div class="layui-input-block">
<input type="text" name="version" class="layui-input" id="version" readonly/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">物料类型:</label>
<div class="layui-input-block">
<input type="text" name="typeName" class="layui-input" id="typeName" readonly
lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">计量单位:</label>
<div class="layui-input-block">
<input type="text" name="oldUnit" class="layui-input" id="unit" readonly
lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">拆单单位:</label>
<div class="layui-input-block">
<input type="text" name="newUnit" class="layui-input" id="newUnit"
lay-verify="required"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">对应数目:</label>
<div class="layui-input-block">
<input type="text" name="quantity" class="layui-input" id="quantity"
lay-verify="number"/>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" type="button" lay-submit lay-filter="formStep">
&emsp;提交&emsp;
</button>
</div>
</div>
</form>
</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 selectMaterialByName() {
}
// 打开物料选择树
function selectMaterial() {
}
// 用于编码查询
function selectCode(obj) {
}
// 用于扫描条形码
function scanBarCode(obj) {
}
// 用于扫码入库
function scanCode(obj) {
}
layui.use(['form', 'layer'], function () {
var $ = layui.jquery,
form = layui.form,
layer = layui.layer;
form.on('submit(formStep)', function (data) {
data = data.field;
$.ajax({
url:"/split/splitAdd",
data:JSON.stringify(data),
dataType:"json",
type:"post",
contentType: "application/json;charset=utf-8",
success:function (res) {
layer.close(this.layerIndex);
if (data.status >= 300) {
layer.msg(data.statusInfo.detail,{
icon:6,
time:1000
},function () {
window.location="/split_add"
});//失败的表情
} else {
layer.msg("添加成功!", {
icon: 6,//成功的表情
time: 1000
}, //1秒关闭(如果不配置,默认是3秒)
function(){
//do something
window.location="/split_add"
});
}
}
})
});
// 通过名称查询物料
selectMaterialByName = function (obj) {
let materialName = $("#mname");
var data = materialName.val();
var req = {};
req.mname = data;
let materialId = $("#mid");
let codeValue = $("#code");
let version = $("#version");
let typeName = $("#typeName");
let unit = $("#unit");
$.ajax({
url: "/material/findMaterialByCondition",
type: "post",
dataType: 'json',
data: JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
if (d.count > 1) {
layer.msg("请点击右侧搜索确定物品");
materialId.val("");
codeValue.val("");
version.val("");
typeName.val("");
unit.val("");
return false;
} else if (d.count === 0) {
layer.msg("没有该物品,请确认输入是否正确");
materialId.val("");
codeValue.val("");
materialName.val("");
version.val("");
typeName.val("");
unit.val("");
return false;
} else {
var material = d.data[0];
materialName.val(material.mname);
materialId.val(material.mid);
codeValue.val(material.code);
version.val(material.version);
typeName.val(material.typeName);
unit.val(material.unit);
}
}
});
};
// 打开物料选择树
selectMaterial = function (obj) {
let mname = $("#mname").val();
mname = mname.split(",")[0];
layer.open({
type: 2,
title: '弹窗内容',
skin: 'layui-layer-rim',
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
content: '/selectMaterial?mname=' + mname,
move: '.layui-layer-title',
fixed: false,
success: function (layero, index) {
let children = layero.children();
let content = $(children[1]);
let iframeChildren = $(content.children());
content.css('height', '100%');
iframeChildren.css('height', '100%');
},
end: function () {
var mid = $("#mid").val();
if (mid !== '') {
$.ajax({
url: "/material/findMatrialById?mid=" + mid,
type: "get",
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var material = d.data.materialById;
var code = material.code;
if (code === undefined) {
code = "";
}
$("#code").val(code);
$("#version").val(material.version);
$("#unit").val(material.unit);
$("#typeName").val(material.typeName);
var materialAndBarCodeList = material["materialAndBarCodeList"];
if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码
$("#barCode").remove();
var barCodeSelect = `
<select id="barCode" name= "barCode"></select>`;
$("#barCodeImg").before(barCodeSelect);
form.render();
$.each(materialAndBarCodeList, function (index, item) {
$("#barCode").append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
form.render();
}
}
});
}
}
});
};
scanCodeInStorage = function (obj) {
var objIdNumber = obj.id.split("qrCodeImg")[1];
parent.wx.scanQRCode({
desc: 'scanQRCode desc',
needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
scanType: ["qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有
success: function (res) {
// 回调
var result = res.resultStr;//当needResult为1时返回处理结果
var req = {};
req.qrCode = result;
$("#qrCode" + objIdNumber).val(result);
$.ajax({
url: "/material/qywxApplicationInScanQrCode",
type: "post",
dataType: 'json',
data: JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
}
})
}
})
};
scanBarCode = function (obj) {
parent.wx.scanQRCode({
desc: 'scanQRCode desc',
needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
scanType: ["barCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有
success: function (res) {
// 回调
var result = res.resultStr;//当needResult为1时返回处理结果
var req = {};
req.qrCode = result;
$.ajax({
url: "/material/qywxApplicationInScanBarCode",
type: "post",
dataType: 'json',
data: JSON.stringify(req),
contentType: "application/json;charset=utf-8",
success: function (d) {
}
})
},
error: function (res) {
if (res.errMsg.indexOf('function_not_exist') > 0) {
alert('版本过低请升级')
}
alert(res)
}
});
};
// 用于实现通过编码查询物料
selectCode = function (obj) {
// 输入code
var code = obj.value;
var req = {};
req.code = code;
req.type = "in";
$.ajax({
url: "/material/findMatrialByCode",
type: "get",
dataType: 'json',
data: req,
contentType: "application/json;charset=utf-8",
success: function (d) {
var d = d.data;
if (d == null) {
layer.msg("没有该编码,请确认是否输入正确");
$("#mname").val("");
$("#mid").val("");
$("#code").val("");
$("#barCode").val("");
$("#version").val("");
$("#unit").val("");
$("#typeName").val("");
form.render();
} else {
$("#mname").val(d.mname);
$("#mid").val( d.mid);
$("#version").val(d.version);
$("#unit").val(d.unit);
$("#typeName").val(d.typeName);
// 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"];
if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码
$("#barCode").remove();
$(".layui-unselect").remove();
var barCodeSelect = `
<select id="barCode" name="barCode">
</select>`;
$("#barCodeImg").before(barCodeSelect);
form.render();
$.each(materialAndBarCodeList, function (index, item) {
$("#barCode").append(new Option(item.bmcode, item.bmcode));//往下拉菜单里添加元素
});
form.render();
} else {
$("#barCode").remove();
$(".layui-unselect").remove();
}
}
}
});
};
})
</script>
</body>
</html>

273
src/test/java/com/dreamchaser/depository_manage/TestForSelectMaterialByName.java

@ -0,0 +1,273 @@
package com.dreamchaser.depository_manage;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.entity.Material;
import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.mapper.MaterialMapper;
import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper;
import com.dreamchaser.depository_manage.service.MaterialService;
import org.apache.poi.ss.formula.functions.T;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.*;
import java.util.concurrent.*;
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestForSelectMaterialByName {
@Autowired
MaterialService materialService;
@Autowired
MaterialMapper materialMapper;
@Autowired
MaterialTypeMapper materialTypeMapper;
@Autowired
RedisTemplate<String, String> redisTemplate;
@org.junit.Test
public void test1() {
List<Object> list = buildTreeForSelectName(InitTreeForSelectName("切四A菇"));
System.out.println(JSONObject.toJSONString(list));
}
/**
* 用于深度拷贝列表
*
* @param oldList
* @param <T>
* @return
*/
public static <T> List<T> deepCopy(List<T> oldList) {
List<T> newList = (List<T>) Arrays.asList(new Object[oldList.size()]);
Collections.copy(newList, oldList);
return newList;
}
/**
* 用于构造物料树结构(通过物料名称搜索)
*
* @return
*/
public List<Object> InitTreeForSelectName(String mname) {
// 获取所有物料类型
List<MaterialType> materialTypeAll = materialTypeMapper.findMaterialTypeAll();
// 物料总数
Integer totalVal = materialTypeAll.size();
// 定义分页数量
double size = 100.0;
// 定义线程数
Integer threadSize = (int) Math.ceil(totalVal / size);
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
// 树结构结果集
List<Object> list = new ArrayList<>();
// 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
// 物料类型id列表
List<Long> materialTypeList = new ArrayList<>();
for (int i = 0; i < materialTypeAll.size(); i++) {
// 获取当前类型
MaterialType materialType = materialTypeAll.get(i);
if (((i + 1) % 100) == 0) { // 如果有100个开启线程进行处理
materialTypeList.add(materialType.getOldId());
Future<Object> future = completionService.submit(new TaskTestForSelectMname(materialTypeList, mname));
futureList.add(future); // 添加到结果集
materialTypeList = new ArrayList<>(); // 情况列表
} else {
// 添加id到列表中
materialTypeList.add(materialType.getOldId());
}
}
if (materialTypeList.size() > 0) {
// 如果有剩余,开启线程进行处理
Future<Object> future = completionService.submit(new TaskTestForSelectMname(materialTypeList, mname));
futureList.add(future);
}
// 3.获取结果
for (int i = 0; i < threadSize; i++) {
Object result = null;
try {
result = completionService.take().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
list.addAll((Collection<?>) result);
}
// 进行最终的封装
return list;
}
// 用于执行测试新算法(通过物料名称搜索)
class TaskTestForSelectMname implements Callable<Object> {
// 待处理的物料类型id列表
List<Long> materialTypeIdList;
String mname;
public TaskTestForSelectMname(List<Long> materialTypeByCondition, String mname) {
this.materialTypeIdList = materialTypeByCondition;
this.mname = mname;
}
@Override
public Object call() throws Exception {
// 定义树结构结果集
List<Object> list = new ArrayList<>();
// 查询当前物料类型id列表中的物料类型
Map<String, Object> paramForMnameAndMtid = new HashMap<>();
paramForMnameAndMtid.put("list", materialTypeIdList);
paramForMnameAndMtid.put("mname", mname);
List<Material> materialByTypeIds = materialMapper.findMaterialByTypeIdsAndMname(paramForMnameAndMtid);
// 查询当前物料类型所包含的物料
List<MaterialType> materialTypeByOldIds = materialTypeMapper.findMaterialTypeByOldIds(materialTypeIdList);
// 定义线程集
ExecutorService exs = Executors.newFixedThreadPool(materialTypeByOldIds.size());
// 定义线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
for (int i = 0; i < materialTypeByOldIds.size(); i++) {
// 获取当前物料类型
MaterialType mt = materialTypeByOldIds.get(i);
// 开启对应线程
Future<Object> future = completionService.submit(new MtTaskTestForSelectMname(mt, materialByTypeIds, mname));
// 添加到线程结果列表
futureList.add(future);
}
// 3.获取结果
for (int i = 0; i < materialTypeIdList.size(); i++) {
Object result = null;
try {
result = completionService.take().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
list.add(result);
}
return list;
}
}
// 用于执行测试新算法(通过物料名称搜索)
class MtTaskTestForSelectMname implements Callable<Object> {
MaterialType mt; // 物料类型
List<Material> materiaList; // 物料列表
String mname;
public MtTaskTestForSelectMname(MaterialType mt, List<Material> materiaList, String mname) {
this.mt = mt;
this.materiaList = materiaList;
this.mname = mname;
}
@Override
public Object call() throws Exception {
// 开启对应数量的线程
List<Material> materialList = new ArrayList<>();
for (int i = 0; i < materiaList.size(); i++) {
Material material = materiaList.get(i);
// 如果当前物料是当前物料类型下的物料
if (Long.compare(material.getMaterialTypeId(), mt.getOldId()) == 0) {
materialList.add(material);
}
}
// 将物料打包成树结构对应结果
List<Object> objectList = AddMaterialByTypeForSelectMname(materialList);
// 封装成对应的结构
Map<String, Object> objectMap = InitTreeMenusForSelectName(mt, objectList);
return objectMap;
}
}
// 构造树形组件数据模板(通过物料名称搜索)
public Map<String, Object> InitTreeMenusForSelectName(MaterialType mt, List<Object> children) {
if (mt != null) {
Map<String, Object> map = new HashMap<>();
map.put("title", mt.getTname());
map.put("id", mt.getOldId());
map.put("parentId", mt.getParentId());
map.put("children", children);
return map;
} else {
return null;
}
}
// 在类别后添加物料名称(通过物料名称搜索)
public List<Object> AddMaterialByTypeForSelectMname(List<Material> materialList) {
List<Object> result = new ArrayList<>();
for (int i = 0; i < materialList.size(); i++) {
Material material = materialList.get(i);
Map<String, Object> map = new HashMap<>();
String version = material.getVersion();
if (version == null) {
version = "";
}
String title = material.getMname() + ",规格型号: " + version;
map.put("title", title);
map.put("id", material.getId());
result.add(map);
}
return result;
}
/**
* 用于构造树结构通过物料名称搜索)
*
* @param list 树列表
* @return
*/
public List<Object> buildTreeForSelectName(List<Object> list) {
// 定义树结构
List<Object> result = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
// 构造为jsonObject类
JSONObject jsonObject = new JSONObject((Map<String, Object>) list.get(i));
JSONArray children = jsonObject.getJSONArray("children");
if(children.size() > 0){
result.add(jsonObject);
}
// // 获取当前父级id
// Long parentId1 = jsonObject.getLong("parentId");
// if (Long.compare(parentId, parentId1) == 0) { // 如果当前类型是其父类
// List<Object> objectList = buildTreeForSelectName(list, jsonObject.getLong("id")); // 获取当前类型的子类
// JSONArray children = jsonObject.getJSONArray("children");
// children.addAll(objectList);
// result.add(jsonObject);
// }
}
return result;
}
}

17
target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml

@ -472,7 +472,7 @@
</select> </select>
<select id="findMaterialByTypeIds" resultMap="InventoryMap" parameterType="list"> <select id="findMaterialByTypeIds" resultMap="materialMap" parameterType="list">
SELECT SELECT
<include refid="allColumns" /> <include refid="allColumns" />
from material m from material m
@ -484,6 +484,21 @@
and state = 1; and state = 1;
</select> </select>
<select id="findMaterialByTypeIdsAndMname" resultMap="materialMap" parameterType="map">
SELECT
<include refid="allColumns" />
from material m
where
m.mname like concat('%',#{mname},'%')
and
m.type_id in
<foreach collection="list" index="index" item="item" open="("
separator="," close=")">
#{item}
</foreach>
and state = 1;
</select>
<select id="findMaterialByDepositorysAndType" resultMap="InventoryMap" parameterType="map"> <select id="findMaterialByDepositorysAndType" resultMap="InventoryMap" parameterType="map">
SELECT SELECT
<include refid="allColumnsAndTypeNameOnViewByInventory" /> <include refid="allColumnsAndTypeNameOnViewByInventory" />

40
target/classes/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml

@ -25,6 +25,27 @@
<result column="saveQuantity" property="saveQuantity" jdbcType="INTEGER"/> <result column="saveQuantity" property="saveQuantity" jdbcType="INTEGER"/>
</resultMap> </resultMap>
<resultMap id="splitInfoPMap" type="com.dreamchaser.depository_manage.pojo.SplitInfoP">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="mid" property="mid" jdbcType="INTEGER" />
<result column="quantity" property="quantity" jdbcType="INTEGER" />
<result column="sparentId" property="sparentId" jdbcType="INTEGER" />
<result column="sstate" property="sstate" jdbcType="INTEGER" />
<result column="mstate" property="mstate" jdbcType="INTEGER" />
<result column="oldUnit" property="oldUnit" jdbcType="VARCHAR" />
<result column="newUnit" property="newUnit" jdbcType="VARCHAR" />
<result column="version" property="version" jdbcType="VARCHAR" />
<result column="texture" property="texture" jdbcType="VARCHAR" />
<result column="mcode" property="mcode" jdbcType="VARCHAR" />
<result column="mname" property="mname" jdbcType="VARCHAR" />
<result column="typeName" property="typeName" jdbcType="VARCHAR" />
<result column="shelfLife" property="shelfLife" jdbcType="INTEGER"/>
<result column="productionPlace" property="productionPlace" jdbcType="VARCHAR"/>
<result column="brand" property="brand" jdbcType="VARCHAR"/>
<result column="remark" property="remark" jdbcType="VARCHAR"/>
</resultMap>
<sql id="splitInfoAllColumns"> <sql id="splitInfoAllColumns">
s.id,s.mid,s.oldUnit,s.newUnit,s.quantity,s.parentId,s.state s.id,s.mid,s.oldUnit,s.newUnit,s.quantity,s.parentId,s.state
</sql> </sql>
@ -33,6 +54,10 @@
si.id,si.iid,si.sid.si.outQuantity,si.inQuantity,si.saveQuantity si.id,si.iid,si.sid.si.outQuantity,si.inQuantity,si.saveQuantity
</sql> </sql>
<sql id="splitInfoPAllColumns">
id,mid,oldUnit,newUnit,quantity,sparentId,sstate,shelfLife,productionPlace,brand,remark,mname,typeName,mcode,mstate,version,texture
</sql>
<select id="findSplitInfoByMidAndUnit" parameterType="map" resultMap="splitInfoMap"> <select id="findSplitInfoByMidAndUnit" parameterType="map" resultMap="splitInfoMap">
select select
<include refid="splitInfoAllColumns"/> <include refid="splitInfoAllColumns"/>
@ -162,6 +187,21 @@
</foreach> </foreach>
</delete> </delete>
<select id="findSplitInfoPByCondition" parameterType="map" resultMap="splitInfoPMap">
select
<include refid="splitInfoPAllColumns"/>
from findsplitInfo
where 1 = 1
<if test="mname != null and mname != ''">
and mname like concat('%',#{mname},'%')
</if>
<if test="oldUnit != null and oldUnit != ''">
and oldUnit like concat('%',#{oldUnit},'%')
</if>
<if test="newUnit != null and newUnit != ''">
and newUnit like concat('%',#{newUnit},'%')
</if>
</select>

31
target/classes/templates/pages/application/application-in.html

@ -444,6 +444,7 @@
params = remove(params, parentId); params = remove(params, parentId);
reparent.removeChild(parent); reparent.removeChild(parent);
}; };
//删除数组中指定元素 //删除数组中指定元素
function remove(arr, item) { function remove(arr, item) {
var result = []; var result = [];
@ -455,6 +456,7 @@
} }
return result; return result;
} }
// 用于选择生产日期 // 用于选择生产日期
selectDate = function (obj) { selectDate = function (obj) {
var name = obj.id; var name = obj.id;
@ -500,7 +502,7 @@
materialId.value = ""; materialId.value = "";
priceValue.value = ""; priceValue.value = "";
obj.value = ""; obj.value = "";
$("#barCode" + idNumber).remove(); $("#barCode" + idNumber).empty();
form.render(); form.render();
} else { } else {
@ -509,19 +511,22 @@
priceValue.value = d.price; priceValue.value = d.price;
// 获取物料与条形码的对应关系 // 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"]; var materialAndBarCodeList = d["materialAndBarCodeList"];
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
}
if (materialAndBarCodeList.length > 0) { if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码 // 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3]; var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var id = barCodeInput.id; var id = barCodeInput.id;
$("#" + id).remove(); $("#" + id).remove();
$("#barCode" + idNumber).empty();
var barCode = $("#barCode" + idNumber); var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) { if (barCode.length > 0) {
barCode.empty(); barCode.empty();
} else { } else {
var barCodeSelect = ` var barCodeSelect = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `> <select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`; </select>`;
$("#" + barCodeImg.id).before(barCodeSelect); $("#" + barCodeImg.id).before(barCodeSelect);
} }
@ -531,11 +536,6 @@
$("#barCode" + idNumber).append(new Option(item.bmcode, item.bmcode));//往下拉菜单里添加元素 $("#barCode" + idNumber).append(new Option(item.bmcode, item.bmcode));//往下拉菜单里添加元素
}); });
form.render(); form.render();
} else {
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
}
} }
var shelfLife = d.shelfLife; var shelfLife = d.shelfLife;
if (shelfLife !== null && shelfLife !== undefined) { if (shelfLife !== null && shelfLife !== undefined) {
@ -569,7 +569,7 @@
var priceValue = priceItem[1]; var priceValue = priceItem[1];
// 条形码条码 // 条形码条码
var barCodeItem = barCodeChildren.childNodes[3]; var barCodeItem = barCodeChildren.childNodes[3];
mname = mname.split(",")[0];
layer.open({ layer.open({
type: 2, type: 2,
title: '弹窗内容', title: '弹窗内容',
@ -590,7 +590,7 @@
}, },
end: function () { end: function () {
var mid = materialId.value; var mid = materialId.value;
if(mid !== ''){ if (mid !== '') {
$.ajax({ $.ajax({
url: "/material/findMatrialById?mid=" + mid, url: "/material/findMatrialById?mid=" + mid,
type: "get", type: "get",
@ -605,14 +605,15 @@
codeValue.value = code; codeValue.value = code;
priceValue.value = material.price; priceValue.value = material.price;
var materialAndBarCodeList = material["materialAndBarCodeList"]; var materialAndBarCodeList = material["materialAndBarCodeList"];
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var idNumber = materialId.name.split("mid")[1];
if (materialAndBarCodeList.length > 0) { if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码 // 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var id = barCodeInput.id; var id = barCodeInput.id;
$("#" + id).remove(); $("#" + id).remove();
// barCodeInput.style = "display:none"; // barCodeInput.style = "display:none";
var idNumber = materialId.name.split("mid")[1];
var barCodeSelect = ` var barCodeSelect = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `> <select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`; </select>`;
@ -623,6 +624,8 @@
$("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素 $("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
}); });
form.render(); form.render();
} else {
console.log(1)
} }
var shelfLife = material.shelfLife; var shelfLife = material.shelfLife;
if (shelfLife !== null && shelfLife !== undefined) { if (shelfLife !== null && shelfLife !== undefined) {

1
target/classes/templates/pages/application/application-in_scanQrCode.html

@ -667,6 +667,7 @@
var materialName = materialItem[1]; var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3]; var materialId = materialName.parentNode.parentNode.childNodes[3];
var mname = materialName.value; var mname = materialName.value;
mname = mname.split(",")[0];
layer.open({ layer.open({
type: 2, type: 2,
title: '弹窗内容', title: '弹窗内容',

2
target/classes/templates/pages/application/application-out.html

@ -882,6 +882,8 @@
var barCodeChildren = parent.childNodes[9]; var barCodeChildren = parent.childNodes[9];
// 条形码条码 // 条形码条码
var barCodeItem = barCodeChildren.childNodes[3]; var barCodeItem = barCodeChildren.childNodes[3];
mname = mname.split(",")[0];
layer.open({ layer.open({
type: 2, type: 2,
title: '弹窗内容', title: '弹窗内容',

2
target/classes/templates/pages/application/application-transfer.html

@ -643,6 +643,8 @@
var mname = materialName.value; var mname = materialName.value;
var barCodeChildren = parent.childNodes[9]; var barCodeChildren = parent.childNodes[9];
var barCodeItem = barCodeChildren.childNodes[3]; var barCodeItem = barCodeChildren.childNodes[3];
mname = mname.split(",")[0];
layer.open({ layer.open({
type: 2, type: 2,
title: '弹窗内容', title: '弹窗内容',

2
target/classes/templates/pages/application/application-transfer_back.html

@ -378,6 +378,8 @@
var materialName = materialItem[1]; var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3]; var materialId = materialName.parentNode.parentNode.childNodes[3];
var mname = materialName.value; var mname = materialName.value;
mname = mname.split(",")[0];
layer.open({ layer.open({
type: 2, type: 2,
title: '弹窗内容', title: '弹窗内容',

113
target/classes/templates/pages/material/selectMaterial.html

@ -12,52 +12,46 @@
<body> <body>
<div id="test2" class="demo-tree"></div> <div id="test2" class="demo-tree"></div>
<input id="mname" name="mname" th:value="${mname}" style="display: none"> <input id="mname" name="mname" th:value="${mname}" style="display: none">
<input id="type" name="type" th:value="${type}" style="display: none">
<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> <script>
layui.use(['form', 'layer', 'dropdown', 'tree'], function () { layui.use(['form', 'layer', 'dropdown', 'tree'], function () {
var $ = layui.jquery, var $ = layui.jquery,
tree = layui.tree; tree = layui.tree;
var mname = $("#mname").val(); var mname = $("#mname").val();
var type = $("#type").val();
// 用于暂存当前查询结果 // 用于暂存当前查询结果
var tempData = []; var tempData = [];
var req = {}; var req = {};
req.mname = mname; req.mname = mname;
req.type = type;
var test = tree.render({ var test = tree.render({
elem: '#test2' elem: '#test2'
, data: [] , data: []
, click: function (obj) { , click: function (obj) {
var state = obj.state;
if (obj.data.children !== undefined) { if (obj.data.children !== undefined) {
if("open" === state){ if (mname === "") {
var id = obj.data.id; var state = obj.state;
var param = {}; var param = {};
let id = obj.data.id;
param.mtId = id; param.mtId = id;
param.mname = mname; if ("open" === state) {
param.type = type; param.mname = mname;
if(placeId !== "-1"){ param.type = "1";
param.placeId = placeId; addTreeChildren(param);
param.depositoryId = depositoryId; } else {
param.mtId = id;
closeTreeChildren(param);
return false
} }
addTreeChildren(param);
}else{
var param = {};
param.mtId = id;
closeTreeChildren(param);
return false
} }
}else{ } else {
materialName.value = obj.data.title; let midItem = $("#mid", window.parent.document)[0];
materialId.value = obj.data.id; let mnameItem = $("#mname",window.parent.document)[0];
midItem.value = obj.data.id;
mnameItem.value = obj.data.title;
var index = parent.layer.getFrameIndex(window.name); var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index); parent.layer.close(index);
} }
} }
}); });
@ -68,8 +62,8 @@
type: 'post', type: 'post',
dataType: 'json', dataType: 'json',
contentType: "application/json;charset=utf-8", contentType: "application/json;charset=utf-8",
beforeSend:function () { beforeSend: function () {
this.layerIndex = layer.load(0, { shade: [0.5, '#393D49'] }); this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
}, },
success: function (d) { success: function (d) {
layer.close(this.layerIndex); layer.close(this.layerIndex);
@ -82,53 +76,47 @@
}); });
$("#test2").on("click",".layui-tree-entry",function(event){ $("#test2").on("click", ".layui-tree-entry", function (event) {
var target = $(event.target); var target = $(event.target);
var id = this.parentNode.getAttribute("data-id"); var id = this.parentNode.getAttribute("data-id");
var context = target.context.className; var context = target.context.className;
if(context.includes("layui-tree-main")){ if (mname === "") {
var childrenName = this.childNodes[0].childNodes[0].childNodes[0].className; if (context.includes("layui-tree-main")) {
if(childrenName.includes("layui-icon-addition")){ var childrenName = this.childNodes[0].childNodes[0].childNodes[0].className;
// console.log("隐藏") if (childrenName.includes("layui-icon-addition")) {
var param = {}; // console.log("隐藏")
param.mtId = id; var param = {};
closeTreeChildren(param); param.mtId = id;
}else if(childrenName.includes("layui-icon-subtraction")){ closeTreeChildren(param);
var param = {}; } else if (childrenName.includes("layui-icon-subtraction")) {
param.mtId = id; var param = {};
param.mname = mname; param.mtId = id;
param.type = type; param.mname = mname;
if(placeId !== "-1"){ param.type = "1";
param.placeId = placeId; addTreeChildren(param);
param.depositoryId = depositoryId;
}
addTreeChildren(param);
}
}else if(context.includes("layui-icon")){
if(context.includes("layui-icon-addition")){
var param = {};
param.mtId = id;
closeTreeChildren(param);
// console.log("隐藏")
}else if(context.includes("layui-icon-subtraction")){
var param = {};
param.mtId = id;
param.mname = mname;
param.type = type;
if(placeId !== "-1"){
param.placeId = placeId;
param.depositoryId = depositoryId;
} }
addTreeChildren(param); } else if (context.includes("layui-icon")) {
if (context.includes("layui-icon-addition")) {
var param = {};
param.mtId = id;
closeTreeChildren(param);
// console.log("隐藏")
} else if (context.includes("layui-icon-subtraction")) {
var param = {};
param.mtId = id;
param.mname = mname;
param.type = "1";
addTreeChildren(param);
}
} }
} }
}); });
// 用于添加分支 // 用于添加分支
addTreeChildren = function(param) { addTreeChildren = function (param) {
$.ajax({ $.ajax({
url: "/material/getNewTreeForMtId", url: "/material/getNewTreeForMtId",
data: JSON.stringify(param), data: JSON.stringify(param),
@ -140,8 +128,7 @@
}, },
success: function (d) { success: function (d) {
layer.close(this.layerIndex); layer.close(this.layerIndex);
var data2 = d.data; tempData = d.data;
tempData = data2;
test.reload({ test.reload({
data: tempData data: tempData
}); });

127
target/classes/templates/pages/material/selectMaterialByApproval.html

@ -28,54 +28,55 @@
var depositoryId = $("#depositoryId").val(); var depositoryId = $("#depositoryId").val();
// 用于暂存当前查询结果 // 用于暂存当前查询结果
var tempData = []; var tempData = [];
var req = {}; var req = {};
req.mname = mname; req.mname = mname;
req.type = type; req.type = type;
if(placeId !== "-1"){ if (placeId !== "-1") {
req.placeId = placeId; req.placeId = placeId;
req.depositoryId = depositoryId; req.depositoryId = depositoryId;
} }
var test = tree.render({ var test = tree.render({
elem: '#test2' elem: '#test2'
, data: [] , data: []
, click: function (obj) { , click: function (obj) {
var state = obj.state; var state = obj.state;
if (obj.data.children !== undefined) { if (obj.data.children !== undefined) {
if("open" === state){ if (mname === "") {
var id = obj.data.id; if ("open" === state) {
var param = {}; var id = obj.data.id;
param.mtId = id; var param = {};
param.mname = mname; param.mtId = id;
param.type = type; param.mname = mname;
if(placeId !== "-1"){ param.type = type;
param.placeId = placeId; if (placeId !== "-1") {
param.depositoryId = depositoryId; param.placeId = placeId;
param.depositoryId = depositoryId;
}
addTreeChildren(param);
} else {
// console.log("隐藏");
var param = {};
param.mtId = id;
closeTreeChildren(param);
return false
} }
addTreeChildren(param);
}else{
// console.log("隐藏");
var param = {};
param.mtId = id;
closeTreeChildren(param);
return false
} }
}else{ }
var windowParent = $("#"+clickObj,window.parent.document)[0]; else {
var windowParent = $("#" + clickObj, window.parent.document)[0];
var children = windowParent.childNodes[5]; var children = windowParent.childNodes[5];
var materialItem = children.childNodes[3].childNodes[1].childNodes; var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1]; var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3]; var materialId = materialName.parentNode.parentNode.childNodes[3];
materialName.value = obj.data.title; materialName.value = obj.data.title;
materialId.value = obj.data.id; materialId.value = obj.data.id;
var index = parent.layer.getFrameIndex(window.name); var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index); parent.layer.close(index);
} }
} }
}); });
$.ajax({ $.ajax({
@ -84,8 +85,8 @@
type: 'post', type: 'post',
dataType: 'json', dataType: 'json',
contentType: "application/json;charset=utf-8", contentType: "application/json;charset=utf-8",
beforeSend:function () { beforeSend: function () {
this.layerIndex = layer.load(0, { shade: [0.5, '#393D49'] }); this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
}, },
success: function (d) { success: function (d) {
layer.close(this.layerIndex); layer.close(this.layerIndex);
@ -98,53 +99,57 @@
}); });
$("#test2").on("click",".layui-tree-entry",function(event){ $("#test2").on("click", ".layui-tree-entry", function (event) {
var target = $(event.target); var target = $(event.target);
var id = this.parentNode.getAttribute("data-id"); var id = this.parentNode.getAttribute("data-id");
var context = target.context.className; var context = target.context.className;
if(context.includes("layui-tree-main")){ if (mname === "") {
var childrenName = this.childNodes[0].childNodes[0].childNodes[0].className; if (context.includes("layui-tree-main")) {
if(childrenName.includes("layui-icon-addition")){ var childrenName = this.childNodes[0].childNodes[0].childNodes[0].className;
// console.log("隐藏") if (childrenName.includes("layui-icon-addition")) {
var param = {}; // console.log("隐藏")
param.mtId = id; var param = {};
closeTreeChildren(param); param.mtId = id;
}else if(childrenName.includes("layui-icon-subtraction")){ closeTreeChildren(param);
var param = {}; } else if (childrenName.includes("layui-icon-subtraction")) {
param.mtId = id; var param = {};
param.mname = mname; param.mtId = id;
param.type = type; param.mname = mname;
if(placeId !== "-1"){ param.type = type;
param.placeId = placeId; if (placeId !== "-1") {
param.depositoryId = depositoryId; param.placeId = placeId;
} param.depositoryId = depositoryId;
addTreeChildren(param); }
addTreeChildren(param);
}
}else if(context.includes("layui-icon")){
if(context.includes("layui-icon-addition")){
var param = {};
param.mtId = id;
closeTreeChildren(param);
// console.log("隐藏")
}else if(context.includes("layui-icon-subtraction")){
var param = {};
param.mtId = id;
param.mname = mname;
param.type = type;
if(placeId !== "-1"){
param.placeId = placeId;
param.depositoryId = depositoryId;
} }
addTreeChildren(param); } else if (context.includes("layui-icon")) {
if (context.includes("layui-icon-addition")) {
var param = {};
param.mtId = id;
closeTreeChildren(param);
// console.log("隐藏")
} else if (context.includes("layui-icon-subtraction")) {
var param = {};
param.mtId = id;
param.mname = mname;
param.type = type;
if (placeId !== "-1") {
param.placeId = placeId;
param.depositoryId = depositoryId;
}
addTreeChildren(param);
}
} }
} }
}); });
// 用于添加分支 // 用于添加分支
addTreeChildren = function(param) { addTreeChildren = function (param) {
$.ajax({ $.ajax({
url: "/material/getNewTreeForMtId", url: "/material/getNewTreeForMtId",
data: JSON.stringify(param), data: JSON.stringify(param),

Loading…
Cancel
Save