宏丰二期初始提交

This commit is contained in:
pangshenghao
2023-07-18 13:40:04 +08:00
parent ef4f16581c
commit c73c59dc4f
64 changed files with 6956 additions and 43 deletions

View File

@@ -0,0 +1,67 @@
package org.nl.wms.basedata.rest;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.logging.annotation.Log;
import org.nl.wms.basedata.service.VehicleDetailService;
import org.nl.wms.basedata.service.dto.VehicleDetailDto;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* @author lyd
* @date 2023-04-17
**/
@RestController
@RequiredArgsConstructor
@Api(tags = "组盘信息管理")
@RequestMapping("/api/vehicleDetail")
@Slf4j
public class VehicleDetailController {
private final VehicleDetailService vehicleDetailService;
@GetMapping
@Log("查询组盘信息")
@ApiOperation("查询组盘信息")
//@SaCheckPermission("@el.check('vehicleDetail:list')")
public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page){
return new ResponseEntity<>(vehicleDetailService.queryAll(whereJson,page),HttpStatus.OK);
}
@PostMapping
@Log("新增组盘信息")
@ApiOperation("新增组盘信息")
//@SaCheckPermission("@el.check('vehicleDetail:add')")
public ResponseEntity<Object> create(@Validated @RequestBody VehicleDetailDto dto){
vehicleDetailService.create(dto);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@PutMapping
@Log("修改组盘信息")
@ApiOperation("修改组盘信息")
//@SaCheckPermission("@el.check('vehicleDetail:edit')")
public ResponseEntity<Object> update(@Validated @RequestBody VehicleDetailDto dto){
vehicleDetailService.update(dto);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@Log("删除组盘信息")
@ApiOperation("删除组盘信息")
//@SaCheckPermission("@el.check('vehicleDetail:del')")
@DeleteMapping
public ResponseEntity<Object> delete(@RequestBody String[] ids) {
vehicleDetailService.deleteAll(ids);
return new ResponseEntity<>(HttpStatus.OK);
}
}

View File

@@ -0,0 +1,71 @@
package org.nl.wms.basedata.service;
import org.nl.wms.basedata.service.dto.VehicleDetailDto;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
/**
* @author lyd
* @description 服务接口
* @date 2023-04-17
**/
public interface VehicleDetailService {
/**
* 查询数据分页
*
* @param whereJson 条件
* @param page 分页参数
* @return Map<String, Object>
*/
Map<String, Object> queryAll(Map whereJson, Pageable page);
/**
* 查询所有数据不分页
*
* @param whereJson 条件参数
* @return List<VehicleDetailDto>
*/
List<VehicleDetailDto> queryAll(Map whereJson);
/**
* 根据ID查询
*
* @param group_id ID
* @return VehicleDetail
*/
VehicleDetailDto findById(String group_id);
/**
* 根据编码查询
*
* @param code code
* @return VehicleDetail
*/
VehicleDetailDto findByCode(String code);
/**
* 创建
*
* @param dto /
*/
void create(VehicleDetailDto dto);
/**
* 编辑
*
* @param dto /
*/
void update(VehicleDetailDto dto);
/**
* 多选删除
*
* @param ids /
*/
void deleteAll(String[] ids);
}

View File

@@ -102,4 +102,22 @@ public class MaterialbaseDto implements Serializable {
private Long product_series;
private Integer standing_time;
//A长边
private String a;
//B短边
private String b;
//H梯形高
private String h;
//W厚度
private String w;
//产品编号
private String product_code;
//托盘砖数量
private String number;
}

View File

@@ -0,0 +1,49 @@
package org.nl.wms.basedata.service.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class VehicleDetailDto implements Serializable {
/** 组盘标识 */
private String group_id;
/** 载具编码 */
private String vehicle_code;
/** 工单编号 */
private String order_code;
/** 物料号 */
private String material_code;
/** 产品编号 */
private String product_code;
/** 点位编码(窑号1/2) */
private String point_code;
/** 区域编码 0-缓存区 1-窑内 2-窑外冷却区 3-已拆垛*/
private String region_code;
/** 顺序号 */
private String order_seq;
/** 是否删除 */
private Integer is_delete;
/** 创建人 */
private String create_name;
/** 创建时间 */
private String create_time;
/** 修改人 */
private Long update_optid;
/** 修改人 */
private String update_optname;
/** 修改时间 */
private String update_time;
}

View File

@@ -68,7 +68,8 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
map.put("flag", "1");
map.put("search", search);
return WQL.getWO("QMD_ME_MATERIAL").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "material_id");
Map<String,Object> maps =WQL.getWO("QMD_ME_MATERIAL").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "material_id");
return maps;
}
@Override
@@ -134,13 +135,14 @@ public class MaterialbaseServiceImpl implements MaterialbaseService {
throw new BadRequestException("被删除或无权限,操作失败!");
}
MaterialbaseDto materialbaseDto = this.findByCode(dto.getMaterial_code());
if (ObjectUtil.isNotEmpty(materialbaseDto) && materialbaseDto.getMaterial_id() != entity.getMaterial_id()) {
if (ObjectUtil.isNotEmpty(materialbaseDto) && !materialbaseDto.getMaterial_id().equals(entity.getMaterial_id())) {
throw new BadRequestException("物料编码重复!");
}
Long currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
dto.setUnit_code(ObjectUtil.isEmpty(dto.getUnit_code())?null:dto.getUnit_code());
dto.setUpdate_time(now);
dto.setUpdate_optid(currentUserId);
dto.setUpdate_optname(nickName);

View File

@@ -0,0 +1,129 @@
package org.nl.wms.basedata.service.impl;
import com.alibaba.fastjson.JSON;
import lombok.RequiredArgsConstructor;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.WQL;
import org.nl.wms.basedata.service.VehicleDetailService;
import org.nl.wms.basedata.service.dto.VehicleDetailDto;
import org.nl.wms.util.MapOf;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.data.domain.Pageable;
import java.util.List;
import java.util.Map;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.nl.modules.common.utils.SecurityUtils;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.WqlUtil;
import lombok.extern.slf4j.Slf4j;
import cn.hutool.core.util.ObjectUtil;
/**
* @author lyd
* @description 服务实现
* @date 2023-04-17
**/
@Service
@RequiredArgsConstructor
@Slf4j
public class VehicleDetailServiceImpl implements VehicleDetailService {
@Override
public Map<String, Object> queryAll(Map whereJson, Pageable page) {
JSONObject pageQuery = WQL.getWO("QMD_PB_VEHICLE_GROUP").addParamMap(MapOf.of("flag", "1"
, "vehicle_code", whereJson.get("vehicle_code")))
.pageQuery(WqlUtil.getHttpContext(page), "vehicle_code asc");
return pageQuery;
}
@Override
public List<VehicleDetailDto> queryAll(Map whereJson) {
WQLObject wo = WQLObject.getWQLObject("sch_base_vehicle_group");
JSONArray arr = wo.query().getResultJSONArray(0);
if (ObjectUtil.isNotEmpty(arr)) return arr.toJavaList(VehicleDetailDto.class);
return null;
}
@Override
public VehicleDetailDto findById(String group_id) {
WQLObject wo = WQLObject.getWQLObject("sch_base_vehicle_group");
JSONObject json = wo.query("group_id = '" + group_id + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(json)) {
return json.toJavaObject(VehicleDetailDto.class);
}
return null;
}
@Override
public VehicleDetailDto findByCode(String code) {
WQLObject wo = WQLObject.getWQLObject("sch_base_vehicle_group");
JSONObject json = wo.query("code ='" + code + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(json)) {
return json.toJavaObject(VehicleDetailDto.class);
}
return null;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void create(VehicleDetailDto dto) {
Long currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
dto.setGroup_id(String.valueOf(IdUtil.getSnowflake(1, 1).nextId()));
dto.setCreate_name(nickName);
dto.setUpdate_optid(currentUserId);
dto.setUpdate_optname(nickName);
dto.setUpdate_time(now);
dto.setCreate_time(now);
WQLObject wo = WQLObject.getWQLObject("sch_base_vehicle_group");
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
wo.insert(json);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void update(VehicleDetailDto dto) {
VehicleDetailDto entity = this.findById(dto.getGroup_id());
if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!");
Long currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
dto.setUpdate_time(now);
dto.setUpdate_optid(currentUserId);
dto.setUpdate_optname(nickName);
WQLObject wo = WQLObject.getWQLObject("sch_base_vehicle_group");
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
wo.update(json);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteAll(String[] ids) {
Long currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
WQLObject wo = WQLObject.getWQLObject("sch_base_vehicle_group");
for (String group_id : ids) {
JSONObject param = new JSONObject();
param.put("group_id", group_id);
wo.delete(param);
}
}
}

View File

@@ -45,6 +45,12 @@
material.material_code,
material.material_name,
material.unit_code,
material.product_code,
material.a,
material.b,
material.h,
material.w,
material.number,
unit.unit_name AS 'unit_name',
material.is_used,
material.create_name,

View File

@@ -0,0 +1,58 @@
[交易说明]
交易名: 载具组盘
所属模块:
功能简述:
版权所有:
表引用:
版本经历:
[数据库]
--指定数据库为空采用默认值默认为db.properties中列出的第一个库
[IO定义]
#################################################
## 表字段对应输入参数
#################################################
输入.flag TYPEAS s_string
输入.vehicle_code TYPEAS s_string
输入.vehicle_type TYPEAS s_string
输入.vehicle_status TYPEAS s_string
[临时表]
--这边列出来的临时表就会在运行期动态创建
[临时变量]
--所有中间过程变量均可在此处定义
[业务过程]
##########################################
# 1、输入输出检查 #
##########################################
##########################################
# 2、主过程前处理 #
##########################################
##########################################
# 3、业务主过程 #
##########################################
IF 输入.flag = "1"
PAGEQUERY
SELECT
vd.*,
p.point_name
FROM
sch_base_vehicle_group vd
LEFT JOIN sch_base_point p ON p.point_code = vd.point_code
WHERE
1 = 1
OPTION 输入.vehicle_code <> ""
vd.vehicle_code LIKE '%' 输入.vehicle_code '%'
ENDOPTION
ENDSELECT
ENDPAGEQUERY
ENDIF

View File

@@ -89,4 +89,22 @@ public class AcsToWmsController {
public ResponseEntity<Object> orderConfirm(@RequestBody JSONObject param) {
return new ResponseEntity<>(acsToWmsService.orderConfirm(param), HttpStatus.OK);
}
@PostMapping("/uploadPalletizing")
@Log("组盘信息上报")
@ApiOperation("组盘信息上报")
@SaCheckPermission("menu:list")
@SaIgnore
public ResponseEntity<Object> uploadPalletizing(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(acsToWmsService.uploadPalletizing(whereJson), HttpStatus.OK);
}
@PostMapping("/updateKiln")
@Log("更新托盘状态")
@ApiOperation("更新托盘状态")
@SaCheckPermission("menu:list")
@SaIgnore
public ResponseEntity<Object> updateKiln(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(acsToWmsService.updateKiln(whereJson), HttpStatus.OK);
}
}

View File

@@ -81,4 +81,18 @@ public interface AcsToWmsService {
*/
JSONObject orderConfirm(JSONObject whereJson);
/**
* 组盘信息上报
* @param whereJson
* @return
*/
JSONObject uploadPalletizing(JSONObject whereJson);
/**
* 更新托盘状态
* @param whereJson
* @return
*/
JSONObject updateKiln(JSONObject whereJson);
}

View File

@@ -1,9 +1,12 @@
package org.nl.wms.ext.acs.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
@@ -20,15 +23,19 @@ import org.nl.wms.basedata.service.MaterialbaseService;
import org.nl.wms.basedata.service.VehicleService;
import org.nl.wms.basedata.service.dto.MaterialbaseDto;
import org.nl.wms.basedata.service.dto.VehicleDto;
import org.nl.wms.basedata.service.dto.VehicleDetailDto;
import org.nl.wms.ext.acs.service.AcsToWmsService;
import org.nl.wms.pda.scanGroup.HcwNumEnum;
import org.nl.wms.pda.scanGroup.KlzhcwUtil;
import org.nl.wms.pdm.service.DeviceService;
import org.nl.wms.pdm.service.WorkordeService;
import org.nl.wms.pdm.service.dto.WorkorderDto;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.service.PointService;
import org.nl.wms.sch.service.TaskService;
import org.nl.wms.sch.tasks.callEmpty.HnjCallEmpVehicleTask;
import org.nl.wms.sch.tasks.callMaterial.YljCallMaterialTask;
import org.nl.wms.sch.tasks.phaseTwo.PalletizingTask;
import org.nl.wms.sch.tasks.sendEmpty.KzdjwSendEmpVehicleTask;
import org.nl.wms.sch.tasks.sendMaterial.HnjSendMaterialTask;
import org.nl.wms.st.structivt.service.StructivtService;
@@ -64,6 +71,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
private RedissonClient redissonClient;
@Autowired
private AcsToWmsService acsToWmsService;
@Autowired
private PointService pointService;
/**
* task_id任务标识
@@ -285,6 +294,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
* 2.混碾机满盅入库
* 3.压力机叫料
* 4.空料盅对接位有货时申请RGV搬运至空料盅缓存位
* 5.拆垛位申请取料
*/
if (StrUtil.equals(type, "1")) {
// 1.混碾机呼叫空盅
@@ -336,6 +346,15 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
// 创建任务
KzdjwSendEmpVehicleTask taskBean = SpringContextHolder.getBean(KzdjwSendEmpVehicleTask.class);
taskBean.createTask(param);
} else if (StrUtil.equals(type, "5")) {
// 5.拆垛位申请取料
JSONObject param = new JSONObject();
param.put("point_code1", point_code); // 叫料点
param.put("create_mode", create_mode);
param.put("material_code",whereJson.getString("material_code"));
param.put("is_auto_issue", is_auto_issue);
PalletizingTask taskBean = SpringContextHolder.getBean(PalletizingTask.class);
taskBean.createTask(param);
}
resp.put("status", "200");
resp.put("message", "申请成功");
@@ -481,4 +500,113 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
resp.put("message", "人工排产确认成功!");
return resp;
}
@Override
public JSONObject uploadPalletizing(JSONObject whereJson) {
JSONObject resp = new JSONObject();
VehicleDetailDto dto = VehicleDetailDto.builder()
.group_id(String.valueOf(IdUtil.getSnowflake(1, 1).nextId()))
.vehicle_code(whereJson.getString("vehicle_code"))
.order_code(whereJson.getString("order_code"))
.material_code(whereJson.getString("material_code"))
.product_code(whereJson.getString("product_code"))
// .point_code(whereJson.getString("point_code"))
.region_code("0")
.order_seq("0")
.is_delete(0)
.create_name("acs")
.create_time(DateUtil.now())
.build();
WQLObject wo = WQLObject.getWQLObject("SCH_BASE_vehicle_group");
JSONObject json = (JSONObject) JSONObject.toJSON(dto);
wo.insert(json);
resp.put("status", "200");
resp.put("message", "组盘信息上报成功!");
return resp;
}
@Override
public JSONObject updateKiln(JSONObject whereJson) {
JSONObject resp = new JSONObject();
try {
int state = whereJson.getIntValue("state");
String vehicle_code = whereJson.getString("barcode");
String kiln_code = whereJson.getString("kiln_id");
WQLObject wo = WQLObject.getWQLObject("SCH_BASE_vehicle_group");
switch (state) {
//入窑
case 0: {
// 查询指定托盘号
JSONObject json = wo.query("vehicle_code ='" + vehicle_code + "' AND region_code= 0 AND is_delete = 0").uniqueResult(0);
// 如果该托盘号不存在缓冲区则返回异常
if (MapUtil.isEmpty(json)) {
throw new Exception("当前缓冲区内不存在托盘号为" + vehicle_code + "的托盘!");
}
int count = 0;
JSONObject jsonObject = wo.query("kiln_code=" + kiln_code + " AND region_code= 1 AND is_delete = 0","order_seq desc").uniqueResult(0);
if (jsonObject != null) {
count = jsonObject.getInteger("order_seq");
}
// 将托盘放入指定窑道
json.put("kiln_code", kiln_code);
json.put("region_code", 1);
json.put("order_seq", count + 1);
wo.update(json);
break;
}
case 1: {
//出窑到缓存位
//检查指定窑道外部有无仍然存留的托盘
JSONObject jsonObject = wo.query("kiln_code ='" + kiln_code + "' AND region_code= 2 AND is_delete = 0").uniqueResult(0);
if (jsonObject != null) {
log.error("当前窑道" + kiln_code + "外冷却区存在存留托盘,无法出窑!");
log.error(jsonObject.toJSONString());
resp.put("status", "400");
resp.put("message", "窑道外冷却区存在存留托盘,无法出窑!");
return resp;
}
// 查询指定窑道所有托盘,将其状态改为已出窑
JSONArray jsonArray = wo.query("kiln_code ='" + kiln_code + "' AND region_code= 1 AND is_delete = 0").getResultJSONArray(0);
//将所有点位更改为有货
WQLObject point = WQLObject.getWQLObject("sch_base_point");
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject js = jsonArray.getJSONObject(i);
JSONObject json = new JSONObject();
json.put("point_status", 3);
json.put("update_time", DateUtil.now());
point.update(json, "point_code = 'YWHC0"+js.getString("order_seq")+"'");
JSONObject vihicleJson = new JSONObject();
json.put("region_code", 2);
json.put("point_code", "YWHC0"+js.getString("order_seq"));
wo.update(json, "group_id=" + js.getString("group_id") );
}
break;
}
case 2:{
JSONObject json = wo.query("vehicle_code ='" + vehicle_code + "' AND is_delete = 0").uniqueResult(0);
// 将托盘置为已拆垛并删除,供后续重复使用
json.put("kiln_code", kiln_code);
json.put("region_code", 3);
json.put("is_delete", 1);
wo.update(json);
//将点位更改为无货
WQLObject point = WQLObject.getWQLObject("sch_base_point");
JSONObject pointJson = new JSONObject();
pointJson.put("point_status", 1);
pointJson.put("update_time", DateUtil.now());
point.update(pointJson, "point_code = 'YWHC0"+json.getString("order_seq")+"'");
}
default:
break;
}
} catch (Exception e) {
log.error("更新托盘状态失败{}", e.getMessage(), e);
}
resp.put("status", "200");
resp.put("message", "更新托盘状态成功!");
return resp;
}
}

View File

@@ -0,0 +1,40 @@
package org.nl.wms.pda.point.rest;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.logging.annotation.Log;
import org.nl.wms.pda.point.service.PdaPointService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
@Api(tags = "点位绑定解绑")
@RequestMapping("api/pda/point")
@Slf4j
public class pdaPointController {
private final PdaPointService pdaPointService;
@PostMapping("/queryPoint")
@Log("查询")
@ApiOperation("查询点位状态")
public ResponseEntity<Object> confirm(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaPointService.queryPoint(whereJson), HttpStatus.OK);
}
@PostMapping("/binding")
@Log("点位绑定解绑")
@ApiOperation("点位绑定解绑")
public ResponseEntity<Object> binding(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaPointService.queryPoint(whereJson), HttpStatus.OK);
}
}

View File

@@ -0,0 +1,14 @@
package org.nl.wms.pda.point.service;
import com.alibaba.fastjson.JSONObject;
public interface PdaPointService {
/**
* 点位查询
* @param whereJson /
* @return JSONObject
*/
JSONObject queryPoint(JSONObject whereJson);
}

View File

@@ -0,0 +1,70 @@
package org.nl.wms.pda.point.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.common.utils.RedisUtils;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.basedata.service.VehicleService;
import org.nl.wms.basedata.service.dto.VehicleDto;
import org.nl.wms.pda.outStruct.service.OutStructService;
import org.nl.wms.pda.point.service.PdaPointService;
import org.nl.wms.sch.tasks.RegionTypeEnum;
import org.nl.wms.st.structivt.service.KlhcqIvt;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@RequiredArgsConstructor
@Slf4j
public class PdaPointServiceImpl implements PdaPointService {
private final RedisUtils redisUtils;
private final VehicleService vehicleService;
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject queryPoint(JSONObject param) {
String vehicle_code = param.getString("carrier_code");
if (StrUtil.isBlank(vehicle_code)) {
throw new BadRequestException("载具号不能为空");
}
VehicleDto vehicle = vehicleService.findByCode(vehicle_code);
if (ObjectUtil.isEmpty(vehicle)) {
throw new BadRequestException("载具号不存在");
}
WQLObject wo = WQLObject.getWQLObject("ST_IVT_StructIvt");
WQLObject wo_point = WQLObject.getWQLObject("sch_base_point");
log.info("手持出库确认,从redis中删除对应的载具号:{},物料信息:{}", vehicle_code, redisUtils.get(vehicle_code));
redisUtils.del(vehicle_code);
redisUtils.del(vehicle_code + "-ivt_qty");
JSONObject jsonObject = wo.query("vehicle_code = '" + vehicle_code + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonObject)) {
jsonObject.put("vehicle_type", "");
jsonObject.put("vehicle_code", "");
jsonObject.put("material_id", "");
jsonObject.put("instorage_time", "");
wo.update(jsonObject);
String point_id = jsonObject.getString("point_id");
JSONObject jsonObject1 = wo_point.query("point_id = '" + point_id + "'").uniqueResult(0);
jsonObject1.put("point_status", "1");
jsonObject1.put("lock_type", "1");
jsonObject1.put("task_id", "");
jsonObject1.put("vehicle_type", "");
jsonObject1.put("vehicle_code", "");
wo_point.update(jsonObject1);
if (jsonObject.getString("region_code").equals(RegionTypeEnum.KLZCQ.getCode())
|| (jsonObject.getString("region_code").equals(RegionTypeEnum.GT1.getCode()))) {
KlhcqIvt.clear();
}
}
JSONObject result = new JSONObject();
result.put("code", "1");
result.put("desc", "出库成功");
return result;
}
}

View File

@@ -0,0 +1,81 @@
[交易说明]
交易名: 手持出库确认
所属模块:
功能简述:
版权所有:
表引用:
版本经历:
[数据库]
--指定数据库为空采用默认值默认为db.properties中列出的第一个库
[IO定义]
#################################################
## 表字段对应输入参数
#################################################
输入.flag TYPEAS s_string
输入.region_id TYPEAS s_string
[临时表]
--这边列出来的临时表就会在运行期动态创建
[临时变量]
--所有中间过程变量均可在此处定义
[业务过程]
##########################################
# 1、输入输出检查 #
##########################################
##########################################
# 2、主过程前处理 #
##########################################
##########################################
# 3、业务主过程 #
##########################################
IF 输入.flag = "1"
QUERY
SELECT
region_id,
region_code,
region_name
FROM
sch_base_region
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "2"
QUERY
SELECT
point_id,
point_code,
point_name
FROM
sch_base_point
WHERE
is_used = '1'
AND is_delete = '0'
OPTION 输入.region_id <> ""
region_id = 输入.region_id
ENDOPTION
ENDSELECT
ENDQUERY
ENDIF
IF 输入.flag = "3"
QUERY
SELECT
material_id,
material_code,
material_name
FROM
md_me_materialbase
ENDSELECT
ENDQUERY
ENDIF

View File

@@ -192,7 +192,7 @@ public class WorkorderServiceImpl implements WorkordeService {
@Override
@Transactional(rollbackFor = Exception.class)
public void submits(JSONObject param) {
public synchronized void submits(JSONObject param) {
Long currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
String now = DateUtil.now();
@@ -214,6 +214,13 @@ public class WorkorderServiceImpl implements WorkordeService {
map.put("qty", json.getString("plan_qty"));
map.put("material_code", jsonObject.getString("material_code"));
map.put("device_code", json.getString("device_code"));
map.put("material_name",jsonObject.getString("material_name"));
map.put("a",jsonObject.getString("a"));
map.put("b",jsonObject.getString("b"));
map.put("h",jsonObject.getString("h"));
map.put("w",jsonObject.getString("w"));
map.put("product_code",jsonObject.getString("product_code"));
map.put("number",jsonObject.getString("number"));
array.add(map);
Map<String, Object> resp = wmsToAcsService.order(array);
if (StrUtil.equals(String.valueOf(resp.get("status")), "200")) {

View File

@@ -110,6 +110,7 @@ public class AutoCreateTask {
JSONObject taskObj = errArr.getJSONObject(i);
taskObj.put("remark", "下发失败:"+taskObj.getString("message"));
taskObj.put("update_time", DateUtil.now());
taskObj.put("task_id",taskObj.getString("ext_task_id"));
taskTab.update(taskObj);
}
}

View File

@@ -0,0 +1,365 @@
package org.nl.wms.sch.tasks.phaseTwo;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.system.util.CodeUtil;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.wms.ext.acs.service.impl.WmsToAcsServiceImpl;
import org.nl.wms.sch.SchTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.nl.wms.sch.tasks.AcsTaskDto;
import org.nl.wms.sch.tasks.RegionTypeEnum;
import org.nl.wms.st.structivt.service.KlhcqIvt;
import org.nl.wms.util.IdUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@RequiredArgsConstructor
@Slf4j
/**
* 二期包装拆垛位请求叫料
*/
public class PalletizingTask extends AbstractAcsTask {
private final String THIS_CLASS = PalletizingTask.class.getName();
@Override
@Transactional(rollbackFor = Exception.class)
public List<AcsTaskDto> addTask() {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
/*
* 下发给ACS时需要特殊处理
*/
JSONArray arr = taskTab.query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0);
ArrayList<AcsTaskDto> acsTaskArr = new ArrayList<>();
for (int i = 0; i < arr.size(); i++) {
JSONObject json = arr.getJSONObject(i);
//JSONObject jsonMaterial = materialTab.query("material_id = '" + json.getString("material_id") + "'").uniqueResult(0);
AcsTaskDto dto = AcsTaskDto.builder()
.task_id(json.getString("task_id"))
.task_code(json.getString("task_code"))
.task_type(json.getString("acs_task_type"))
.start_device_code(json.getString("point_code1"))
.next_device_code(json.getString("point_code2"))
.vehicle_code(json.getString("vehicle_code"))
.vehicle_type(json.getString("vehicle_type"))
.material_code(json.getString("material_code"))
.priority(json.getString("priority"))
.remark(json.getString("remark"))
.build();
acsTaskArr.add(dto);
}
return acsTaskArr;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject task, String status) {
//任务表
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
//点位表
WQLObject pointTab = WQLObject.getWQLObject("sch_base_point");
//库存表
WQLObject ivtTab = WQLObject.getWQLObject("ST_IVT_StructIvt");
WQLObject vehicleTab = WQLObject.getWQLObject("sch_base_vehicle_group");
String task_id = task.getString("task_id");
String finished_type = task.getString("finished_type");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "'").uniqueResult(0);
String sort_seq = taskObj.getString("sort_seq");
String point_code1 = taskObj.getString("point_code1");
String point_code2 = taskObj.getString("point_code2");
JSONObject jsonEnd = pointTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
JSONObject jsonStart = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);
JSONObject vehicleJson = vehicleTab.query("vehicle_code ='"+taskObj.getString("vehicle_code")+"' and is_delete=0").uniqueResult(0);
//任务取消
if (StrUtil.equals(status, "0")) {
if (StrUtil.equals(taskObj.getString("task_status"), TaskStatusEnum.FINISHED.getCode())) {
throw new BadRequestException("已完成不能取消!");
}
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
taskObj.put("remark", "已取消");
taskTab.update(taskObj);
//取空任务取消
if (StrUtil.equals(sort_seq, "1")) {
//解锁起点
if (ObjectUtil.isNotEmpty(jsonStart)){
jsonStart.put("lock_type", "1");
jsonStart.put("task_id", "");
jsonStart.put("update_time", DateUtil.now());
pointTab.update(jsonStart);
}
}
//取满任务取消
if (StrUtil.equals(sort_seq, "2")) {
//解锁终点
if (ObjectUtil.isNotEmpty(jsonEnd)){
jsonEnd.put("lock_type", "1");
jsonEnd.put("task_id", "");
jsonEnd.put("update_time", DateUtil.now());
pointTab.update(jsonEnd);
}
}
vehicleJson.put("is_delete",0);
vehicleTab.update(vehicleJson);
}
// 更新任务状态为执行中
if (StrUtil.equals(status, TaskStatusEnum.EXECUTING.getCode())) {
taskObj.put("task_status", TaskStatusEnum.EXECUTING.getCode());
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
}
//任务完成
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
vehicleJson.put("is_delete",1);
vehicleJson.put("region_code",3);
vehicleTab.update(vehicleJson);
//判断状态,
if (StrUtil.equals("2", taskObj.getString("task_status"))) {
// 更改任务状态为完成
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
return;
}
//更改任务状态为完成
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
taskObj.put("update_optname", "acs");
taskObj.put("update_time", DateUtil.now());
taskObj.put("finished_type", finished_type);
taskTab.update(taskObj);
//取空任务完成
if (StrUtil.equals(sort_seq, "1")) {
//更新起点终点的库存
JSONObject ivtStart = ivtTab.query("point_code = '" + jsonStart.getString("point_code") + "'").uniqueResult(0);
JSONObject ivtEnd = ivtTab.query("point_code = '" + jsonEnd.getString("point_code") + "'").uniqueResult(0);
//修改终点库存
ivtEnd.put("vehicle_type", taskObj.getString("vehicle_type"));
ivtEnd.put("vehicle_code", taskObj.getString("vehicle_code"));
ivtEnd.put("material_id", taskObj.getString("material_id"));
ivtEnd.put("instorage_time", DateUtil.now());
ivtTab.update(ivtEnd);
//解锁终点
jsonEnd.put("lock_type", "1");
jsonEnd.put("vehicle_type", "");
jsonEnd.put("vehicle_code", "");
jsonEnd.put("material_id", "");
jsonEnd.put("point_status", "2");
jsonEnd.put("task_id", "");
jsonEnd.put("update_time", DateUtil.now());
pointTab.update(jsonEnd);
log.info("包装拆垛位请求叫料任务完成,终点解锁成功,任务号:{}", taskObj.getString("task_code"));
//修改起点库存
ivtStart.put("vehicle_type", "");
ivtStart.put("vehicle_code", "");
ivtStart.put("material_id", "");
ivtStart.put("instorage_time", DateUtil.now());
ivtTab.update(ivtStart);
//解锁起点
jsonStart.put("lock_type", "1");
jsonStart.put("vehicle_type", "");
jsonStart.put("vehicle_code", "");
jsonStart.put("material_id", "");
jsonStart.put("point_status", "1");
jsonStart.put("task_id", "");
jsonStart.put("update_time", DateUtil.now());
pointTab.update(jsonStart);
log.info("包装拆垛位请求叫料完成,起点解锁成功,任务号:{}", taskObj.getString("task_code"));
}
//取满任务完成
if (StrUtil.equals(sort_seq, "2")) {
//判断状态,
if (StrUtil.equals("2", taskObj.getString("task_status"))) {
// 更改任务状态为完成
taskObj.put("task_status", TaskStatusEnum.FINISHED.getCode());
taskObj.put("update_time", DateUtil.now());
taskTab.update(taskObj);
return;
}
//更新终点的库存
String region_code = jsonEnd.getString("region_code");
if (!StrUtil.equals(region_code, RegionTypeEnum.KLZHCQ.getCode())) {
jsonEnd.put("lock_type", "1");
jsonEnd.put("task_id", "");
jsonEnd.put("vehicle_type", "");
jsonEnd.put("vehicle_code", "");
jsonEnd.put("material_id", "");
jsonEnd.put("point_status", "1");
jsonEnd.put("update_time", DateUtil.now());
pointTab.update(jsonEnd);
log.info("包装拆垛位请求叫料任务完成,终点解锁成功,任务号:{}", taskObj.getString("task_code"));
JSONObject ivtEnd = ivtTab.query("point_code = '" + point_code2 + "'").uniqueResult(0);
Map<String, String> ivtMap = new HashMap<>();
ivtMap.put(taskObj.getString("vehicle_code"), taskObj.getString("material_id"));
try {
KlhcqIvt.add(ivtMap);
} catch (InterruptedException e) {
e.printStackTrace();
log.error("包装拆垛位请求叫料任务完成更新出现异常!" + e.getMessage());
}
//修改终点库存
ivtEnd.put("vehicle_type", taskObj.getString("vehicle_type"));
ivtEnd.put("vehicle_code", taskObj.getString("vehicle_code"));
ivtEnd.put("material_id", taskObj.getString("material_id"));
ivtEnd.put("instorage_time", DateUtil.now());
ivtTab.update(ivtEnd);
} else {
JSONObject jsonObject = ivtTab.query("point_code = '" + jsonEnd.getString("point_code") + "'").uniqueResult(0);
//修改终点库存信息
jsonObject.put("vehicle_type", taskObj.getString("vehicle_type"));
jsonObject.put("vehicle_code", taskObj.getString("vehicle_code"));
jsonObject.put("material_id", taskObj.getString("material_id"));
jsonObject.put("ivt_qty", taskObj.getString("qty"));
jsonObject.put("instorage_time", DateUtil.now());
ivtTab.update(jsonObject);
//解锁终点
jsonEnd.put("point_status", "3");
jsonEnd.put("lock_type", "1");
jsonEnd.put("task_id", "");
jsonEnd.put("update_time", DateUtil.now());
pointTab.update(jsonEnd);
log.info("包装拆垛位请求叫料完成,终点解锁成功,任务号:{}", taskObj.getString("task_code"));
}
}
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public String createTask(JSONObject form) {
String create_mode = form.getString("create_mode");
String is_auto_issue = form.getString("is_auto_issue");
String material_code =form.getString("material_code");
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表
//查找当前是否有未完成任务
JSONObject taskObj = taskTab.query("is_delete='0' and task_name = '包装拆垛位请求叫料' and task_status <> '" + TaskStatusEnum.FINISHED.getCode() + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj)){
log.error("存在未完成的任务:" + taskObj.getString("task_id"));
return taskObj.getString("task_id");
// throw new BadRequestException("存在未完成的任务:" + taskObj.getString("task_id"));
}
//查找起点当前缓存区最右边有货的点位及其对应的终点点位1-20-》21 22-41-》42
WQLObject tab = WQLObject.getWQLObject("sch_base_vehicle_group");
JSONObject pointObj =tab.query("is_delete='0' and region_code='2' and material_code='"+material_code+"'","order_seq desc").uniqueResult(0);
if(ObjectUtil.isEmpty(pointObj)){
log.error("当前窑外缓存区无点位有货!");
throw new BadRequestException("当前窑外缓存区无点位有货!");
}
SchTaskDto dto = SchTaskDto.builder()
.task_id(IdUtil.getLongId())
.task_code(CodeUtil.getNewCode("TASK_CODE"))
.task_type("1")
.task_name("包装拆垛位请求叫料")
.vehicle_code(pointObj.getString("vehicle_code"))
.task_status(TaskStatusEnum.START_AND_POINT.getCode())
.point_code1("YWHC0"+pointObj.getString("order_seq"))
.point_code2("YWHC0"+ (pointObj.getInteger("order_seq")>21?42:21))
.priority("1")
.handle_class(THIS_CLASS)
.is_auto_issue(is_auto_issue)
.acs_task_type("2")
.create_mode(create_mode)
.create_time(DateUtil.now())
.request_param(form.toJSONString())
.build();
JSONObject json = JSONObject.parseObject(JSON.toJSONString(dto));
taskTab.insert(json);
this.immediateNotifyAcs();
return String.valueOf(dto.getTask_id());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void forceFinish(String task_id) {
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status < " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj)) {
WmsToAcsServiceImpl wmsToAcsService = SpringContextHolder.getBean(WmsToAcsServiceImpl.class);
Integer task_status = taskObj.getInteger("task_status");
if (task_status >= 5) {
JSONArray array = new JSONArray();
JSONObject map = new JSONObject();
map.put("task_id", task_id);
map.put("task_code", taskObj.getString("task_code"));
array.add(map);
Map<String, Object> resp = wmsToAcsService.forceFinishToAcs(array);
if (StrUtil.equals(String.valueOf(resp.get("status")), "200")) {
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());
} else {
throw new BadRequestException(String.valueOf(resp.get("message")));
}
} else {
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());
}
} else {
throw new BadRequestException("任务已删除或者已完成!");
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void cancel(String task_id) {
WmsToAcsServiceImpl wmsToAcsService = SpringContextHolder.getBean(WmsToAcsServiceImpl.class);
WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task");
JSONObject taskObj = taskTab.query("task_id = '" + task_id + "' and is_delete = '0' and task_status <> " + TaskStatusEnum.FINISHED.getCode()).uniqueResult(0);
if (ObjectUtil.isNotEmpty(taskObj)) {
Integer task_status = taskObj.getInteger("task_status");
if (task_status >= 5) {
JSONArray array = new JSONArray();
JSONObject map = new JSONObject();
map.put("task_id", task_id);
map.put("task_code", taskObj.getString("task_code"));
array.add(map);
Map<String, Object> resp = wmsToAcsService.cancelToAcs(array);
if (StrUtil.equals(String.valueOf(resp.get("status")), "200")) {
this.updateTaskStatus(taskObj, "0");
} else {
throw new BadRequestException(String.valueOf(resp.get("message")));
}
} else {
this.updateTaskStatus(taskObj, "0");
}
} else {
throw new BadRequestException("任务已删除或者已完成!");
}
}
}

View File

@@ -0,0 +1,20 @@
package org.nl.wms.util;
import java.io.Serializable;
import java.util.HashMap;
/*
* @author ZZQ
* @Date 2022/11/29 2:55 下午
*/
public class MapOf implements Serializable {
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]);
}
return map;
}
}

View File

@@ -6,9 +6,9 @@ spring:
druid:
db-type: com.alibaba.druid.pool.DruidDataSource
driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
url: jdbc:log4jdbc:mysql://${DB_HOST:47.111.78.178}:${DB_PORT:3306}/${DB_NAME:hf_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
url: jdbc:log4jdbc:mysql://${DB_HOST:127.0.01}:${DB_PORT:3306}/${DB_NAME:hf_lms}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&useOldAliasMetadataBehavior=true
username: ${DB_USER:root}
password: ${DB_PWD:P@ssw0rd}
password: ${DB_PWD:123456}
# 初始连接数
initial-size: 5
# 最小连接数

View File

@@ -9,6 +9,8 @@ spring:
redis:
repositories:
enabled: false
cache:
type: redis
#配置 Jpa
jpa:

View File

@@ -58,7 +58,7 @@ https://juejin.cn/post/6844903775631572999
<!--开发环境:打印控制台-->
<springProfile name="dev">
<root level="debug">
<root level="info">
<appender-ref ref="CONSOLE"/>
</root>
<logger name="org.springframework" level="ERROR" additivity="false">

View File

@@ -0,0 +1,27 @@
import request from '@/utils/request'
export function add(data) {
return request({
url: 'api/vehicleDetail',
method: 'post',
data
})
}
export function del(ids) {
return request({
url: 'api/vehicleDetail/',
method: 'delete',
data: ids
})
}
export function edit(data) {
return request({
url: 'api/vehicleDetail',
method: 'put',
data
})
}
export default { add, edit, del }

View File

@@ -71,6 +71,48 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="16">
<el-form-item label="产品编号" prop="product_code">
<el-input v-model="form.product_code" style="width: 200px;" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="16">
<el-form-item label="物料长度" prop="a">
<el-input v-model="form.a" style="width: 200px;" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="16">
<el-form-item label="物料宽度" prop="b">
<el-input v-model="form.b" style="width: 200px;" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="16">
<el-form-item label="物料高度" prop="h">
<el-input v-model="form.h" style="width: 200px;" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="16">
<el-form-item label="物料厚度" prop="w">
<el-input v-model="form.w" style="width: 200px;" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="16">
<el-form-item label="托盘砖数量" prop="number">
<el-input v-model="form.number" style="width: 200px;" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="16">
<el-form-item label="是否启用" prop="is_used">