opt:ctu功能优化;
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
package org.nl.common.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
* @Description: 通知类型枚举
|
||||
* @Date: 2023/6/15
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum NoticeTypeEnum {
|
||||
|
||||
EXCEPTION("1", "异常"),
|
||||
WARN("2", "警告"),
|
||||
NOTIFICATION("3", "通知");
|
||||
|
||||
private final String code;
|
||||
private final String name;
|
||||
}
|
||||
@@ -17,8 +17,15 @@ package org.nl.common.exception;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.logging.annotation.Log;
|
||||
import org.nl.common.enums.NoticeTypeEnum;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.system.service.notice.impl.SysNoticeServiceImpl;
|
||||
import org.nl.wms.pda.ios_manage.service.impl.PdaIosInServiceImpl;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import static org.springframework.http.HttpStatus.BAD_REQUEST;
|
||||
|
||||
@@ -30,9 +37,7 @@ import static org.springframework.http.HttpStatus.BAD_REQUEST;
|
||||
@Slf4j
|
||||
@Getter
|
||||
public class BadRequestException extends RuntimeException{
|
||||
|
||||
private Integer status = BAD_REQUEST.value();
|
||||
|
||||
public BadRequestException(String msg){
|
||||
super(msg);
|
||||
log.error("异常信息:{}", msg);
|
||||
|
||||
@@ -17,10 +17,14 @@ package org.nl.common.exception.handler;
|
||||
|
||||
import cn.dev33.satoken.exception.NotLoginException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.enums.NoticeTypeEnum;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.exception.EntityExistException;
|
||||
import org.nl.common.exception.EntityNotFoundException;
|
||||
import org.nl.common.utils.ThrowableUtil;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.system.service.notice.impl.SysNoticeServiceImpl;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||
@@ -69,6 +73,7 @@ public class GlobalExceptionHandler {
|
||||
public ResponseEntity<ApiError> badRequestException(BadRequestException e) {
|
||||
// 打印堆栈信息
|
||||
log.error(ThrowableUtil.getStackTrace(e));
|
||||
SpringContextHolder.getBean(SysNoticeServiceImpl.class).createNotice( e.getMessage(), "异常信息", NoticeTypeEnum.EXCEPTION.getCode());
|
||||
return buildResponseEntity(ApiError.error(e.getStatus(), e.getMessage()));
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,8 @@ package org.nl.common.utils;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
@@ -10,10 +12,24 @@ import java.util.HashMap;
|
||||
*/
|
||||
public class MapOf implements Serializable {
|
||||
|
||||
public static <K> HashMap of(K... key) {
|
||||
public static <K> HashMap of(K... key){
|
||||
HashMap map = new HashMap<>();
|
||||
for (int i = 0; i < (key.length & ~1); i = i + 2) {
|
||||
map.put(key[i], key[i + 1]);
|
||||
for (int i = 0; i < (key.length & ~1); i=i+2) {
|
||||
map.put(key[i],key[i+1]);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
public static <K> LinkedHashMap linkOf(K... key){
|
||||
LinkedHashMap map = new LinkedHashMap();
|
||||
for (int i = 0; i < (key.length & ~1); i=i+2) {
|
||||
map.put(key[i],key[i+1]);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
public static <K> HashMap push(Map...item){
|
||||
HashMap map = new HashMap<>();
|
||||
for (int i = 0; i < (item.length & ~1); i=i+1) {
|
||||
map.putAll(item[i]);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
@@ -81,4 +81,6 @@ public interface ISysNoticeService extends IService<SysNotice> {
|
||||
* @param type: 类型
|
||||
*/
|
||||
void createNotice(String msg, String title, String type);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -10,31 +10,25 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.common.enums.NoticeEnum;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.mnt.websocket.MsgType;
|
||||
import org.nl.common.mnt.websocket.SocketMsg;
|
||||
import org.nl.common.mnt.websocket.WebSocketServer;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.language.LangProcess;
|
||||
import org.nl.system.service.dict.dao.Dict;
|
||||
import org.nl.system.service.dict.dao.mapper.SysDictMapper;
|
||||
import org.nl.system.service.notice.ISysNoticeService;
|
||||
import org.nl.system.service.notice.dao.mapper.SysNoticeMapper;
|
||||
import org.nl.system.service.notice.dao.SysNotice;
|
||||
import org.nl.system.service.notice.dao.mapper.SysNoticeMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* @author lyd
|
||||
@@ -65,7 +59,7 @@ public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice
|
||||
String deal_status = ObjectUtil.isNotEmpty(whereJson.get("deal_status"))
|
||||
? whereJson.get("deal_status").toString() : null;
|
||||
LambdaQueryWrapper<SysNotice> lam = new LambdaQueryWrapper<>();
|
||||
lam.like(ObjectUtil.isNotEmpty(notice_title), SysNotice::getNotice_title, notice_title)
|
||||
lam.like(ObjectUtil.isNotEmpty(notice_title), SysNotice::getNotice_content, notice_title)
|
||||
.eq(ObjectUtil.isNotEmpty(notice_type), SysNotice::getNotice_type, notice_type)
|
||||
.eq(ObjectUtil.isNotEmpty(have_read), SysNotice::getHave_read, have_read)
|
||||
.eq(ObjectUtil.isNotEmpty(deal_status), SysNotice::getDeal_status, deal_status)
|
||||
@@ -163,8 +157,11 @@ public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice
|
||||
public void createNotice(String msg, String title, String type) {
|
||||
// 获取标题相同的信息
|
||||
List<SysNotice> sysNotices = sysNoticeMapper.selectList(new LambdaQueryWrapper<SysNotice>()
|
||||
.eq(SysNotice::getNotice_title, title)
|
||||
.eq(SysNotice::getNotice_content, msg)
|
||||
.eq(SysNotice::getHave_read, NoticeEnum.HAVE_READ_OFF.getValue()));
|
||||
if (ObjectUtil.isNotEmpty(sysNotices)) {
|
||||
return;
|
||||
}
|
||||
SysNotice noticeDto = SysNotice.builder()
|
||||
.notice_id(IdUtil.getSnowflake(1, 1).nextIdStr())
|
||||
.notice_type(type)
|
||||
@@ -174,19 +171,15 @@ public class SysNoticeServiceImpl extends ServiceImpl<SysNoticeMapper, SysNotice
|
||||
.have_read(NoticeEnum.HAVE_READ_OFF.getValue())
|
||||
.create_time(DateUtil.now())
|
||||
.build();
|
||||
if (ObjectUtil.isNotEmpty(sysNotices)) {
|
||||
noticeDto.setNotice_id(sysNotices.get(0).getNotice_id());
|
||||
}
|
||||
// 插入/修改
|
||||
this.saveOrUpdate(noticeDto);
|
||||
JSONObject res = new JSONObject();
|
||||
res.put("data", "notice_message_update");
|
||||
SocketMsg messageInfo = new SocketMsg(res, MsgType.INFO);
|
||||
try {
|
||||
webSocketServer.sendInfo(messageInfo, "messageInfo");
|
||||
} catch (IOException e) {
|
||||
throw new BadRequestException(LangProcess.msg("error_Send"));
|
||||
}
|
||||
sysNoticeMapper.insert(noticeDto);
|
||||
// JSONObject res = new JSONObject();
|
||||
// res.put("data", "notice_message_update");
|
||||
// SocketMsg messageInfo = new SocketMsg(res, MsgType.INFO);
|
||||
// try {
|
||||
// webSocketServer.sendInfo(messageInfo, "messageInfo");
|
||||
// } catch (IOException e) {
|
||||
// throw new BadRequestException(LangProcess.msg("error_Send"));
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
package org.nl.system.service.tableData;
|
||||
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.utils.FileUtil;
|
||||
import org.nl.system.service.tableData.dao.mapper.ColumnMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.net.BindException;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/*
|
||||
* @author ZZQ
|
||||
* @Date 2023/7/25 10:11
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class ColumnInfoService {
|
||||
@Resource
|
||||
private ColumnMapper columnMapper;
|
||||
|
||||
|
||||
public Map<String,String> TableColumn(String tableName){
|
||||
Map map = new HashMap<>();
|
||||
try {
|
||||
List<Map<String, String>> mapList = columnMapper.listTableColumn(tableName);
|
||||
map = mapList.stream().collect(Collectors.toMap((Function<Map<String, String>, Object>) stringStringMap -> stringStringMap.get("COLUMN_NAME"), (Function<Map<String, String>, Object>) stringStringMap -> stringStringMap.get("COLUMN_COMMENT")));
|
||||
}catch (Exception ex){
|
||||
log.error(tableName+"获取表结构失败",ex);
|
||||
}
|
||||
return map;
|
||||
};
|
||||
public Map<String,String> TableColumn2(String tableName){
|
||||
Map map = new HashMap<>();
|
||||
try {
|
||||
List<Map<String, String>> mapList = columnMapper.listTableColumn(tableName);
|
||||
map = mapList.stream().collect(Collectors.toMap((Function<Map<String, String>, Object>) stringStringMap -> stringStringMap.get("COLUMN_COMMENT"), (Function<Map<String, String>, Object>) stringStringMap -> stringStringMap.get("COLUMN_NAME")));
|
||||
}catch (Exception ex){
|
||||
log.error(tableName+"获取表结构失败",ex);
|
||||
}
|
||||
return map;
|
||||
};
|
||||
|
||||
@SneakyThrows
|
||||
public <T> void exportFile(String tableName,List<Map> data, HttpServletResponse response,List passParam, Map<String,String> customizMap) {
|
||||
if (CollectionUtils.isEmpty(data)){
|
||||
throw new BindException("导出失败,没有导出数据"+data.size());
|
||||
}
|
||||
List<Map<String, Object>> excel_lst = new ArrayList<>();
|
||||
Map t = data.get(0);
|
||||
Map<String,String> map = new LinkedHashMap<>();
|
||||
if (!StringUtils.isEmpty(tableName)){
|
||||
map = this.TableColumn(tableName);
|
||||
if (!CollectionUtils.isEmpty(passParam)){
|
||||
for (Object s : passParam) {
|
||||
map.remove(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
map.putAll(customizMap);
|
||||
if (CollectionUtils.isEmpty(map)){
|
||||
throw new BindException("导出失败,表结构信息失败"+tableName);
|
||||
}
|
||||
for (Map item : data) {
|
||||
Map<String, Object> excelMap = new LinkedHashMap<>();
|
||||
for (Map.Entry<String, String> entry : map.entrySet()) {
|
||||
excelMap.put(entry.getValue(),item.get(entry.getKey()));
|
||||
}
|
||||
excel_lst.add(excelMap);
|
||||
}
|
||||
if (CollectionUtils.isEmpty(excel_lst)){
|
||||
throw new BindException("导出失败,没有获取到导出参数"+data.size());
|
||||
}
|
||||
FileUtil.downloadExcel(excel_lst,response);
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package org.nl.system.service.tableData.dao.mapper;
|
||||
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 角色表 Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author generator
|
||||
* @since 2022-12-15
|
||||
*/
|
||||
@Mapper
|
||||
public interface ColumnMapper {
|
||||
|
||||
@Select("select column_name,column_comment from information_schema.COLUMNS where TABLE_SCHEMA = (select database()) and TABLE_NAME = #{table}")
|
||||
List<Map<String,String>> listTableColumn(String table);
|
||||
}
|
||||
@@ -4,8 +4,10 @@ package org.nl.wms.basedata_manage.controller;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.base.TableDataInfo;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.logging.annotation.Log;
|
||||
import org.nl.common.utils.RedissonUtils;
|
||||
import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService;
|
||||
@@ -45,6 +47,9 @@ public class MaterialbaseController {
|
||||
return new ResponseEntity<>(TableDataInfo.build(iMdMeMaterialbaseService.queryAll(whereJson, page)), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@PostMapping
|
||||
@Log("新增物料")
|
||||
public ResponseEntity<Object> create(@Validated @RequestBody MdMeMaterialbase dto) {
|
||||
@@ -65,9 +70,29 @@ public class MaterialbaseController {
|
||||
RedissonUtils.lock(() -> {
|
||||
iMdMeMaterialbaseService.excelImport1(file, request, response);
|
||||
}, "分区信息导入", null);
|
||||
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
|
||||
return new ResponseEntity<>(TableDataInfo.build(), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getStruct")
|
||||
public ResponseEntity<Object> getStruct(@RequestParam Map whereJson) {
|
||||
return new ResponseEntity<>(iMdMeMaterialbaseService.getStruct(whereJson), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/getAllStruct")
|
||||
public ResponseEntity<Object> getAllStruct(@RequestParam Map whereJson) {
|
||||
return new ResponseEntity<>(iMdMeMaterialbaseService.getAllStruct(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/getUser")
|
||||
public ResponseEntity<Object> getUser(@RequestParam Map whereJson) {
|
||||
return new ResponseEntity<>(iMdMeMaterialbaseService.getUser(whereJson), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/getUserBindStruct")
|
||||
public ResponseEntity<Object> getUserBindStruct(@RequestParam Map whereJson) {
|
||||
return new ResponseEntity<>(iMdMeMaterialbaseService.getUserBindStruct(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@PutMapping
|
||||
@Log("修改物料")
|
||||
public ResponseEntity<Object> update(@Validated @RequestBody MdMeMaterialbase dto) {
|
||||
@@ -75,6 +100,17 @@ public class MaterialbaseController {
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
@PostMapping("/updateUser")
|
||||
@Log("修改用户绑定货架信息")
|
||||
public ResponseEntity<Object> updateUser(@RequestBody JSONObject whereJson) {
|
||||
if (StringUtils.isBlank(whereJson.getString("user_id"))) {
|
||||
throw new BadRequestException("用户信息不能为空!");
|
||||
}
|
||||
iMdMeMaterialbaseService.updateUser(whereJson);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
|
||||
|
||||
@DeleteMapping
|
||||
@Log("删除物料")
|
||||
public ResponseEntity<Object> delete(@RequestBody Set<String> ids) {
|
||||
|
||||
@@ -2,14 +2,20 @@ package org.nl.wms.basedata_manage.controller;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.base.TableDataInfo;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.common.logging.annotation.Log;
|
||||
import org.nl.common.utils.MapOf;
|
||||
import org.nl.system.service.tableData.ColumnInfoService;
|
||||
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService;
|
||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||
import org.nl.wms.basedata_manage.service.dao.Structattr;
|
||||
import org.nl.wms.basedata_manage.service.dto.StructattrQuery;
|
||||
import org.nl.wms.basedata_manage.service.impl.MdPbStoragevehicleextServiceImpl;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
@@ -17,6 +23,8 @@ import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -32,10 +40,15 @@ import java.util.Map;
|
||||
@RequestMapping("/api/structattr")
|
||||
@Slf4j
|
||||
public class StructattrController {
|
||||
|
||||
@Autowired
|
||||
private ColumnInfoService columnInfoService;
|
||||
@Resource
|
||||
private IStructattrService structattrService;
|
||||
|
||||
@Resource
|
||||
private IMdPbStoragevehicleextService iMdPbStoragevehicleextService;
|
||||
|
||||
|
||||
@GetMapping
|
||||
@Log("查询仓位")
|
||||
public ResponseEntity<Object> query(StructattrQuery whereJson, PageQuery page) {
|
||||
@@ -69,5 +82,22 @@ public class StructattrController {
|
||||
structattrService.changeActive(json);
|
||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||
}
|
||||
@PostMapping("/exportFile")
|
||||
public void exportFile(@RequestBody StructattrQuery query, HttpServletResponse response) {
|
||||
PageQuery page = new PageQuery();
|
||||
page.setPage(0);
|
||||
page.setSize(99999);
|
||||
Map whereJson = (Map) JSONObject.toJSON(query);
|
||||
IPage<JSONObject> result =iMdPbStoragevehicleextService.queryAll(whereJson, page);
|
||||
List<Map> maps = result.getRecords().stream().map(item -> (Map)item).collect(java.util.stream.Collectors.toList());
|
||||
columnInfoService.exportFile("", maps, response,
|
||||
null,
|
||||
MapOf.linkOf("struct_code", "仓位编码", "struct_name", "仓位名称", "stor_name", "仓库", "sect_name", "库区", "placement_type", "货架区域",
|
||||
"material_code", "物料编码", "material_name", "物料名称", "pcsn", "批次号",
|
||||
"storagevehicle_code", "载具号", "qty", "可用数", "frozen_qty", "冻结数",
|
||||
"lock_type", "锁定类型", "qty_unit_name", "计量单位", "create_time", "入库时间","remark", "备注"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -4,11 +4,15 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.system.service.user.dao.SysUser;
|
||||
import org.nl.wms.basedata_manage.service.dao.BsrealStorattr;
|
||||
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.basedata_manage.service.dao.Structattr;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -50,6 +54,15 @@ public interface IMdMeMaterialbaseService extends IService<MdMeMaterialbase> {
|
||||
*/
|
||||
void excelImport1(MultipartFile file, HttpServletRequest request, HttpServletResponse response);
|
||||
|
||||
List<Structattr> getStruct(Map whereJson);
|
||||
List<Structattr> getAllStruct(Map whereJson);
|
||||
|
||||
|
||||
|
||||
List<SysUser> getUser(Map whereJson);
|
||||
String getUserBindStruct(Map whereJson);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 修改物料
|
||||
@@ -63,6 +76,9 @@ public interface IMdMeMaterialbaseService extends IService<MdMeMaterialbase> {
|
||||
*/
|
||||
void delete(Set<String> ids);
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 物料同步
|
||||
* @param whereJson {
|
||||
@@ -71,6 +87,18 @@ public interface IMdMeMaterialbaseService extends IService<MdMeMaterialbase> {
|
||||
*/
|
||||
void materialSync(JSONObject whereJson);
|
||||
|
||||
|
||||
/**
|
||||
* 用户绑定货架信息
|
||||
* @param whereJson {
|
||||
* --
|
||||
* }
|
||||
*/
|
||||
void updateUser(JSONObject whereJson);
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 根据编码获取物料
|
||||
* @param material_code 物料编码
|
||||
|
||||
@@ -180,9 +180,9 @@ public class MdMeMaterialbase implements Serializable {
|
||||
private String ext_id;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
* 用户绑定货架
|
||||
*/
|
||||
private String user_id;
|
||||
private String placement_type;
|
||||
|
||||
/**
|
||||
* 外部标识
|
||||
@@ -197,4 +197,11 @@ public class MdMeMaterialbase implements Serializable {
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String pcsn="";
|
||||
|
||||
/**
|
||||
* 用户绑定库位
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String struct_id="";
|
||||
|
||||
}
|
||||
|
||||
@@ -41,12 +41,12 @@
|
||||
|
||||
<if test="param.struct_code != null and param.struct_code != ''">
|
||||
AND
|
||||
attr.struct_code LIKE #{param.struct_code}
|
||||
attr.struct_code LIKE CONCAT('%', #{param.struct_code}, '%')
|
||||
</if>
|
||||
|
||||
<if test="param.material_code != null and param.material_code != ''">
|
||||
AND
|
||||
material.material_code LIKE #{param.material_code}
|
||||
material.material_code LIKE CONCAT('%', #{param.material_code}, '%')
|
||||
</if>
|
||||
|
||||
<if test="param.material_name != null and param.material_name != ''">
|
||||
@@ -76,6 +76,7 @@
|
||||
attr.struct_name,
|
||||
attr.stor_name,
|
||||
attr.sect_name,
|
||||
attr.placement_type,
|
||||
attr.lock_type,
|
||||
mater.material_code,
|
||||
mater.material_name
|
||||
@@ -95,7 +96,10 @@
|
||||
AND
|
||||
attr.sect_id = #{param.sect_id}
|
||||
</if>
|
||||
|
||||
<if test="param.placement_type != null and param.placement_type != ''">
|
||||
AND
|
||||
attr.placement_type = #{param.placement_type}
|
||||
</if>
|
||||
<if test="param.struct_code != null and param.struct_code != ''">
|
||||
AND
|
||||
(attr.struct_code LIKE CONCAT('%', #{param.struct_code}, '%') or
|
||||
@@ -161,6 +165,7 @@
|
||||
attr.stor_name AS stor_name,
|
||||
attr.struct_code AS point_code,
|
||||
attr.struct_name AS point_name,
|
||||
attr.placement_type,
|
||||
ext.storagevehicle_code AS pallet_code,
|
||||
mater.material_code AS mater_code,
|
||||
mater.material_name AS mater_name,
|
||||
@@ -242,6 +247,7 @@
|
||||
attr.sect_name,
|
||||
attr.struct_id,
|
||||
attr.struct_code,
|
||||
attr.placement_type,
|
||||
attr.struct_name,
|
||||
mater.material_code,
|
||||
mater.material_name
|
||||
|
||||
@@ -60,12 +60,21 @@ public class StrategyStructParam {
|
||||
*/
|
||||
private String ext_id;
|
||||
|
||||
|
||||
/**
|
||||
* 是否电子仓库
|
||||
*/
|
||||
private String dz;
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
private String user_id;
|
||||
|
||||
|
||||
/**
|
||||
* 用户绑定货架
|
||||
*/
|
||||
private String placement_type;
|
||||
|
||||
/**
|
||||
* 出入库类型
|
||||
*/
|
||||
|
||||
@@ -20,11 +20,12 @@ public class StructattrQuery extends BaseQuery<Structattr> {
|
||||
private String lock_type;
|
||||
private String layer_num;
|
||||
private String is_used;
|
||||
private String placement_type;
|
||||
private String is_have;
|
||||
|
||||
@Override
|
||||
public void paramMapping() {
|
||||
super.doP.put("search", QParam.builder().k(new String[]{"struct_code","struct_name"}).type(QueryTEnum.ORLK).build());
|
||||
super.doP.put("search", QParam.builder().k(new String[]{"struct_code","struct_name","storagevehicle_code"}).type(QueryTEnum.ORLK).build());
|
||||
super.doP.put("is_have", QParam.builder().k(new String[]{"storagevehicle_code"}).type(QueryTEnum.NULL_OR_HAS).build());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,12 +14,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.domain.query.PageQuery;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.system.service.user.ISysUserService;
|
||||
import org.nl.system.service.user.dao.SysUser;
|
||||
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||
import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService;
|
||||
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
|
||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||
@@ -33,7 +35,6 @@ import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
|
||||
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -60,6 +61,11 @@ import java.util.stream.Collectors;
|
||||
@Service
|
||||
public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMapper, MdMeMaterialbase> implements IMdMeMaterialbaseService {
|
||||
|
||||
/**
|
||||
* 用户信息
|
||||
*/
|
||||
@Autowired
|
||||
private ISysUserService iSysUserService;
|
||||
/**
|
||||
* 组盘记录服务
|
||||
*/
|
||||
@@ -71,12 +77,6 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
@Autowired
|
||||
private PdaIosInService pdaIosInService;
|
||||
|
||||
/**
|
||||
* 用户服务
|
||||
*/
|
||||
@Autowired
|
||||
private ISysUserService iSysUserService;
|
||||
|
||||
|
||||
/**
|
||||
* wms调用erp服务
|
||||
@@ -118,9 +118,20 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
queryWrapper.eq(MdMeMaterialbase::getExt_id, regionCode);
|
||||
}
|
||||
queryWrapper.orderByDesc(MdMeMaterialbase::getUpdate_time);
|
||||
return this.baseMapper.selectPage(new Page<>(page.getPage() + 1, page.getSize()),
|
||||
IPage<MdMeMaterialbase> result = this.baseMapper.selectPage(new Page<>(page.getPage() + 1, page.getSize()),
|
||||
queryWrapper
|
||||
);
|
||||
for (MdMeMaterialbase r : result.getRecords()) {
|
||||
if (StringUtils.isNotBlank(r.getPlacement_type())) {
|
||||
if ("0".equals(r.getPlacement_type())) {
|
||||
r.setPlacement_type("");
|
||||
}
|
||||
if ("0".equals(r.getExt_id())) {
|
||||
r.setExt_id("");
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -149,11 +160,59 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
}
|
||||
|
||||
/**
|
||||
* 物料导入
|
||||
* 物料导入(只有物料编号)
|
||||
*/
|
||||
// @Override
|
||||
@Transactional
|
||||
public void excelImport2123(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
|
||||
public void excelImport11121(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
|
||||
try {
|
||||
InputStream inputStream = file.getInputStream();
|
||||
ExcelReader excelReader = ExcelUtil.getReader(inputStream);
|
||||
List<List<Object>> read = excelReader.read();
|
||||
if (read.size() > 1) {
|
||||
List<MdMeMaterialbase> materialList = new ArrayList<>();
|
||||
for (int i = 1; i < read.size(); i++) {
|
||||
List<Object> list = read.get(i);
|
||||
String m1 = String.valueOf(list.get(0));
|
||||
String m2 = "未知物料名称待补充";
|
||||
String m3 = m1;
|
||||
//String m4 = ObjectUtil.isEmpty(list.get(3)) ? null : String.valueOf(list.get(3));
|
||||
//String m5 = ObjectUtil.isEmpty(list.get(4)) ? null : String.valueOf(list.get(4));
|
||||
// 根据物料编码查询是否有相同物料编码的物料
|
||||
MdMeMaterialbase mdMeMaterialbase = this.baseMapper.selectOne(
|
||||
new QueryWrapper<MdMeMaterialbase>().lambda()
|
||||
.eq(MdMeMaterialbase::getMaterial_code, m1)
|
||||
);
|
||||
if (ObjectUtil.isNotEmpty(mdMeMaterialbase)) {
|
||||
continue;
|
||||
}
|
||||
MdMeMaterialbase dao = new MdMeMaterialbase();
|
||||
dao.setMaterial_id(IdUtil.getStringId());
|
||||
dao.setMaterial_code(m1);
|
||||
dao.setMaterial_name(m2);
|
||||
dao.setMaterial_spec(m3);
|
||||
//dao.setMaterial_model(m4);
|
||||
dao.setBase_unit_id("1");
|
||||
dao.setIs_used("1");
|
||||
dao.setIs_delete("0");
|
||||
dao.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
dao.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
dao.setCreate_time(DateUtil.now());
|
||||
dao.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
dao.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
dao.setUpdate_time(DateUtil.now());
|
||||
materialList.add(dao);
|
||||
}
|
||||
this.saveBatch(materialList);
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
throw new BadRequestException("导入失败" + ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// @Override 物料导入
|
||||
@Transactional
|
||||
public void excelImport1111(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
|
||||
try {
|
||||
InputStream inputStream = file.getInputStream();
|
||||
ExcelReader excelReader = ExcelUtil.getReader(inputStream);
|
||||
@@ -199,6 +258,7 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 库存导入
|
||||
*/
|
||||
@@ -290,17 +350,17 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
dao.setStoragevehicle_type("2");
|
||||
iMdPbStoragevehicleinfoService.save(dao);
|
||||
}
|
||||
if (!ObjectUtil.isEmpty(mdPbStoragevehicleinfo)) {
|
||||
List<GroupPlate> groupPlateList = iMdPbGroupplateService.list(
|
||||
new LambdaQueryWrapper<GroupPlate>()
|
||||
.eq(GroupPlate::getStoragevehicle_code, mdPbStoragevehicleinfo.get(0).getStoragevehicle_code())
|
||||
.eq(GroupPlate::getMaterial_id, mdMeMaterialbase.getMaterial_id())
|
||||
.lt(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
|
||||
);
|
||||
if (ObjectUtils.isNotEmpty(groupPlateList)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// if (!ObjectUtil.isEmpty(mdPbStoragevehicleinfo)) {
|
||||
// List<GroupPlate> groupPlateList = iMdPbGroupplateService.list(
|
||||
// new LambdaQueryWrapper<GroupPlate>()
|
||||
// .eq(GroupPlate::getStoragevehicle_code, mdPbStoragevehicleinfo.get(0).getStoragevehicle_code())
|
||||
// .eq(GroupPlate::getMaterial_id, mdMeMaterialbase.getMaterial_id())
|
||||
// .lt(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
|
||||
// );
|
||||
// if (ObjectUtils.isNotEmpty(groupPlateList)) {
|
||||
// continue;
|
||||
// }
|
||||
// }
|
||||
//物料数量
|
||||
JSONObject whereJson = new JSONObject();
|
||||
JSONArray dataArray = new JSONArray();
|
||||
@@ -315,7 +375,7 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
whereJson.put("material_code", mdMeMaterialbase.getMaterial_code());
|
||||
whereJson.put("pcsn", "");
|
||||
whereJson.put("qty", m4);
|
||||
whereJson.put("nonClear", "1");
|
||||
//whereJson.put("nonClear", "1");
|
||||
whereJson.put("vehicle_code", m3);
|
||||
whereJson.put("groupStatus", IOSEnum.GROUP_PLATE_STATUS.code("入库"));
|
||||
whereJson.put("remark", "该库存通过仓库数据初始化进行仓库盘点,手动导入库存。");
|
||||
@@ -325,13 +385,22 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
new LambdaQueryWrapper<Structattr>()
|
||||
.eq(Structattr::getStoragevehicle_code, m3)
|
||||
);
|
||||
if (struct == null) {
|
||||
if (struct != null) {
|
||||
//清空原库存
|
||||
iStructattrService.update(new LambdaUpdateWrapper<>(Structattr.class)
|
||||
.set(Structattr::getStoragevehicle_code, null)
|
||||
.set(Structattr::getLock_type, "0")
|
||||
.set(Structattr::getUpdate_optid, currentUserId)
|
||||
.set(Structattr::getUpdate_optname, nickName)
|
||||
.set(Structattr::getUpdate_time, now)
|
||||
.eq(Structattr::getStruct_id, struct.getStruct_id()));
|
||||
//锁定新库存
|
||||
iStructattrService.update(new LambdaUpdateWrapper<>(Structattr.class)
|
||||
.set(Structattr::getStoragevehicle_code, m3)
|
||||
.set(Structattr::getUpdate_optid, currentUserId)
|
||||
.set(Structattr::getUpdate_optname, nickName)
|
||||
.set(Structattr::getUpdate_time, now)
|
||||
.set(Structattr::getIs_used, 1)
|
||||
.set(Structattr::getLock_type, "0")
|
||||
.eq(Structattr::getStruct_id, structattr.getStruct_id())
|
||||
);
|
||||
}
|
||||
@@ -348,6 +417,112 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
*/
|
||||
@Override
|
||||
public void excelImport1(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
|
||||
Integer in = 1;
|
||||
try {
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
InputStream inputStream = file.getInputStream();
|
||||
ExcelReader excelReader = ExcelUtil.getReader(inputStream);
|
||||
List<List<Object>> read = excelReader.read();
|
||||
if (read.size() > 1) {
|
||||
for (int i = 1; i < read.size(); i++) {
|
||||
in = i;
|
||||
if (i == 12) {
|
||||
int a = 0;
|
||||
}
|
||||
List<Object> list = read.get(i);
|
||||
if (list.size() < 2) {
|
||||
continue;
|
||||
}
|
||||
if (ObjectUtil.isEmpty(list.get(1))) {
|
||||
throw new BadRequestException("第" + i + "行,库位号不能为空,请检查。");
|
||||
}
|
||||
//库位编码
|
||||
String m1 = String.valueOf(list.get(0)).trim();
|
||||
if (m1.contains("L")) {
|
||||
Structattr structattr = iStructattrService.getOne(
|
||||
new QueryWrapper<Structattr>().lambda()
|
||||
.eq(Structattr::getStruct_code, m1)
|
||||
);
|
||||
if (ObjectUtil.isEmpty(structattr)) {
|
||||
throw new BadRequestException("第" + i + "行,库位编号不存在【" + m1 + "】,请检查。");
|
||||
}
|
||||
//用户账号
|
||||
String m2 = String.valueOf(list.get(1)).trim();
|
||||
if (ObjectUtil.isNotEmpty(m2)) {
|
||||
List<SysUser> sysUserList = iSysUserService.list(
|
||||
new QueryWrapper<SysUser>().lambda()
|
||||
.eq(SysUser::getUsername, m2)
|
||||
);
|
||||
if (ObjectUtil.isNotEmpty(sysUserList)) {
|
||||
iStructattrService.update(new LambdaUpdateWrapper<>(Structattr.class)
|
||||
.set(Structattr::getUser_id, sysUserList.get(0).getUser_id())
|
||||
.set(Structattr::getUpdate_optid, currentUserId)
|
||||
.set(Structattr::getUpdate_optname, nickName)
|
||||
.set(Structattr::getUpdate_time, now)
|
||||
.set(Structattr::getIs_used, 1)
|
||||
.eq(Structattr::getStruct_code, m1));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//物料编码
|
||||
String m3 = String.valueOf(list.get(0)).trim();
|
||||
if (ObjectUtil.isNotEmpty(m3)) {
|
||||
MdMeMaterialbase mdMeMaterialbase = this.baseMapper.selectOne(
|
||||
new QueryWrapper<MdMeMaterialbase>().lambda()
|
||||
.eq(MdMeMaterialbase::getMaterial_code, m3)
|
||||
);
|
||||
if (ObjectUtil.isEmpty(mdMeMaterialbase)) {
|
||||
MdMeMaterialbase dao = new MdMeMaterialbase();
|
||||
dao.setMaterial_id(IdUtil.getStringId());
|
||||
dao.setMaterial_code(m3);
|
||||
dao.setMaterial_name("未命名");
|
||||
dao.setMaterial_spec(m3);
|
||||
//dao.setMaterial_model(m4);
|
||||
dao.setBase_unit_id("1");
|
||||
dao.setIs_used("1");
|
||||
dao.setIs_delete("0");
|
||||
dao.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
dao.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
dao.setCreate_time(DateUtil.now());
|
||||
dao.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
dao.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
dao.setUpdate_time(DateUtil.now());
|
||||
this.save(dao);
|
||||
}
|
||||
//用户账号
|
||||
String m4 = String.valueOf(list.get(1)).trim();
|
||||
//用户账号
|
||||
if (ObjectUtil.isNotEmpty(m4)) {
|
||||
this.baseMapper.update(
|
||||
null,
|
||||
new LambdaUpdateWrapper<MdMeMaterialbase>()
|
||||
.set(MdMeMaterialbase::getPlacement_type, m4)
|
||||
.set(MdMeMaterialbase::getUpdate_optid, currentUserId)
|
||||
.set(MdMeMaterialbase::getUpdate_optname, nickName)
|
||||
.set(MdMeMaterialbase::getUpdate_time, now)
|
||||
.set(MdMeMaterialbase::getIs_used, 1)
|
||||
.eq(MdMeMaterialbase::getMaterial_id, mdMeMaterialbase.getMaterial_id())
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
throw new BadRequestException("导入失败" + ex.getMessage() + ":" + in);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 分区信息导入
|
||||
*/
|
||||
//@Override
|
||||
public void excelImport999(MultipartFile file, HttpServletRequest request, HttpServletResponse response) {
|
||||
Integer in = 1;
|
||||
try {
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
@@ -380,16 +555,19 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
if (ObjectUtil.isEmpty(structattr)) {
|
||||
throw new BadRequestException("第" + i + "行,库位编号不存在【" + m1 + "】,请检查。");
|
||||
}
|
||||
//用户账号
|
||||
//货架编号
|
||||
String m2 = String.valueOf(list.get(1)).trim();
|
||||
if (ObjectUtil.isNotEmpty(m2)) {
|
||||
List<SysUser> sysUserList = iSysUserService.list(
|
||||
new QueryWrapper<SysUser>().lambda()
|
||||
.eq(SysUser::getUsername, m2)
|
||||
);
|
||||
if (ObjectUtil.isNotEmpty(sysUserList)) {
|
||||
if ("0".equals(m2)) {
|
||||
iStructattrService.update(new LambdaUpdateWrapper<>(Structattr.class)
|
||||
.set(Structattr::getUser_id, sysUserList.get(0).getUser_id())
|
||||
.set(Structattr::getIs_used, "0")
|
||||
.set(Structattr::getUpdate_optid, currentUserId)
|
||||
.set(Structattr::getUpdate_optname, nickName)
|
||||
.set(Structattr::getUpdate_time, now)
|
||||
.eq(Structattr::getStruct_code, m1));
|
||||
} else {
|
||||
iStructattrService.update(new LambdaUpdateWrapper<>(Structattr.class)
|
||||
.set(Structattr::getPlacement_type, m2)
|
||||
.set(Structattr::getUpdate_optid, currentUserId)
|
||||
.set(Structattr::getUpdate_optname, nickName)
|
||||
.set(Structattr::getUpdate_time, now)
|
||||
@@ -398,40 +576,6 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//物料编码
|
||||
String m3 = String.valueOf(list.get(2)).trim();
|
||||
if (ObjectUtil.isNotEmpty(m3)) {
|
||||
MdMeMaterialbase mdMeMaterialbase = this.baseMapper.selectOne(
|
||||
new QueryWrapper<MdMeMaterialbase>().lambda()
|
||||
.eq(MdMeMaterialbase::getMaterial_code, m3)
|
||||
);
|
||||
if (ObjectUtil.isEmpty(mdMeMaterialbase)) {
|
||||
throw new BadRequestException("第" + i + "行,物料编码不存在【" + m3 + "】,请检查。");
|
||||
}
|
||||
//用户账号
|
||||
String m4 = String.valueOf(list.get(3)).trim();
|
||||
//用户账号
|
||||
if (ObjectUtil.isNotEmpty(m4)) {
|
||||
List<SysUser> sysUserList = iSysUserService.list(
|
||||
new QueryWrapper<SysUser>().lambda()
|
||||
.eq(SysUser::getUsername, m4)
|
||||
);
|
||||
if (ObjectUtil.isNotEmpty(sysUserList)) {
|
||||
// 直接使用 update 方法,传入包装器
|
||||
this.baseMapper.update(
|
||||
null,
|
||||
new LambdaUpdateWrapper<MdMeMaterialbase>()
|
||||
.set(MdMeMaterialbase::getUser_id, sysUserList.get(0).getUser_id())
|
||||
.set(MdMeMaterialbase::getUpdate_optid, currentUserId)
|
||||
.set(MdMeMaterialbase::getUpdate_optname, nickName)
|
||||
.set(MdMeMaterialbase::getUpdate_time, now)
|
||||
.set(MdMeMaterialbase::getIs_used, 1)
|
||||
.eq(MdMeMaterialbase::getMaterial_id, mdMeMaterialbase.getMaterial_id())
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -716,7 +860,9 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
if (ObjectUtil.isEmpty(mdMeMaterialbase)) {
|
||||
throw new BadRequestException("被删除或无权限,操作失败!");
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(dto.getPlacement_type())) {
|
||||
dto.setPlacement_type(dto.getPlacement_type());
|
||||
}
|
||||
// 修改
|
||||
dto.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
dto.setUpdate_optname(SecurityUtils.getCurrentNickName());
|
||||
@@ -769,6 +915,33 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
this.saveBatch(materDaoList);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void updateUser(JSONObject whereJson) {
|
||||
String userId = whereJson.getString("user_id");
|
||||
JSONArray structList = whereJson.getJSONArray("ext_id");
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
LambdaUpdateWrapper<Structattr> updateWrapper = new LambdaUpdateWrapper<Structattr>();
|
||||
updateWrapper.set(Structattr::getUpdate_time, now)
|
||||
.set(Structattr::getUpdate_optname, nickName)
|
||||
.set(Structattr::getUpdate_optid, currentUserId)
|
||||
.eq(Structattr::getStor_code, "CTU");
|
||||
if (ObjectUtils.isEmpty(structList)) {
|
||||
updateWrapper.set(Structattr::getUser_id, '0')
|
||||
.eq(Structattr::getUser_id, userId);
|
||||
iStructattrService.update(updateWrapper);
|
||||
} else {
|
||||
List<String> extIdList = structList.stream().map(Object::toString).collect(Collectors.toList());
|
||||
updateWrapper.set(Structattr::getUser_id, userId)
|
||||
.in(Structattr::getPlacement_type, extIdList);
|
||||
iStructattrService.update(updateWrapper);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public MdMeMaterialbase getByCode(String materialCode) {
|
||||
MdMeMaterialbase one = this.getOne(
|
||||
@@ -782,4 +955,106 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl<MdMeMaterialbaseMap
|
||||
}
|
||||
return one;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Structattr> getStruct(Map whereJson) {
|
||||
LambdaQueryWrapper<Structattr> queryWrapper = new LambdaQueryWrapper<>(Structattr.class)
|
||||
.select(Structattr::getStor_id, Structattr::getStor_code, Structattr::getStor_name, Structattr::getPlacement_type)
|
||||
.eq(Structattr::getSect_code, "CTU01")
|
||||
.eq(Structattr::getUser_id, "0")
|
||||
.isNotNull(Structattr::getPlacement_type)
|
||||
.eq(Structattr::getIs_delete, BaseDataEnum.IS_YES_NOT.code("否")
|
||||
).groupBy(Structattr::getStor_id, Structattr::getStor_code, Structattr::getStor_name, Structattr::getPlacement_type);
|
||||
List<Structattr> result = iStructattrService.list(queryWrapper);
|
||||
//自然排序:按照字母部分和数字部分分别排序
|
||||
result.sort((s1, s2) -> {
|
||||
String str1 = s1.getPlacement_type();
|
||||
String str2 = s2.getPlacement_type();
|
||||
return compareNatural(str1, str2);
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Structattr> getAllStruct(Map whereJson) {
|
||||
LambdaQueryWrapper<Structattr> queryWrapper = new LambdaQueryWrapper<>(Structattr.class)
|
||||
.select(Structattr::getStor_id, Structattr::getStor_code, Structattr::getStor_name, Structattr::getFont_direction_scode)
|
||||
.eq(Structattr::getSect_code, "CTU01")
|
||||
.isNotNull(Structattr::getFont_direction_scode)
|
||||
.eq(Structattr::getIs_delete, BaseDataEnum.IS_YES_NOT.code("否")
|
||||
);
|
||||
List<Structattr> result = iStructattrService.list(queryWrapper);
|
||||
//自然排序:按照字母部分和数字部分分别排序
|
||||
result.sort((s1, s2) -> {
|
||||
String str1 = s1.getFont_direction_scode();
|
||||
String str2 = s2.getFont_direction_scode();
|
||||
return compareNatural(str1, str2);
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
public List<SysUser> getUser(Map whereJson) {
|
||||
LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>(SysUser.class)
|
||||
.select(SysUser::getPerson_name, SysUser::getUser_id, SysUser::getUsername)
|
||||
.eq(SysUser::getIs_used, BaseDataEnum.IS_YES_NOT.code("是"));
|
||||
List<SysUser> list = iSysUserService.list(queryWrapper);
|
||||
return list;
|
||||
}
|
||||
|
||||
public String getUserBindStruct(Map whereJson) {
|
||||
LambdaQueryWrapper<Structattr> queryWrapper = new LambdaQueryWrapper<>(Structattr.class)
|
||||
.select(Structattr::getStruct_name, Structattr::getPlacement_type)
|
||||
.eq(Structattr::getSect_code, "CTU01")
|
||||
.eq(Structattr::getUser_id, whereJson.get("user_id"))
|
||||
.isNotNull(Structattr::getPlacement_type)
|
||||
.eq(Structattr::getIs_delete, BaseDataEnum.IS_YES_NOT.code("否")
|
||||
).groupBy(Structattr::getPlacement_type);
|
||||
List<Structattr> list = iStructattrService.list(queryWrapper);
|
||||
if (ObjectUtil.isEmpty(list)) {
|
||||
return "暂未绑定货架";
|
||||
}
|
||||
list.forEach(r -> {
|
||||
r.setStruct_name(r.getPlacement_type());
|
||||
});
|
||||
return list.stream().map(Structattr::getStruct_name).collect(Collectors.joining(","));
|
||||
}
|
||||
|
||||
/**
|
||||
* 自然排序比较方法,对包含字母和数字的字符串进行排序
|
||||
*/
|
||||
private int compareNatural(String s1, String s2) {
|
||||
if (s1 == null) return s2 == null ? 0 : -1;
|
||||
if (s2 == null) return 1;
|
||||
int len1 = 0, len2 = 0;
|
||||
while (len1 < s1.length() && len2 < s2.length()) {
|
||||
char c1 = s1.charAt(len1);
|
||||
char c2 = s2.charAt(len2);
|
||||
// 如果都是数字,提取整个数字部分进行数值比较
|
||||
if (Character.isDigit(c1) && Character.isDigit(c2)) {
|
||||
// 提取数字部分
|
||||
int num1 = 0, num2 = 0;
|
||||
while (len1 < s1.length() && Character.isDigit(s1.charAt(len1))) {
|
||||
num1 = num1 * 10 + (s1.charAt(len1) - '0');
|
||||
len1++;
|
||||
}
|
||||
while (len2 < s2.length() && Character.isDigit(s2.charAt(len2))) {
|
||||
num2 = num2 * 10 + (s2.charAt(len2) - '0');
|
||||
len2++;
|
||||
}
|
||||
if (num1 != num2) {
|
||||
return Integer.compare(num1, num2);
|
||||
}
|
||||
} else {
|
||||
// 如果不是数字,直接比较字符
|
||||
if (c1 != c2) {
|
||||
return Character.compare(c1, c2);
|
||||
}
|
||||
len1++;
|
||||
len2++;
|
||||
}
|
||||
}
|
||||
// 如果一个字符串已经遍历完,另一个还有剩余,则长度长的较大
|
||||
return Integer.compare(s1.length(), s2.length());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleinfoMappe
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -102,13 +103,13 @@ public class MdPbStoragevehicleinfoServiceImpl extends ServiceImpl<MdPbStorageve
|
||||
|
||||
@Override
|
||||
public MdPbStoragevehicleinfo getByCode(String storagevehicle_code) {
|
||||
MdPbStoragevehicleinfo one = this.getOne(
|
||||
List<MdPbStoragevehicleinfo> list = this.list(
|
||||
new QueryWrapper<MdPbStoragevehicleinfo>().lambda()
|
||||
.eq(MdPbStoragevehicleinfo::getStoragevehicle_code, storagevehicle_code)
|
||||
);
|
||||
if (ObjectUtil.isEmpty(one)) {
|
||||
if (ObjectUtil.isEmpty(list)) {
|
||||
throw new BadRequestException("载具编码为【"+storagevehicle_code+"】的载具不存在!");
|
||||
}
|
||||
return one;
|
||||
return list.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -337,7 +337,7 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
|
||||
.eq(StSectStrategy::getSect_code, param.getSect_code())
|
||||
.eq(StSectStrategy::getStrategy_type, StatusEnum.STRATEGY_TYPE.code("出库")));
|
||||
if (one==null){
|
||||
throw new BadRequestException("当前库区"+param.getSect_code()+"未配置入出库规则");
|
||||
throw new BadRequestException("当前库区未配置入出库规则,详细参数:" + param);
|
||||
}
|
||||
List<String> strategy = one.getStrategy();
|
||||
Map<String, Decisioner> decisionerMap = SpringContextHolder.getBeansOfType(Decisioner.class);
|
||||
@@ -379,16 +379,27 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
|
||||
.eq("stor_code", param.getStor_code())
|
||||
.eq("sect_code", param.getSect_code())
|
||||
.isNull("storagevehicle_code");
|
||||
if (StringUtils.isNotBlank(param.getExt_id())) {
|
||||
query.eq("ext_id", param.getExt_id());
|
||||
} else {
|
||||
query.eq("ext_id", 0);
|
||||
//tofix 物料和货架绑定
|
||||
//物料绑定的货架
|
||||
if (StringUtils.isNotBlank(param.getPlacement_type())) {
|
||||
query.eq("placement_type", param.getPlacement_type());
|
||||
}
|
||||
if (StringUtils.isNotBlank(param.getUser_id())) {
|
||||
query.eq("user_id", param.getUser_id());
|
||||
} else {
|
||||
query.eq("user_id", 0);
|
||||
if ("0".equals(param.getUser_id())) {
|
||||
query.eq("user_id", param.getUser_id());
|
||||
query.isNotNull("placement_type");
|
||||
}
|
||||
}
|
||||
// if (StringUtils.isNotBlank(param.getUser_id())) {
|
||||
// query.eq("user_id", param.getUser_id());
|
||||
// } else {
|
||||
// query.eq("user_id", 0);
|
||||
// }
|
||||
// if (StringUtils.isNotBlank(param.getDz())) {
|
||||
// query.eq("ext_id", param.getDz());
|
||||
// } else {
|
||||
// query.eq("ext_id", 0);
|
||||
// }
|
||||
List<Structattr> list = this.list(query);
|
||||
for (String decisionerType : strategy) {
|
||||
Decisioner decisioner = decisionerMap.get(decisionerType);
|
||||
@@ -435,7 +446,6 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
|
||||
.set("status",status)
|
||||
.eq("group_id", vehicleMater.getGroup_id());
|
||||
iMdPbGroupplateService.update(update);
|
||||
iMdPbGroupplateService.update(update);
|
||||
}
|
||||
StIvtStructivtflow record = new StIvtStructivtflow();
|
||||
record.setId(IdUtil.getStringId());
|
||||
|
||||
@@ -46,7 +46,7 @@ public class AlleyAveRuleHandler extends Decisioner<Structattr, JSONObject> {
|
||||
public List<Structattr> handler(List<Structattr> list, JSONObject param) {
|
||||
// 判断仓位是否为空
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
throw new BadRequestException("均衡策略结果:载具号:" + param.getString("storagevehicle_code") + "当前分配策略无可用货位");
|
||||
throw new BadRequestException("均衡策略结果:载具号:" + param.getString("storagevehicle_code") + "当前分配策略无可用货位,详细参数:"+param);
|
||||
}
|
||||
long startTime1 = System.currentTimeMillis();
|
||||
/**
|
||||
|
||||
@@ -46,7 +46,7 @@ public class FIFORuleHandler extends Decisioner<StrategyStructMaterialVO, JSONOb
|
||||
, "order_by", "gro.create_time asc")
|
||||
);
|
||||
if (ObjectUtils.isEmpty(vechielDtos)) {
|
||||
throw new BadRequestException("当前出库策略:先进先出,库存分配失败,失败原因:库存不足!");
|
||||
throw new BadRequestException("当前出库策略:先进先出,库存分配失败,失败原因:库存不足!详细参数:"+param);
|
||||
}
|
||||
List<StrategyStructMaterialVO> divStruct = new ArrayList<>();
|
||||
for (StructattrVechielDto vechielDto : vechielDtos) {
|
||||
|
||||
@@ -47,7 +47,7 @@ public class NearbyRuleHandler extends Decisioner<Structattr, JSONObject> {
|
||||
@Override
|
||||
public List<Structattr> handler(List<Structattr> list, JSONObject param) {
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
throw new BadRequestException("当前分配策略无可用货位");
|
||||
throw new BadRequestException("当前分配策略无可用货位,详细参数:"+param);
|
||||
}
|
||||
List<Structattr> before = list.subList(0, list.size() > 10 ? 10 : list.size());
|
||||
log.info("就近分配前:" + before.stream().map(Structattr::getStruct_code).collect(Collectors.joining(",")));
|
||||
|
||||
@@ -35,7 +35,7 @@ public class WeightRuleHandler extends Decisioner<Structattr, JSONObject> {
|
||||
public List<Structattr> handler(List<Structattr> list, JSONObject param) {
|
||||
// 判断仓位是否为空
|
||||
if (ObjectUtil.isEmpty(list)) {
|
||||
throw new BadRequestException("仓位集合为空!");
|
||||
throw new BadRequestException("仓位集合为空!详细参数:"+param);
|
||||
}
|
||||
List<Structattr> resultList = new ArrayList<>();
|
||||
switch (param.getString("ioType")) {
|
||||
|
||||
@@ -60,7 +60,7 @@ public class InventoryRuleHandler extends Decisioner<Structattr, JSONObject> {
|
||||
@Override
|
||||
public List<Structattr> handler(List<Structattr> list, JSONObject param) {
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
throw new BadRequestException("当前分配策略无可用货位");
|
||||
throw new BadRequestException("当前分配策略无可用货位,详细参数:"+param);
|
||||
}
|
||||
String start_point = param.getString("start_point");
|
||||
String target = LINK_POINT.get(start_point);
|
||||
|
||||
@@ -36,7 +36,7 @@ public class SameBlockNumRuleHandler extends Decisioner<Structattr, JSONObject>
|
||||
public List<Structattr> handler(List<Structattr> list, JSONObject param) {
|
||||
// 判断仓位是否为空
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
throw new BadRequestException("当前分配策略sameBlockNum无可用货位");
|
||||
throw new BadRequestException("当前分配策略sameBlockNum无可用货位,详细参数:"+param);
|
||||
}
|
||||
// 1. 找出最小巷道号
|
||||
Integer minBlockNum = list.stream()
|
||||
|
||||
@@ -23,6 +23,8 @@ import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.IdUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.SpringContextHolder;
|
||||
import org.nl.system.service.user.ISysUserService;
|
||||
import org.nl.system.service.user.dao.SysUser;
|
||||
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||
import org.nl.wms.basedata_manage.service.*;
|
||||
import org.nl.wms.basedata_manage.service.dao.*;
|
||||
@@ -77,6 +79,10 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
@Autowired
|
||||
private MdPbGroupplateMapper mdPbGroupplateMapper;
|
||||
|
||||
/**
|
||||
* 仓库服务
|
||||
*/
|
||||
|
||||
/**
|
||||
* 组盘记录服务
|
||||
*/
|
||||
@@ -115,7 +121,11 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
*/
|
||||
@Autowired
|
||||
private PdaIosOutService pdaIosOutService;
|
||||
|
||||
/**
|
||||
* 用户信息
|
||||
*/
|
||||
@Autowired
|
||||
private ISysUserService iSysUserService;
|
||||
|
||||
/**
|
||||
* 库区服务
|
||||
@@ -241,6 +251,19 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
JSONArray dataArray = whereJson.getJSONArray("data");
|
||||
String vehicleCode = whereJson.getString("vehicle_code");
|
||||
String extCode = whereJson.getString("ext_code");
|
||||
String userId = whereJson.getString("user_id");
|
||||
String userName = null;
|
||||
if (StringUtils.isNotBlank(userId)) {
|
||||
LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>(SysUser.class)
|
||||
.select(SysUser::getPerson_name, SysUser::getUser_id, SysUser::getUsername)
|
||||
.eq(SysUser::getUser_id, userId)
|
||||
.eq(SysUser::getIs_used, BaseDataEnum.IS_YES_NOT.code("是"));
|
||||
List<SysUser> list = iSysUserService.list(queryWrapper);
|
||||
userName = list.get(0).getPerson_name();
|
||||
} else {
|
||||
userName = SecurityUtils.getCurrentNickName();
|
||||
userId = SecurityUtils.getCurrentUserId();
|
||||
}
|
||||
List<GroupPlate> groupList = new ArrayList<>();
|
||||
MdPbStoragevehicleinfo vehicleDao = iMdPbStoragevehicleinfoService.getByCode(vehicleCode);
|
||||
if (ObjectUtil.isEmpty(vehicleDao)) {
|
||||
@@ -261,14 +284,37 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
if (qtyIsEmpty) {
|
||||
throw new BadRequestException("物料数量不能为空");
|
||||
}
|
||||
//校验物料与货架权限
|
||||
if (vehicleCode.contains("LX")) {
|
||||
// 校验物料归属
|
||||
MdMeMaterialbase materInfo = iMdMeMaterialbaseService.getByCode(dataArray.getJSONObject(0).getString("material_id"));
|
||||
if (ObjectUtil.isEmpty(materInfo)) {
|
||||
throw new BadRequestException("物料信息错误:" + dataArray.getJSONObject(0).getString("material_id"));
|
||||
}
|
||||
if (!materInfo.getUser_id().equals(SecurityUtils.getCurrentUserId())) {
|
||||
throw new BadRequestException("该物料:" + materInfo.getMaterial_name() + "不属于管理员:" + SecurityUtils.getCurrentNickName() + "管理范畴,请勿组盘!");
|
||||
if (!"KL001".equals(materInfo.getMaterial_code())) {
|
||||
//物料归属货架校验
|
||||
if (ObjectUtil.isEmpty(materInfo)) {
|
||||
throw new BadRequestException("物料信息错误:" + dataArray.getJSONObject(0).getString("material_id"));
|
||||
}
|
||||
if (StringUtils.isBlank(materInfo.getPlacement_type())) {
|
||||
throw new BadRequestException("该物料:" + materInfo.getMaterial_name() + ",未绑定货架,请在物料维护界面进行绑定操作");
|
||||
}
|
||||
//货架人员管理校验,admin不校验
|
||||
if (!"admin".equals(userName)) {
|
||||
LambdaQueryWrapper<Structattr> queryWrapper = new LambdaQueryWrapper<>(Structattr.class)
|
||||
.select(Structattr::getStor_id, Structattr::getStor_code, Structattr::getStor_name, Structattr::getPlacement_type)
|
||||
.eq(Structattr::getSect_code, "CTU01")
|
||||
.eq(Structattr::getUser_id, userId)
|
||||
.eq(Structattr::getIs_delete, BaseDataEnum.IS_YES_NOT.code("否"))
|
||||
.eq(Structattr::getIs_used, BaseDataEnum.IS_YES_NOT.code("是")
|
||||
).groupBy(Structattr::getPlacement_type);
|
||||
List<Structattr> list = iStructattrService.list(queryWrapper);
|
||||
if (ObjectUtils.isEmpty(list)) {
|
||||
throw new BadRequestException("账号:" + userName + ",未绑定货架,请在物料维护界面进行绑定操作");
|
||||
}
|
||||
List<String> rowList = list.stream().map(Structattr::getPlacement_type).map(String::valueOf).collect(Collectors.toList());
|
||||
//检查物料的用户ID是否在用户绑定的货架行号中
|
||||
if (!rowList.contains(materInfo.getPlacement_type())) {
|
||||
throw new BadRequestException("该物料:" + materInfo.getMaterial_name() + ",归属的货架:" + materInfo.getPlacement_type() + ",不属于用户:" + userName + " 的管理范畴或货架库位已满,请检查或修改用户的货架或物料权限!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (StringUtils.isBlank(whereJson.getString("nonClear"))) {
|
||||
@@ -284,8 +330,8 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
.set(GroupPlate::getQty, BigDecimal.ZERO)
|
||||
.set(GroupPlate::getFrozen_qty, BigDecimal.ZERO)
|
||||
.set(GroupPlate::getUpdate_time, DateUtil.now())
|
||||
.set(GroupPlate::getUpdate_optid, SecurityUtils.getCurrentUserId())
|
||||
.set(GroupPlate::getUpdate_optname, SecurityUtils.getCurrentNickName())
|
||||
.set(GroupPlate::getUpdate_optid, userId)
|
||||
.set(GroupPlate::getUpdate_optname, userName)
|
||||
.set(GroupPlate::getRemark, "载具:" + vehicleDao.getStoragevehicle_code() + "存在物料,于" + DateUtil.now() + "重新组盘,该物料强制清空出库。")
|
||||
.in(GroupPlate::getGroup_id, groupPlateList.stream().map(GroupPlate::getGroup_id).collect(Collectors.toSet()))
|
||||
);
|
||||
@@ -318,8 +364,8 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
.status(StringUtils.defaultIfBlank(whereJson.getString("groupStatus"),
|
||||
IOSEnum.GROUP_PLATE_STATUS.code("组盘")))
|
||||
.ext_code(extCode)
|
||||
.create_id(SecurityUtils.getCurrentUserId())
|
||||
.create_name(SecurityUtils.getCurrentNickName())
|
||||
.create_id(userId)
|
||||
.create_name(userName)
|
||||
.create_time(DateUtil.now())
|
||||
.remark(StringUtils.defaultIfBlank(item.getString("remark"), ""))
|
||||
.build();
|
||||
@@ -473,6 +519,10 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse confirmReturnMaterial(JSONObject whereJson) {
|
||||
String userId = whereJson.getString("user_id");
|
||||
if (StringUtils.isBlank(userId)) {
|
||||
userId = SecurityUtils.getCurrentUserId();
|
||||
}
|
||||
//校验仓库
|
||||
Sectattr sectDao = updateIvtUtils.checkVehicleType(whereJson.getString("sect_id"), whereJson.getString("storagevehicle_code"));
|
||||
//校验回库起点
|
||||
@@ -480,20 +530,25 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
if (ObjectUtil.isEmpty(schBasePoint)) {
|
||||
throw new BadRequestException("未找到载具所在的点位信息,请检查");
|
||||
}
|
||||
List<GroupPlate> groupPlateList = iMdPbGroupplateService.list(
|
||||
new LambdaQueryWrapper<GroupPlate>()
|
||||
.eq(GroupPlate::getStoragevehicle_code, whereJson.getString("storagevehicle_code"))
|
||||
.lt(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")).eq(GroupPlate::getQty, 0)
|
||||
);
|
||||
//处理组盘信息
|
||||
if (CollectionUtils.isNotEmpty(groupPlateList)) {
|
||||
LambdaUpdateWrapper<GroupPlate> update = new LambdaUpdateWrapper<>();
|
||||
Set<String> plateCodes = groupPlateList.stream().map(GroupPlate::getGroup_id).collect(Collectors.toSet());
|
||||
update.set(GroupPlate::getStatus, GROUP_PLATE_STATUS.code("出库"))
|
||||
.set(GroupPlate::getUpdate_time, DateUtil.now())
|
||||
.set(GroupPlate::getCreate_time, DateUtil.now())
|
||||
.in(GroupPlate::getGroup_id, plateCodes);
|
||||
mdPbGroupplateMapper.update(null, update);
|
||||
LambdaQueryWrapper<GroupPlate> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.lt(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
|
||||
.eq(GroupPlate::getStoragevehicle_code, whereJson.getString("storagevehicle_code"));
|
||||
//tofix 托盘混料回库
|
||||
if (whereJson.getString("storagevehicle_code").contains("T")) {
|
||||
queryWrapper.eq(GroupPlate::getQty, 0);
|
||||
}
|
||||
List<GroupPlate> groupPlateList = iMdPbGroupplateService.list(queryWrapper);
|
||||
if (whereJson.getString("storagevehicle_code").contains("T")) {
|
||||
//处理组盘信息
|
||||
if (CollectionUtils.isNotEmpty(groupPlateList)) {
|
||||
LambdaUpdateWrapper<GroupPlate> update = new LambdaUpdateWrapper<>();
|
||||
Set<String> plateCodes = groupPlateList.stream().map(GroupPlate::getGroup_id).collect(Collectors.toSet());
|
||||
update.set(GroupPlate::getStatus, GROUP_PLATE_STATUS.code("出库"))
|
||||
.set(GroupPlate::getUpdate_time, DateUtil.now())
|
||||
.set(GroupPlate::getCreate_time, DateUtil.now())
|
||||
.in(GroupPlate::getGroup_id, plateCodes);
|
||||
mdPbGroupplateMapper.update(null, update);
|
||||
}
|
||||
}
|
||||
// 生成回库任务
|
||||
whereJson.put("site_code", schBasePoint.getPoint_code());
|
||||
@@ -501,6 +556,11 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
whereJson.put("vehicle_code", whereJson.getString("storagevehicle_code"));
|
||||
whereJson.put("stor_code", sectDao.getStor_code());
|
||||
whereJson.put("sect_code", sectDao.getSect_code());
|
||||
if ("CTU".equals(sectDao.getStor_code())) {
|
||||
MdMeMaterialbase materInfo = iMdMeMaterialbaseService.getByCode(groupPlateList.get(0).getMaterial_id());
|
||||
//whereJson.put("user_id", userId);
|
||||
whereJson.put("placement_type", materInfo.getPlacement_type());
|
||||
}
|
||||
//入库分配
|
||||
SpringContextHolder.getBean(PdaIosInServiceImpl.class).divStructNoBills(whereJson);
|
||||
return PdaResponse.requestOk();
|
||||
@@ -542,7 +602,8 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
params.put("qty", whereJson.getString("qty"));
|
||||
params.put("pcsn", whereJson.getString("pcsn"));
|
||||
params.put("ext_id", whereJson.getString("ext_id"));
|
||||
params.put("user_id", whereJson.getString("ext_id"));
|
||||
params.put("placement_type", whereJson.getString("placement_type"));
|
||||
params.put("user_id", whereJson.getString("user_id"));
|
||||
Structattr attrDao = iRawAssistIStorService.getStructattr(params);
|
||||
//确定起点
|
||||
SchBasePoint schBasePoint = iSchBasePointService.getOne(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, whereJson.getString("site_code")));
|
||||
@@ -577,11 +638,27 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse confirmIn(JSONObject whereJson) {
|
||||
String userId = whereJson.getString("user_id");
|
||||
String userName = null;
|
||||
if (StringUtils.isNotBlank(userId)) {
|
||||
LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>(SysUser.class)
|
||||
.select(SysUser::getPerson_name, SysUser::getUser_id, SysUser::getUsername)
|
||||
.eq(SysUser::getUser_id, userId)
|
||||
.eq(SysUser::getIs_used, BaseDataEnum.IS_YES_NOT.code("是"));
|
||||
List<SysUser> list = iSysUserService.list(queryWrapper);
|
||||
userName = list.get(0).getPerson_name();
|
||||
} else {
|
||||
userName = SecurityUtils.getCurrentNickName();
|
||||
userId = SecurityUtils.getCurrentUserId();
|
||||
}
|
||||
//库存校验
|
||||
Structattr structattr = iStructattrService.getOne(new LambdaUpdateWrapper<Structattr>().eq(Structattr::getStoragevehicle_code, whereJson.getString("vehicle_code")));
|
||||
if (structattr != null) {
|
||||
log.error("此载具:"+whereJson.getString("vehicle_code")+"已存在:" + structattr.getStruct_code() + " 中,请检查!");
|
||||
throw new BadRequestException("此载具:"+whereJson.getString("vehicle_code")+"已存在:" + structattr.getStruct_code() + " 中,请检查!");
|
||||
iStructattrService.update(new UpdateWrapper<Structattr>().lambda()
|
||||
.set(Structattr::getStoragevehicle_code, null)
|
||||
.set(Structattr::getLock_type, '0')
|
||||
.eq(Structattr::getStruct_id, structattr.getStruct_id()));
|
||||
log.error("此载具:" + whereJson.getString("vehicle_code") + "已存在:" + structattr.getStruct_code() + " 中,请检查!");
|
||||
}
|
||||
Sectattr sectDao = updateIvtUtils.checkVehicleType(whereJson.getString("sect_id"), whereJson.getString("vehicle_code"));
|
||||
whereJson.put("stor_code", sectDao.getStor_code());
|
||||
@@ -617,12 +694,26 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
.gt(GroupPlate::getQty, 0).eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘"))
|
||||
);
|
||||
if (CollectionUtils.isEmpty(groupPlateList)) {
|
||||
throw new BadRequestException("此载具:" + whereJson.getString("vehicle_code") + "组盘信息不存在,请检查!");
|
||||
//自动默认在库位,从新修改组盘信息
|
||||
mdPbGroupplateMapper.update(new GroupPlate(), new LambdaUpdateWrapper<GroupPlate>()
|
||||
.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘"))
|
||||
.eq(GroupPlate::getStoragevehicle_code, whereJson.getString("vehicle_code"))
|
||||
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")));
|
||||
//throw new BadRequestException("此载具:" + whereJson.getString("vehicle_code") + "组盘信息不存在,请检查!");
|
||||
}
|
||||
// 校验物料信息
|
||||
MdMeMaterialbase materDao = iMdMeMaterialbaseService.getById(groupPlateList.get(0).getMaterial_id());
|
||||
jsonDtl.put("ext_id", materDao.getExt_id());
|
||||
jsonDtl.put("user_id",SecurityUtils.getCurrentUserId());
|
||||
//tofix 物料和货架绑定,空料箱不校验,如果提出多个物料可以公共存放?
|
||||
if ("KL001".equals(materDao.getMaterial_code())) {
|
||||
//空料箱分配到没有仓管员绑定货架的位置
|
||||
jsonDtl.put("user_id", "0");
|
||||
} else {
|
||||
if (StringUtils.isBlank(materDao.getPlacement_type())) {
|
||||
throw new BadRequestException("该物料:" + materDao.getMaterial_name() + ",未绑定货架,请在物料维护界面进行绑定操作");
|
||||
}
|
||||
jsonDtl.put("placement_type", materDao.getPlacement_type());
|
||||
jsonDtl.put("ext_id", materDao.getExt_id());
|
||||
}
|
||||
}
|
||||
// 调用分配,默认自动分配库位
|
||||
iRawAssistIStorService.divStruct(jsonDtl);
|
||||
@@ -645,7 +736,6 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
});
|
||||
taskJson.put("tableMater", tableMater);
|
||||
iRawAssistIStorService.divPoint(taskJson);
|
||||
|
||||
} else {
|
||||
//空载具入库
|
||||
whereJson.put("qty", 1);
|
||||
@@ -681,14 +771,23 @@ public class PdaIosInServiceImpl implements PdaIosInService {
|
||||
*/
|
||||
private Map<String, Object> organizeInsertData(JSONObject whereJson) {
|
||||
// 查询组盘明细
|
||||
List<GroupPlate> plateDaoList1 = iMdPbGroupplateService.list(
|
||||
new QueryWrapper<GroupPlate>().lambda()
|
||||
.eq(GroupPlate::getStoragevehicle_code, whereJson.getString("vehicle_code"))
|
||||
.eq(GroupPlate::getStatus, GROUP_PLATE_STATUS.code("组盘"))
|
||||
);
|
||||
if (ObjectUtil.isEmpty(plateDaoList1)) {
|
||||
mdPbGroupplateMapper.update(new GroupPlate(), new LambdaUpdateWrapper<GroupPlate>()
|
||||
.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘"))
|
||||
.eq(GroupPlate::getStoragevehicle_code, whereJson.getString("vehicle_code"))
|
||||
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")));
|
||||
//throw new BadRequestException("当前没有可入库的物料!");
|
||||
}
|
||||
List<GroupPlate> plateDaoList = iMdPbGroupplateService.list(
|
||||
new QueryWrapper<GroupPlate>().lambda()
|
||||
.eq(GroupPlate::getStoragevehicle_code, whereJson.getString("vehicle_code"))
|
||||
.eq(GroupPlate::getStatus, GROUP_PLATE_STATUS.code("组盘"))
|
||||
);
|
||||
if (ObjectUtil.isEmpty(plateDaoList)) {
|
||||
throw new BadRequestException("当前没有可入库的物料!");
|
||||
}
|
||||
// 总数量
|
||||
Double total_qty = plateDaoList.stream()
|
||||
.map(row -> row.getQty().doubleValue())
|
||||
|
||||
@@ -38,7 +38,6 @@ import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch_manage.service.impl.SchBaseTaskServiceImpl;
|
||||
import org.nl.wms.sch_manage.service.util.AbstractTask;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
@@ -465,6 +464,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
ioStorInvDtl.put("assign_qty", whereJson.get("qty"));
|
||||
ioStorInvDtl.put("unassign_qty", "0");
|
||||
ioStorInvDtl.put("plan_qty", whereJson.get("qty"));
|
||||
ioStorInvDtl.put("create_time", now);
|
||||
ioStorInvDtlMapper.insert(ioStorInvDtl.toJavaObject(IOStorInvDtl.class));
|
||||
//分配
|
||||
JSONObject dis = new JSONObject();
|
||||
@@ -846,6 +846,7 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
//目标点位
|
||||
String regionCode = whereJson.getString("region_code");
|
||||
String vehicleCode = whereJson.getString("storagevehicle_code");
|
||||
String isCheckIvt = whereJson.getString("isCheckIvt");
|
||||
//校验起点
|
||||
SchBasePoint point = iSchBasePointService.getOne(
|
||||
new LambdaQueryWrapper<SchBasePoint>()
|
||||
@@ -895,11 +896,23 @@ public class PdaIosOutServiceImpl implements PdaIosOutService {
|
||||
}
|
||||
endPointCode = pointCode2;
|
||||
} else {
|
||||
if ("1".equals(isCheckIvt)) {
|
||||
//终点为区域
|
||||
List<SchBaseTask> taskList = iSchBaseTaskService.list(new LambdaQueryWrapper<SchBaseTask>().eq(SchBaseTask::getVehicle_code, vehicleCode).eq(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()).orderByDesc(SchBaseTask::getCreate_time).last("LIMIT 50"));
|
||||
if (ObjectUtil.isNotEmpty(taskList)) {
|
||||
List<SchBasePoint> schBasePointList = iSchBasePointService.list(new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getPoint_code, taskList.get(0).getPoint_code1()).eq(SchBasePoint::getIs_used, true));
|
||||
if (ObjectUtil.isNotEmpty(schBasePointList)) {
|
||||
if (!point.getRegion_code().equals(schBasePointList.get(0).getRegion_code())) {
|
||||
regionCode = schBasePointList.get(0).getRegion_code();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//获取终点
|
||||
endPointCode = iSchBasePointService.getPointCode(regionCode);
|
||||
if (StringUtils.isBlank(endPointCode)) {
|
||||
//入线边仓分配库位
|
||||
if (regionCode.equals(StatusEnum.REGION_INFO.code("预装线货架区"))) {
|
||||
//无空位分配到入线边仓分配库位
|
||||
if (regionCode.equals(StatusEnum.REGION_INFO.code("预装线货架区")) || regionCode.equals(StatusEnum.REGION_INFO.code("TGCK01")) || regionCode.equals(StatusEnum.REGION_INFO.code("两器仓"))) {
|
||||
JSONArray dataArray = new JSONArray();
|
||||
JSONObject item = new JSONObject();
|
||||
item.put("material_id", StatusEnum.VEHICLE_TYPE.code("空货架"));
|
||||
|
||||
@@ -96,7 +96,7 @@ public enum StatusEnum {
|
||||
|
||||
|
||||
REGION_INFO(ForkMap.of("商用线5号线", "SYCX01", null, "预装暂存区", "YZZC01", null, "预装线货架区", "YZHJ01", null, "铜管仓", "TGCK01", null,
|
||||
"烧焊车间", "SHCJ01", null, "来料检验区", "LLJY01", null, "空托存放区", "KTCF01", null, "两器货架区", "LQHJ01", null, "满托存放区", "MTCF01", null, "焊接货架区", "LQSH01", null, "原料入库区", "RKQ01", null,"CTU入库点", "CTU01", null,"CTU出库点", "CTU02", null)),
|
||||
"铜管-烧焊车间", "SHCJ01", null,"两器-烧焊车间", "SHCJ02", null, "来料检验区", "LLJY01", null, "空托存放区", "KTCF01", null, "两器仓", "LQHJ01", null, "满托存放区", "MTCF01", null, "焊接货架区", "LQSH01", null, "原料入库区", "RKQ01", null,"CTU入库点", "CTU01", null,"CTU出库点", "CTU02", null)),
|
||||
|
||||
|
||||
STOCK_INFO(ForkMap.of("托盘库", "FStockPallet", null, "料箱库", "FStockId", null, "虚拟库", "FicStockId", null, "二楼ctu缓存库", "CStockId", null,
|
||||
|
||||
@@ -146,6 +146,10 @@ public class SchBasePoint implements Serializable {
|
||||
@TableField(exist = false)
|
||||
private String material_qty;
|
||||
@TableField(exist = false)
|
||||
private String material_status;
|
||||
@TableField(exist = false)
|
||||
private String pcsn;
|
||||
@TableField(exist = false)
|
||||
private String material_code;
|
||||
@TableField(exist = false)
|
||||
private String material_name;
|
||||
|
||||
@@ -28,9 +28,26 @@
|
||||
<select id="selectPageLeftJoin" resultType="org.nl.wms.sch_manage.service.dao.SchBasePoint"
|
||||
parameterType="org.nl.wms.sch_manage.service.dto.SchBasePointQuery">
|
||||
SELECT
|
||||
p.*
|
||||
p.*,
|
||||
gro.qty as material_qty ,
|
||||
gro.pcsn,
|
||||
gro.status as material_status,
|
||||
mater.material_name,
|
||||
mater.material_code
|
||||
FROM
|
||||
`sch_base_point` p
|
||||
LEFT JOIN (
|
||||
SELECT
|
||||
storagevehicle_code,
|
||||
material_id,
|
||||
qty,
|
||||
pcsn,
|
||||
status,
|
||||
ROW_NUMBER() OVER (PARTITION BY storagevehicle_code ORDER BY create_time DESC) as rn
|
||||
FROM
|
||||
md_pb_groupplate
|
||||
) gro ON p.vehicle_code = gro.storagevehicle_code AND gro.rn = 1
|
||||
LEFT JOIN md_me_materialbase mater ON mater.material_id = gro.material_id
|
||||
<where>
|
||||
<if test="whereJson.workshop_code != null and workshop_code != ''">
|
||||
p.workshop_code = #{whereJson.workshop_code}
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
LEFT JOIN sch_base_taskconfig tc ON tc.config_code = t.config_code
|
||||
<where>
|
||||
<if test="whereJson.task_code != null">
|
||||
AND t.task_code = #{whereJson.task_code}
|
||||
AND t.task_code LIKE '%${whereJson.task_code}%'
|
||||
</if>
|
||||
<if test="whereJson.config_code != null">
|
||||
AND t.config_code = #{whereJson.config_code}
|
||||
@@ -56,7 +56,10 @@
|
||||
AND t.task_status <![CDATA[<=]]> #{whereJson.unFinished}
|
||||
</if>
|
||||
<if test="whereJson.vehicle_code != null">
|
||||
AND t.vehicle_code = #{whereJson.vehicle_code}
|
||||
AND t.vehicle_code LIKE '%${whereJson.vehicle_code}%'
|
||||
</if>
|
||||
<if test="whereJson.ext_group_data != null">
|
||||
AND t.ext_group_data LIKE '%${whereJson.ext_group_data}%'
|
||||
</if>
|
||||
<if test="whereJson.end_time != null">
|
||||
AND t.create_time <![CDATA[<=]]> #{whereJson.end_time}
|
||||
|
||||
@@ -16,8 +16,8 @@ public class SchBaseTaskQuery implements Serializable {
|
||||
private String begin_time;
|
||||
private String end_time;
|
||||
private String more_task_status;
|
||||
private String ext_group_data;
|
||||
private String unFinished;
|
||||
|
||||
private String config_code;
|
||||
|
||||
}
|
||||
|
||||
@@ -36,6 +36,8 @@ import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static org.nl.wms.warehouse_management.enums.IOSEnum.GROUP_PLATE_STATUS;
|
||||
|
||||
/**
|
||||
* @author Liuxy
|
||||
* @description 服务实现
|
||||
@@ -77,6 +79,19 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
||||
regionObj.getPoint_type_explain(), pointType));
|
||||
}
|
||||
}
|
||||
if (point.getVehicle_code() != null) {
|
||||
if (point.getMaterial_status() == null) {
|
||||
point.setMaterial_code("KH001");
|
||||
point.setMaterial_name("空载具");
|
||||
point.setMaterial_qty("1");
|
||||
} else {
|
||||
if (point.getMaterial_status().equals(GROUP_PLATE_STATUS.code("出库"))) {
|
||||
point.setMaterial_code("KH001");
|
||||
point.setMaterial_name("空载具");
|
||||
point.setMaterial_qty("1");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return pages;
|
||||
}
|
||||
@@ -129,12 +144,13 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
|
||||
if (StringUtils.isNotBlank(entity.getVehicle_code())) {
|
||||
updateWrapper.set(SchBasePoint::getVehicle_code, entity.getVehicle_code());
|
||||
updateWrapper.set(SchBasePoint::getCan_material_type, entity.getVehicle_code());
|
||||
}else {
|
||||
} else {
|
||||
updateWrapper.set(SchBasePoint::getVehicle_code, null);
|
||||
}
|
||||
String pointStatus = entity.getPoint_status();
|
||||
updateWrapper.set(SchBasePoint::getPoint_status, pointStatus);
|
||||
updateWrapper.set(SchBasePoint::getIs_has_workder, entity.getIng_task_code());
|
||||
updateWrapper.set(SchBasePoint::getIs_has_workder, entity.getIs_has_workder());
|
||||
updateWrapper.set(SchBasePoint::getIng_task_code, entity.getIng_task_code());
|
||||
// 根据点位状态来判断更新内容
|
||||
if (pointStatus.equals(IOSEnum.POINT_STATUS.code("无货"))) {
|
||||
updateWrapper.set(SchBasePoint::getVehicle_type, null);
|
||||
|
||||
@@ -35,15 +35,24 @@ public class SchBaseRegionServiceImpl extends ServiceImpl<SchBaseRegionMapper, S
|
||||
|
||||
@Override
|
||||
public IPage<SchBaseRegion> queryAll(Map whereJson, PageQuery page) {
|
||||
String workshop_code = ObjectUtil.isNotEmpty(whereJson.get("workshop_code")) ? whereJson.get("workshop_code").toString() : null;
|
||||
String blurry = ObjectUtil.isNotEmpty(whereJson.get("blurry")) ? whereJson.get("blurry").toString():ObjectUtil.isNotEmpty(whereJson.get("region")) ?whereJson.get("region").toString() : null;
|
||||
Boolean is_has_workder = ObjectUtil.isNotEmpty(whereJson.get("is_has_workder")) ? Boolean.valueOf(whereJson.get("is_has_workder").toString()) : null;
|
||||
LambdaQueryWrapper<SchBaseRegion> lam = new LambdaQueryWrapper<>();
|
||||
String workshop_code = ObjectUtil.isNotEmpty(whereJson.get("workshop_code")) ? whereJson.get("workshop_code").toString() : null;
|
||||
String blurry = ObjectUtil.isNotEmpty(whereJson.get("blurry")) ? whereJson.get("blurry").toString() : ObjectUtil.isNotEmpty(whereJson.get("region")) ? whereJson.get("region").toString() : null;
|
||||
Boolean is_has_workder = ObjectUtil.isNotEmpty(whereJson.get("is_has_workder")) ? Boolean.valueOf(whereJson.get("is_has_workder").toString()) : null;
|
||||
lam.eq(ObjectUtil.isNotEmpty(workshop_code), SchBaseRegion::getWorkshop_code, workshop_code)
|
||||
.eq(ObjectUtil.isNotEmpty(is_has_workder), SchBaseRegion::getIs_has_workder, is_has_workder)
|
||||
.like(ObjectUtil.isNotEmpty(blurry), SchBaseRegion::getRegion_code, blurry)
|
||||
.or(ObjectUtil.isNotEmpty(blurry), la -> la.like(SchBaseRegion::getRegion_name, blurry))
|
||||
.orderByAsc(SchBaseRegion::getOrder_seq);
|
||||
.eq(ObjectUtil.isNotEmpty(is_has_workder), SchBaseRegion::getIs_has_workder, is_has_workder);
|
||||
if (ObjectUtil.isNotEmpty(blurry)) {
|
||||
//特殊区域:线边仓叫料
|
||||
if ("YZHJ".equals(blurry)) {
|
||||
lam.in(SchBaseRegion::getRegion_code, "YZHJ01", "TGCK01").orderByDesc(SchBaseRegion::getOrder_seq);;
|
||||
}else{
|
||||
lam.like(ObjectUtil.isNotEmpty(blurry), SchBaseRegion::getRegion_code, blurry)
|
||||
.or(ObjectUtil.isNotEmpty(blurry), la -> la.like(SchBaseRegion::getRegion_name, blurry)) .orderByAsc(SchBaseRegion::getOrder_seq);
|
||||
}
|
||||
}else{
|
||||
lam.like(ObjectUtil.isNotEmpty(blurry), SchBaseRegion::getRegion_code, blurry)
|
||||
.or(ObjectUtil.isNotEmpty(blurry), la -> la.like(SchBaseRegion::getRegion_name, blurry)) .orderByAsc(SchBaseRegion::getOrder_seq);
|
||||
}
|
||||
IPage<SchBaseRegion> pages = new Page<>(page.getPage() + 1, page.getSize());
|
||||
schBaseRegionMapper.selectPage(pages, lam);
|
||||
return pages;
|
||||
|
||||
@@ -5,18 +5,25 @@ import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.http.HttpStatus;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService;
|
||||
import org.nl.wms.basedata_manage.service.dao.MdMeMaterialbase;
|
||||
import org.nl.wms.ext.service.WmsToAcsService;
|
||||
import org.nl.wms.ext.service.util.AcsResponse;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
|
||||
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
|
||||
import org.nl.wms.warehouse_management.service.util.UpdateIvtUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -35,14 +42,19 @@ public abstract class AbstractTask {
|
||||
*/
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
|
||||
/**
|
||||
* 基础物料服务
|
||||
*/
|
||||
@Autowired
|
||||
private IMdMeMaterialbaseService iMdMeMaterialbaseService;
|
||||
/**
|
||||
* 通用工具类
|
||||
*/
|
||||
@Autowired
|
||||
private UpdateIvtUtils updateIvtUtils;
|
||||
|
||||
|
||||
@Resource
|
||||
private IMdPbGroupplateService iMdPbGroupplateService;
|
||||
/**
|
||||
* wms调用acs接口服务
|
||||
*/
|
||||
@@ -63,6 +75,7 @@ public abstract class AbstractTask {
|
||||
|
||||
/**
|
||||
* 下发当前任务
|
||||
*
|
||||
* @param task_id 任务标识
|
||||
*/
|
||||
public AcsResponse sendTaskOne(String task_id) {
|
||||
@@ -71,8 +84,24 @@ public abstract class AbstractTask {
|
||||
return this.renotifyAcs(taskDtoList);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取任务扩展信息
|
||||
*/
|
||||
public void getExtInfo(SchBaseTask task) {
|
||||
List<GroupPlate> groupPlateList = iMdPbGroupplateService.list(
|
||||
new LambdaQueryWrapper<GroupPlate>()
|
||||
.eq(GroupPlate::getStoragevehicle_code, task.getVehicle_code())
|
||||
.lt(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库")));
|
||||
if (ObjectUtil.isNotEmpty(groupPlateList)) {
|
||||
MdMeMaterialbase mdMeMaterialbase = iMdMeMaterialbaseService.getById(groupPlateList.get(0).getMaterial_id());
|
||||
task.setExt_group_data("物料编码:"+mdMeMaterialbase.getMaterial_code() + "-" + "物料名称:"+mdMeMaterialbase.getMaterial_name() + "-" +"入库数量:"+ groupPlateList.get(0).getQty() + "-" +"出库数量:"+ groupPlateList.get(0).getFrozen_qty() + "-" +"批次信息:"+ groupPlateList.get(0).getPcsn());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 下发任务
|
||||
*
|
||||
* @param taskDtoList 任务集合
|
||||
* @return AcsResponse
|
||||
*/
|
||||
@@ -123,8 +152,9 @@ public abstract class AbstractTask {
|
||||
|
||||
/**
|
||||
* 反馈任务状态
|
||||
*
|
||||
* @param taskCode 任务编码
|
||||
* @param status 状态码
|
||||
* @param status 状态码
|
||||
*/
|
||||
public void updateTaskStatus(String taskCode, TaskStatus status) {
|
||||
this.updateStatus(taskCode, status);
|
||||
@@ -132,25 +162,29 @@ public abstract class AbstractTask {
|
||||
|
||||
/**
|
||||
* 以下改为public会出现自动注入类出现问题
|
||||
*
|
||||
* @param task_code r任务号
|
||||
* @param status 状态码
|
||||
* @param status 状态码
|
||||
*/
|
||||
protected abstract void updateStatus(String task_code, TaskStatus status);
|
||||
|
||||
/**
|
||||
* 强制结束完成任务
|
||||
*
|
||||
* @param task_code 任务号
|
||||
*/
|
||||
public abstract void forceFinish(String task_code);
|
||||
|
||||
/**
|
||||
* 取消任务,货物搬回原点
|
||||
*
|
||||
* @param task_code 任务号
|
||||
*/
|
||||
public abstract void cancel(String task_code);
|
||||
|
||||
/**
|
||||
* 回传mes
|
||||
*
|
||||
* @param task_code 任务号
|
||||
*/
|
||||
public abstract void backMes(String task_code);
|
||||
|
||||
@@ -66,7 +66,7 @@ public class AutoDelayFinish {
|
||||
}
|
||||
List<SchBasePoint> taskList = iSchBasePointService.list(new LambdaQueryWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getIs_has_workder, BaseDataEnum.IS_YES_NOT.code("是"))
|
||||
.eq(SchBasePoint::getRegion_code, StatusEnum.REGION_INFO.code("商用线5号线")));
|
||||
.in(SchBasePoint::getRegion_code, "SYCX01","SHCJ01"));
|
||||
if (CollectionUtils.isEmpty(taskList)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -99,6 +99,7 @@ public class BackInTask extends AbstractTask {
|
||||
task.setCreate_time(DateUtil.now());
|
||||
task.setRequest_param(json.toString());
|
||||
task.setAcs_trace_id(PointUtils.getRcsTraceId(task));
|
||||
this.getExtInfo(task);
|
||||
taskService.save(task);
|
||||
return task.getTask_id();
|
||||
}
|
||||
|
||||
@@ -140,6 +140,7 @@ public class CtuInTask extends AbstractTask {
|
||||
task.setVehicle_type(json.getString("vehicle_type"));
|
||||
task.setConfig_code(IOSConstant.CTU_IN_TASK);
|
||||
task.setAcs_trace_id(PointUtils.getRcsTraceId(task));
|
||||
this.getExtInfo(task);
|
||||
taskService.create(task);
|
||||
return task.getTask_code();
|
||||
}
|
||||
@@ -244,9 +245,9 @@ public class CtuInTask extends AbstractTask {
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) {
|
||||
throw new BadRequestException("任务状态必须为生成才能取消任务");
|
||||
}
|
||||
// if (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) {
|
||||
// throw new BadRequestException("任务状态必须为生成才能取消任务");
|
||||
// }
|
||||
this.cancelTask(taskObj);
|
||||
|
||||
}
|
||||
|
||||
@@ -73,6 +73,7 @@ public class MoveTask extends AbstractTask {
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
task.setAcs_trace_id(PointUtils.getRcsTraceId(task));
|
||||
this.getExtInfo(task);
|
||||
taskService.save(task);
|
||||
return task.getTask_id();
|
||||
}
|
||||
|
||||
@@ -9,10 +9,8 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.CodeUtil;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.IdUtil;
|
||||
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||
import org.nl.wms.basedata_manage.service.dao.Structattr;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
@@ -96,6 +94,7 @@ public class PdaPointTask extends AbstractTask {
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
task.setAcs_trace_id(PointUtils.getRcsTraceId(task));
|
||||
this.getExtInfo(task);
|
||||
taskService.save(task);
|
||||
return task.getTask_code();
|
||||
}
|
||||
@@ -194,15 +193,11 @@ public class PdaPointTask extends AbstractTask {
|
||||
|
||||
@Transactional
|
||||
public void cancelTask(SchBaseTask taskObj) {
|
||||
//更新起点
|
||||
// iSchBasePointService.update(new UpdateWrapper<SchBasePoint>().lambda()
|
||||
// .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||
// .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
||||
// .set(SchBasePoint::getVehicle_code, null));
|
||||
// iStructattrService.update(new UpdateWrapper<Structattr>().lambda()
|
||||
// .eq(Structattr::getStruct_code, taskObj.getPoint_code1())
|
||||
// .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
// );
|
||||
//预装车间取消任务默认diy完成任务
|
||||
if (taskObj.getPoint_code1().contains("B")) {
|
||||
this.finishTask(taskObj);
|
||||
return;
|
||||
}
|
||||
//解冻
|
||||
List<GroupPlate> plateList = mdPbGroupplateMapper.selectList(
|
||||
new LambdaQueryWrapper<GroupPlate>()
|
||||
@@ -215,8 +210,17 @@ public class PdaPointTask extends AbstractTask {
|
||||
.set(GroupPlate::getUpdate_time, DateUtil.now())
|
||||
.set(GroupPlate::getUpdate_optid, SecurityUtils.getCurrentUserId())
|
||||
.set(GroupPlate::getUpdate_optname, SecurityUtils.getCurrentNickName())
|
||||
.in(GroupPlate::getGroup_id,plateList.stream().map(GroupPlate::getGroup_id).collect(Collectors.toSet())));
|
||||
.in(GroupPlate::getGroup_id, plateList.stream().map(GroupPlate::getGroup_id).collect(Collectors.toSet())));
|
||||
}
|
||||
//更新起点,适用于任务完成,清空库存场景
|
||||
// iSchBasePointService.update(new UpdateWrapper<SchBasePoint>().lambda()
|
||||
// .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1())
|
||||
// .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
||||
// .set(SchBasePoint::getVehicle_code, null));
|
||||
// iStructattrService.update(new UpdateWrapper<Structattr>().lambda()
|
||||
// .eq(Structattr::getStruct_code, taskObj.getPoint_code1())
|
||||
// .set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
// );
|
||||
// 更新终点
|
||||
iSchBasePointService.update(new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
||||
|
||||
@@ -3,21 +3,26 @@ package org.nl.wms.sch_manage.service.util.tasks;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.IdUtil;
|
||||
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||
import org.nl.wms.basedata_manage.service.dao.Structattr;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch_manage.service.util.AbstractTask;
|
||||
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
|
||||
import org.nl.wms.sch_manage.service.util.PointUtils;
|
||||
import org.nl.wms.sch_manage.service.util.TaskType;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
|
||||
import org.nl.wms.warehouse_management.service.IRawAssistIStorService;
|
||||
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
|
||||
import org.nl.wms.warehouse_management.service.dao.IOStorInvDis;
|
||||
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper;
|
||||
import org.nl.wms.warehouse_management.service.util.UpdateIvtUtils;
|
||||
@@ -37,18 +42,24 @@ import javax.annotation.Resource;
|
||||
public class StInTask extends AbstractTask {
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
|
||||
@Resource
|
||||
private IMdPbGroupplateService iMdPbGroupPlateService;
|
||||
@Resource
|
||||
private IRawAssistIStorService rawAssistIStorService;
|
||||
|
||||
@Autowired
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
@Resource
|
||||
private IOStorInvDisMapper ioStorInvDisMapper;
|
||||
|
||||
@Resource
|
||||
private IStructattrService iStructattrService;
|
||||
/**
|
||||
* 校验工具类
|
||||
*/
|
||||
@Autowired
|
||||
private UpdateIvtUtils updateIvtUtils;
|
||||
|
||||
@Override
|
||||
public String create(JSONObject json) {
|
||||
updateIvtUtils.checkTask(json);
|
||||
@@ -68,6 +79,7 @@ public class StInTask extends AbstractTask {
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
task.setAcs_trace_id(PointUtils.getRcsTraceId(task));
|
||||
this.getExtInfo(task);
|
||||
taskService.save(task);
|
||||
return task.getTask_id();
|
||||
}
|
||||
@@ -134,9 +146,9 @@ public class StInTask extends AbstractTask {
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("该任务不存在");
|
||||
}
|
||||
if (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) {
|
||||
throw new BadRequestException("任务状态必须为生成才能取消任务");
|
||||
}
|
||||
// if (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) {
|
||||
// throw new BadRequestException("任务状态必须为生成才能取消任务");
|
||||
// }
|
||||
this.cancelTask(taskObj);
|
||||
|
||||
}
|
||||
@@ -157,12 +169,32 @@ public class StInTask extends AbstractTask {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj) {
|
||||
//分配表清除任务
|
||||
ioStorInvDisMapper.update(new IOStorInvDis(),new LambdaUpdateWrapper<>(IOStorInvDis.class)
|
||||
.set(IOStorInvDis::getTask_id,null)
|
||||
.set(IOStorInvDis::getPoint_code,null)
|
||||
.set(IOStorInvDis::getIs_issued,0)
|
||||
ioStorInvDisMapper.update(new IOStorInvDis(), new LambdaUpdateWrapper<>(IOStorInvDis.class)
|
||||
.set(IOStorInvDis::getTask_id, null)
|
||||
.set(IOStorInvDis::getPoint_code, null)
|
||||
.set(IOStorInvDis::getIs_issued, 0)
|
||||
.set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("未生成"))
|
||||
.eq(IOStorInvDis::getTask_id,taskObj.getTask_id())
|
||||
.eq(IOStorInvDis::getTask_id, taskObj.getTask_id())
|
||||
);
|
||||
//恢复组盘状态
|
||||
UpdateWrapper<GroupPlate> update = new UpdateWrapper<GroupPlate>()
|
||||
.set("update_time", DateUtil.now())
|
||||
.set("update_optid", SecurityUtils.getCurrentUserId())
|
||||
.set("update_optname", SecurityUtils.getCurrentNickName())
|
||||
.set("status", IOSEnum.GROUP_PLATE_STATUS.code("组盘"))
|
||||
.eq("status", IOSEnum.GROUP_PLATE_STATUS.code("入库"))
|
||||
.eq("storagevehicle_code", taskObj.getVehicle_code());
|
||||
iMdPbGroupPlateService.update(update);
|
||||
// 更新终点
|
||||
iSchBasePointService.update(new UpdateWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
||||
.set(SchBasePoint::getIos_id, null)
|
||||
.set(SchBasePoint::getIng_task_code, null)
|
||||
.set(SchBasePoint::getVehicle_code, null));
|
||||
iStructattrService.update(new UpdateWrapper<Structattr>().lambda()
|
||||
.eq(Structattr::getStruct_code, taskObj.getPoint_code2())
|
||||
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
|
||||
);
|
||||
// 更新任务状态
|
||||
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
|
||||
|
||||
@@ -77,6 +77,7 @@ public class StOutTask extends AbstractTask {
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
task.setAcs_trace_id(PointUtils.getRcsTraceId(task));
|
||||
this.getExtInfo(task);
|
||||
taskService.save(task);
|
||||
return task.getTask_id();
|
||||
}
|
||||
|
||||
@@ -86,6 +86,7 @@ public class VehicleInTask extends AbstractTask {
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
task.setAcs_trace_id(PointUtils.getRcsTraceId(task));
|
||||
this.getExtInfo(task);
|
||||
taskService.save(task);
|
||||
return task.getTask_id();
|
||||
}
|
||||
|
||||
@@ -13,8 +13,8 @@ import org.nl.wms.basedata_manage.enums.BaseDataEnum;
|
||||
import org.nl.wms.basedata_manage.service.IStructattrService;
|
||||
import org.nl.wms.basedata_manage.service.dao.Structattr;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch_manage.service.util.AbstractTask;
|
||||
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
|
||||
@@ -48,6 +48,11 @@ public class VehicleOutTask extends AbstractTask {
|
||||
@Resource
|
||||
private IOutBillService outBillService;
|
||||
|
||||
/**
|
||||
* 点位服务
|
||||
*/
|
||||
@Autowired
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
@Resource
|
||||
private IOStorInvDisMapper ioStorInvDisMapper;
|
||||
|
||||
@@ -84,6 +89,7 @@ public class VehicleOutTask extends AbstractTask {
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
task.setCreate_time(DateUtil.now());
|
||||
task.setAcs_trace_id(PointUtils.getRcsTraceId(task));
|
||||
this.getExtInfo(task);
|
||||
taskService.save(task);
|
||||
return task.getTask_id();
|
||||
}
|
||||
@@ -164,6 +170,21 @@ public class VehicleOutTask extends AbstractTask {
|
||||
taskObj.setHandle_status(BaseDataEnum.IS_YES_NOT.code("是"));
|
||||
taskService.updateById(taskObj);
|
||||
outBillService.taskFinish(taskObj);
|
||||
// iMdPbGroupPlateService.update(new GroupPlate(), new LambdaUpdateWrapper<>(GroupPlate.class)
|
||||
// .set(GroupPlate::getFrozen_qty, BigDecimal.ZERO)
|
||||
// .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
|
||||
// .set(GroupPlate::getUpdate_time, DateUtil.now())
|
||||
// .set(GroupPlate::getUpdate_optid, SecurityUtils.getCurrentUserId())
|
||||
// .set(GroupPlate::getUpdate_optname, SecurityUtils.getCurrentNickName())
|
||||
// .eq(GroupPlate::getStoragevehicle_code, taskObj.getVehicle_code())
|
||||
// .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")));
|
||||
//点位解绑
|
||||
// iSchBasePointService.update(new SchBasePoint(), new LambdaUpdateWrapper<>(SchBasePoint.class)
|
||||
// .set(SchBasePoint::getVehicle_code, null)
|
||||
// .set(SchBasePoint::getPoint_status, 0)
|
||||
// .set(SchBasePoint::getIos_id, BaseDataEnum.IS_YES_NOT.code("否"))
|
||||
// .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
|
||||
// );
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
|
||||
@@ -90,7 +90,10 @@ public class IOStorInvDtl implements Serializable {
|
||||
* 来源单表名
|
||||
*/
|
||||
private String source_bill_table;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String create_time;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
AND
|
||||
dtl.iostorinvdtl_id = #{params.iostorinvdtl_id}
|
||||
</if>
|
||||
|
||||
order by dtl.create_time
|
||||
</select>
|
||||
|
||||
<select id="queryOutBillPage" resultType="org.nl.wms.warehouse_management.service.dao.IOStorInv">
|
||||
|
||||
@@ -30,13 +30,11 @@ import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO;
|
||||
import org.nl.wms.basedata_manage.service.dto.StrategyStructParam;
|
||||
import org.nl.wms.basedata_manage.service.dto.StructattrChangeDto;
|
||||
import org.nl.wms.pda.ios_manage.service.PdaIosOutService;
|
||||
import org.nl.wms.sch_manage.enums.StatusEnum;
|
||||
import org.nl.wms.sch_manage.enums.TaskStatus;
|
||||
import org.nl.wms.sch_manage.service.ISchBasePointService;
|
||||
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
|
||||
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
|
||||
import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.StOutTask;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
@@ -328,7 +326,7 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
|
||||
ioStorInvDtl.put("remark", row.getString("remark"));
|
||||
ioStorInvDtl.put("assign_qty", "0");
|
||||
ioStorInvDtl.put("unassign_qty", row.get("qty"));
|
||||
|
||||
ioStorInvDtl.put("create_time",now);
|
||||
ioStorInvDtlMapper.insert(ioStorInvDtl.toJavaObject(IOStorInvDtl.class));
|
||||
|
||||
qty += ioStorInvDtl.getDoubleValue("plan_qty");
|
||||
@@ -991,7 +989,6 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
|
||||
throw new BadRequestException("未选择出库区域");
|
||||
}
|
||||
String iostorinv_id = whereJson.getString("iostorinv_id");
|
||||
|
||||
//查询主表信息
|
||||
IOStorInv ioStorInv = ioStorInvMapper.selectById(iostorinv_id);
|
||||
if (ObjectUtil.isEmpty(ioStorInv)) {
|
||||
@@ -1005,32 +1002,52 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
|
||||
if (ObjectUtil.isEmpty(ioStorInvDisList)) {
|
||||
throw new BadRequestException("当前没有可设置的分配明细");
|
||||
}
|
||||
String task_id = null;
|
||||
for (IOStorInvDis ioStorInvDis : ioStorInvDisList) {
|
||||
//获取终点
|
||||
String pointCode = iSchBasePointService.getPointCode(regionCode);
|
||||
//创建任务
|
||||
JSONObject task_form = new JSONObject();
|
||||
task_form.put("task_type", "STOutTask");
|
||||
task_form.put("TaskCode",IdUtil.getStringId());
|
||||
task_form.put("point_code1", ioStorInvDis.getStruct_code());
|
||||
task_form.put("point_code2", pointCode);
|
||||
task_form.put("vehicle_code", ioStorInvDis.getStoragevehicle_code());
|
||||
task_form.put("handle_status",BaseDataEnum.IS_YES_NOT.code("是"));
|
||||
StOutTask stOutTask = SpringContextHolder.getBean("STOutTask");
|
||||
String task_id = stOutTask.create(task_form);
|
||||
//更新点位
|
||||
LambdaUpdateWrapper<SchBasePoint> wrapper = new LambdaUpdateWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getPoint_code, pointCode)
|
||||
.set(SchBasePoint::getVehicle_code, ioStorInvDis.getStoragevehicle_code())
|
||||
.set(SchBasePoint::getCan_material_type, ioStorInvDis.getStoragevehicle_code())
|
||||
.set(SchBasePoint::getIs_has_workder, BaseDataEnum.IS_YES_NOT.code("是"))
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货"));
|
||||
iSchBasePointService.update(new SchBasePoint(), wrapper);
|
||||
//任务校验
|
||||
List<SchBaseTask> taskList = iSchBaseTaskService.list(new LambdaQueryWrapper<SchBaseTask>().eq(SchBaseTask::getVehicle_code, ioStorInvDis.getStoragevehicle_code()).lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()));
|
||||
if (ObjectUtil.isEmpty(taskList)) {
|
||||
//获取终点
|
||||
String pointCode = iSchBasePointService.getPointCode(regionCode);
|
||||
//创建任务
|
||||
JSONObject task_form = new JSONObject();
|
||||
task_form.put("task_type", "STOutTask");
|
||||
task_form.put("TaskCode", IdUtil.getStringId());
|
||||
task_form.put("point_code1", ioStorInvDis.getStruct_code());
|
||||
task_form.put("point_code2", pointCode);
|
||||
task_form.put("vehicle_code", ioStorInvDis.getStoragevehicle_code());
|
||||
task_form.put("handle_status", BaseDataEnum.IS_YES_NOT.code("是"));
|
||||
StOutTask stOutTask = SpringContextHolder.getBean("STOutTask");
|
||||
task_id = stOutTask.create(task_form);
|
||||
SchBasePoint boundPoint = iSchBasePointService.getOne(
|
||||
new LambdaQueryWrapper<SchBasePoint>().eq(SchBasePoint::getVehicle_code, ioStorInvDis.getStoragevehicle_code())
|
||||
);
|
||||
if (boundPoint != null) {
|
||||
//解绑
|
||||
LambdaUpdateWrapper<SchBasePoint> wrapper1 = new LambdaUpdateWrapper<>();
|
||||
wrapper1.eq(SchBasePoint::getPoint_code, boundPoint.getPoint_code())
|
||||
.set(SchBasePoint::getVehicle_code, null)
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("无货"))
|
||||
.set(SchBasePoint::getUpdate_time, DateUtil.now())
|
||||
.set(SchBasePoint::getUpdate_name, SecurityUtils.getCurrentNickName());
|
||||
;
|
||||
iSchBasePointService.update(wrapper1);
|
||||
}
|
||||
|
||||
//更新点位
|
||||
LambdaUpdateWrapper<SchBasePoint> wrapper = new LambdaUpdateWrapper<SchBasePoint>()
|
||||
.eq(SchBasePoint::getPoint_code, pointCode)
|
||||
.set(SchBasePoint::getVehicle_code, ioStorInvDis.getStoragevehicle_code())
|
||||
.set(SchBasePoint::getCan_material_type, ioStorInvDis.getStoragevehicle_code())
|
||||
.set(SchBasePoint::getIs_has_workder, BaseDataEnum.IS_YES_NOT.code("是"))
|
||||
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有货"));
|
||||
iSchBasePointService.update(new SchBasePoint(), wrapper);
|
||||
}
|
||||
//分配明细表更新任务相关数据
|
||||
IOStorInvDis dis = new IOStorInvDis();
|
||||
dis.setTask_id(task_id);
|
||||
dis.setIostorinvdis_id(ioStorInvDis.getIostorinvdis_id());
|
||||
dis.setWork_status(IOSEnum.INBILL_DIS_STATUS.code("生成"));
|
||||
dis.setTask_id(task_id);
|
||||
dis.setIs_issued(BaseDataEnum.IS_YES_NOT.code("是"));
|
||||
dis.setPoint_code(regionCode);
|
||||
ioStorInvDisMapper.updateById(dis);
|
||||
@@ -1221,56 +1238,58 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper, IOStorInv>
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
IOStorInvDis ioStorInvDis = ioStorInvDisMapper.selectOne(new LambdaQueryWrapper<>(IOStorInvDis.class)
|
||||
List<IOStorInvDis> ioStorInvDisList = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDis.class)
|
||||
.eq(IOStorInvDis::getTask_id, task.getTask_id())
|
||||
);
|
||||
if (ObjectUtil.isEmpty(ioStorInvDis)) {
|
||||
if (ObjectUtil.isEmpty(ioStorInvDisList)) {
|
||||
return;
|
||||
}
|
||||
// 完成当前分配明细
|
||||
ioStorInvDisMapper.update(ioStorInvDis, new LambdaUpdateWrapper<>(IOStorInvDis.class)
|
||||
ioStorInvDisMapper.update(null, new LambdaUpdateWrapper<>(IOStorInvDis.class)
|
||||
.set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成"))
|
||||
.eq(IOStorInvDis::getIostorinvdis_id, ioStorInvDis.getIostorinvdis_id())
|
||||
);
|
||||
//库存变动:根据冻结数更新物料库存
|
||||
StructattrChangeDto changeDto = StructattrChangeDto.builder()
|
||||
.inv(ioStorInvDis.getIostorinv_id())
|
||||
.storagevehicleCode(ioStorInvDis.getStoragevehicle_code())
|
||||
.structCode(ioStorInvDis.getStruct_code())
|
||||
.taskType(task.getConfig_code())
|
||||
.inBound(!"qfbyrw01".equals(task.getAcs_trace_id())).build();
|
||||
iStructattrService.changeStruct(changeDto);
|
||||
int countDis = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class)
|
||||
.eq(IOStorInvDis::getIostorinvdtl_id, ioStorInvDis.getIostorinvdtl_id())
|
||||
.ne(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成"))
|
||||
);
|
||||
// 明细
|
||||
IOStorInvDtl ioStorInvDtl = ioStorInvDtlMapper.selectById(ioStorInvDis.getIostorinvdtl_id());
|
||||
if (ObjectUtil.isEmpty(ioStorInvDtl)) {
|
||||
throw new BadRequestException("未找到明细");
|
||||
}
|
||||
// 如果分配明细全部完成则更新明细表状态
|
||||
if (countDis == 0) {
|
||||
// 更新明细表状态
|
||||
ioStorInvDtl.setBill_status(IOSEnum.BILL_STATUS.code("完成"));
|
||||
ioStorInvDtlMapper.updateById(ioStorInvDtl);
|
||||
// 查看明细是否全部完成
|
||||
int countDtl = ioStorInvDtlMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDtl.class)
|
||||
.eq(IOStorInvDtl::getIostorinv_id, ioStorInvDtl.getIostorinv_id())
|
||||
.ne(IOStorInvDtl::getBill_status, IOSEnum.BILL_STATUS.code("完成"))
|
||||
.in(IOStorInvDis::getIostorinvdis_id, ioStorInvDisList.stream().map(IOStorInvDis::getIostorinvdis_id).collect(Collectors.toList())));
|
||||
|
||||
ioStorInvDisList.forEach(r -> {
|
||||
//库存变动:根据冻结数更新物料库存
|
||||
StructattrChangeDto changeDto = StructattrChangeDto.builder()
|
||||
.inv(r.getIostorinv_id())
|
||||
.storagevehicleCode(r.getStoragevehicle_code())
|
||||
.structCode(r.getStruct_code())
|
||||
.taskType(task.getConfig_code())
|
||||
.inBound(!"qfbyrw01".equals(task.getAcs_trace_id())).build();
|
||||
iStructattrService.changeStruct(changeDto);
|
||||
int countDis = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class)
|
||||
.eq(IOStorInvDis::getIostorinvdtl_id, r.getIostorinvdtl_id())
|
||||
.ne(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("完成"))
|
||||
);
|
||||
// 如果明细全部完成则更新主表状态
|
||||
if (countDtl == 0) {
|
||||
//更新主表状态
|
||||
ioStorInvMapper.update(new IOStorInv(), new LambdaUpdateWrapper<>(IOStorInv.class)
|
||||
.set(IOStorInv::getBill_status, IOSEnum.BILL_STATUS.code("完成"))
|
||||
.set(IOStorInv::getConfirm_optid, currentUserId)
|
||||
.set(IOStorInv::getConfirm_optname, nickName)
|
||||
.set(IOStorInv::getConfirm_time, now)
|
||||
.eq(IOStorInv::getIostorinv_id, ioStorInvDtl.getIostorinv_id())
|
||||
);
|
||||
// 明细
|
||||
IOStorInvDtl ioStorInvDtl = ioStorInvDtlMapper.selectById(r.getIostorinvdtl_id());
|
||||
if (ObjectUtil.isEmpty(ioStorInvDtl)) {
|
||||
throw new BadRequestException("未找到明细");
|
||||
}
|
||||
}
|
||||
// 如果分配明细全部完成则更新明细表状态
|
||||
if (countDis == 0) {
|
||||
// 更新明细表状态
|
||||
ioStorInvDtl.setBill_status(IOSEnum.BILL_STATUS.code("完成"));
|
||||
ioStorInvDtlMapper.updateById(ioStorInvDtl);
|
||||
// 查看明细是否全部完成
|
||||
int countDtl = ioStorInvDtlMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDtl.class)
|
||||
.eq(IOStorInvDtl::getIostorinv_id, ioStorInvDtl.getIostorinv_id())
|
||||
.ne(IOStorInvDtl::getBill_status, IOSEnum.BILL_STATUS.code("完成"))
|
||||
);
|
||||
// 如果明细全部完成则更新主表状态
|
||||
if (countDtl == 0) {
|
||||
//更新主表状态
|
||||
ioStorInvMapper.update(new IOStorInv(), new LambdaUpdateWrapper<>(IOStorInv.class)
|
||||
.set(IOStorInv::getBill_status, IOSEnum.BILL_STATUS.code("完成"))
|
||||
.set(IOStorInv::getConfirm_optid, currentUserId)
|
||||
.set(IOStorInv::getConfirm_optname, nickName)
|
||||
.set(IOStorInv::getConfirm_time, now)
|
||||
.eq(IOStorInv::getIostorinv_id, ioStorInvDtl.getIostorinv_id())
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -214,6 +214,7 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
|
||||
dis.put("qty_unit_id", row.get("qty_unit_id"));
|
||||
dis.put("qty_unit_name", row.get("qty_unit_name"));
|
||||
dis.put("plan_qty", row.get("qty"));
|
||||
dis.put("create_time",now);
|
||||
ioStorInvDisMapper.insert(dis.toJavaObject(IOStorInvDis.class));
|
||||
}
|
||||
io_mst.put("total_qty", total_qty);
|
||||
@@ -358,6 +359,7 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
|
||||
param.put("storagevehicle_code", map.get("storagevehicle_code"));
|
||||
param.put("pcsn", map.get("pcsn"));
|
||||
param.put("ioType", StatusEnum.STRATEGY_TYPE.code("入库"));
|
||||
//分配仓位
|
||||
Structattr struct = getStructattr(param);
|
||||
sect_id = struct.getSect_id();
|
||||
sect_code = struct.getSect_code();
|
||||
@@ -455,10 +457,11 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
|
||||
.qty(new BigDecimal(param.getString("qty")))
|
||||
.pcsn(param.getString("pcsn"))
|
||||
.ext_id(param.getString("ext_id"))
|
||||
.placement_type(param.getString("placement_type"))
|
||||
.user_id(param.getString("user_id"))
|
||||
.build());
|
||||
if (CollectionUtils.isEmpty(structattrs)) {
|
||||
throw new BadRequestException("无可用货位");
|
||||
throw new BadRequestException("入库分配无可用货位,详细参数:"+param);
|
||||
}
|
||||
return structattrs.get(0);
|
||||
}
|
||||
@@ -572,24 +575,19 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void confirm(Map whereJson) {
|
||||
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String nickName = SecurityUtils.getCurrentNickName();
|
||||
String now = DateUtil.now();
|
||||
|
||||
IOStorInv ioStorInv = ioStorInvMapper.selectOne(new LambdaQueryWrapper<>(IOStorInv.class)
|
||||
.eq(IOStorInv::getIostorinv_id,whereJson.get("iostorinv_id"))
|
||||
);
|
||||
|
||||
if (ObjectUtil.isNotEmpty(ioStorInv) && !IOSEnum.BILL_STATUS.code("分配完").equals(ioStorInv.getBill_status())){
|
||||
throw new BadRequestException("主表状态必须为分配完!");
|
||||
}
|
||||
|
||||
//解锁原货位点位
|
||||
List<IOStorInvDis> storInvDisList = ioStorInvDisMapper.selectList(new LambdaQueryWrapper<>(IOStorInvDis.class)
|
||||
.eq(IOStorInvDis::getIostorinv_id,whereJson.get("iostorinv_id"))
|
||||
);
|
||||
|
||||
for (IOStorInvDis ioStorInvDis: storInvDisList){
|
||||
if (StrUtil.isNotBlank(ioStorInvDis.getStruct_code())){
|
||||
JSONObject finish_map = new JSONObject();
|
||||
@@ -598,8 +596,8 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
|
||||
finish_map.put("inv_type", null);
|
||||
finish_map.put("inv_id", null);
|
||||
finish_map.put("inv_code", null);
|
||||
iStructattrService.updateStatusByCode("1",finish_map);
|
||||
|
||||
//tofix 单据强制确认逻辑是否需要
|
||||
//iStructattrService.updateStatusByCode("1",finish_map);
|
||||
//修改库存
|
||||
List<JSONObject> updateIvtList = new ArrayList<>();
|
||||
JSONObject jsonIvt = new JSONObject();
|
||||
@@ -611,7 +609,7 @@ public class RawAssistIStorServiceImpl extends ServiceImpl<IOStorInvMapper, IOSt
|
||||
jsonIvt.put("qty_unit_name", ioStorInvDis.getQty_unit_name());
|
||||
jsonIvt.put("change_qty", ioStorInvDis.getPlan_qty());
|
||||
updateIvtList.add(jsonIvt);
|
||||
iMdPbGroupPlateService.updateIvt(updateIvtList);
|
||||
// iMdPbGroupPlateService.updateIvt(updateIvtList);
|
||||
}
|
||||
|
||||
//更新详情数据
|
||||
|
||||
@@ -11,7 +11,7 @@ spring:
|
||||
freemarker:
|
||||
check-template-location: false
|
||||
profiles:
|
||||
active: dev
|
||||
active: prod
|
||||
jackson:
|
||||
time-zone: GMT+8730 885 969
|
||||
data:
|
||||
|
||||
Reference in New Issue
Block a user