rev:修改

This commit is contained in:
2026-04-03 17:02:34 +08:00
parent d58831d18d
commit eb925c7330
37 changed files with 1083 additions and 70 deletions

View File

@@ -29,7 +29,7 @@ public class Init implements ApplicationRunner {
public void run(ApplicationArguments args) throws Exception {
// initTwoAttr(4,30,3,2, "2");
// createAttr();
// initTwoAttr2(4,10,3);
// initTwoAttr2(1,100,1);
}
@@ -66,15 +66,15 @@ public class Init implements ApplicationRunner {
col_num = "0" + i;
}
String struct_code = "Z" + row + "-" + col_num + "-" + layer_num + "";
String struct_code = "X" + row + "-" + col_num + "-" + layer_num + "";
// 新增仓位
json.setSect_id("1993215690856861696");
json.setSect_code("ZZC01");
json.setSect_name("中间站2主存");
json.setStor_id("1582991156504039423");
json.setStor_code("ZJZ01");
json.setStor_name("中间站2仓库");
json.setSect_id("2039261400093822976");
json.setSect_code("ESPXN01");
json.setSect_name("恩双平虚拟");
json.setStor_id("1582991156504039400");
json.setStor_code("ESP01");
json.setStor_name("恩双平总混颗粒仓库");
json.setLock_type("0");
json.setRow_num(BigDecimal.valueOf(row_num));
@@ -83,7 +83,7 @@ public class Init implements ApplicationRunner {
json.setBlock_num(BigDecimal.valueOf(1));
json.setStruct_code(struct_code);
json.setStruct_name("Z"+row + "" + col_num+ ""+ layer_num +"");
json.setStruct_name("X"+row + "" + col_num+ ""+ layer_num +"");
json.setSimple_name(json.getStruct_name());
json.setCreate_id("1");

View File

@@ -8,8 +8,6 @@ import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.RsaUtils;
@@ -94,4 +92,22 @@ public class MobileAuthorizationController {
return ResponseEntity.ok(authInfo);
}
public SysUser loginCheck(AuthUserDto authUser) throws Exception {
String salt = "salt";
// 密码解密 - 前端的加密规则: encrypt根据实际更改
String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, authUser.getPassword());
// 校验数据库
// 根据用户名查询,在比对密码
// 拿到多个已经抛出异常
SysUser userInfo = userService.getOne(new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getUsername, authUser.getUsername()));
if (ObjectUtil.isEmpty(userInfo) || !userInfo.getPassword().equals(SaSecureUtil.md5BySalt(password, salt))) {
throw new BadRequestException(LangProcess.msg("login_pwd"));
}
if (!userInfo.getIs_used()) {
throw new BadRequestException(LangProcess.msg("login_account"));
}
return userInfo;
}
}

View File

@@ -0,0 +1,43 @@
package org.nl.wms.basedata_manage.controller;
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.wms.basedata_manage.service.IMdPdReviewsignService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.Map;
/**
* <p>
* 双签复核表 控制层
* </p>
*
* @author Liuxy
* @since 2026-04-01
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/review")
@Slf4j
public class ReviewSignController {
@Resource
private IMdPdReviewsignService iMdPdReviewsignService;
@GetMapping
@Log("分页查询")
public ResponseEntity<Object> query(@RequestParam Map whereJson, PageQuery page) {
return new ResponseEntity<>(TableDataInfo.build(iMdPdReviewsignService.queryAll(whereJson, page)), HttpStatus.OK);
}
}

View File

@@ -0,0 +1,35 @@
package org.nl.wms.basedata_manage.service;
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.wms.basedata_manage.service.dao.MdPdReviewsign;
import java.util.Map;
/**
* <p>
* 双签复核表 服务类
* </p>
*
* @author Liuxy
* @since 2026-04-01
*/
public interface IMdPdReviewsignService extends IService<MdPdReviewsign> {
/**
* 分页查询
*
* @param whereJson : {查询参数}
* @param page : 分页对象
* @return 返回结果
*/
IPage<JSONObject> queryAll(Map whereJson, PageQuery page);
/**
* 插入双签记录
* @param dto 实体类
*/
void insert(MdPdReviewsign dto);
}

View File

@@ -0,0 +1,87 @@
package org.nl.wms.basedata_manage.service.dao;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* <p>
* 双签复核表
* </p>
*
* @author Liuxy
* @since 2026-04-01
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("md_pd_reviewsign")
public class MdPdReviewsign implements Serializable {
private static final long serialVersionUID = 1L;
/**
* id标识
*/
@TableId(value = "id")
private String id;
/**
* 袋码/桶码
*/
private String bag_code;
/**
* 物料标识
*/
private String material_id;
/**
* 批号
*/
private String pcsn;
/**
* 重量
*/
private String qty;
/**
* 时间
*/
private String create_time;
/**
* 操作人编码
*/
private String create_code;
/**
* 操作人名称
*/
private String create_name;
/**
* 复核人编码
*/
private String review_code;
/**
* 复核人名称
*/
private String review_name;
/**
* 动作
*/
private String action;
/**
* 载具编码
*/
private String vehicle_code;
}

View File

@@ -154,4 +154,14 @@ public interface MdPbStoragevehicleextMapper extends BaseMapper<MdPbStoragevehic
* @return List<JSONObject>
*/
List<JSONObject> queryMoreIvt(@Param("param") JSONObject param);
/**
* 手持查询库存信息(虚拟出库)
* @param param {
* material_code 物料编码
* pcsn 批次
* }
* @return List<JSONObject>
*/
List<JSONObject> pdaHyQueryIvt(@Param("param") JSONObject param);
}

View File

@@ -658,4 +658,39 @@
</where>
</select>
<select id="pdaHyQueryIvt" resultType="com.alibaba.fastjson.JSONObject">
SELECT
ext.*,
material.material_code,
material.material_name,
material.quality_code,
material.produce_name,
class.class_code,
class.class_name,
attr.struct_code
FROM
md_pb_storagevehicleext ext
INNER JOIN md_me_materialbase material ON material.material_id = ext.material_id
INNER JOIN st_ivt_structattr attr ON ext.storagevehicle_code = attr.storagevehicle_code
LEFT JOIN md_pb_classstandard class ON class.class_id = material.material_type_id
<where>
attr.is_used = "1"
AND ext.canuse_qty > 0
AND attr.sect_code = 'ESPXN01'
<if test="param.material_code != null and param.material_code != ''">
AND
(material.material_code LIKE #{param.material_code} or
material.material_name LIKE #{param.material_code} )
</if>
<if test="param.pcsn != null and param.pcsn != ''">
AND
ext.pcsn = #{param.pcsn}
</if>
</where>
</select>
</mapper>

View File

@@ -0,0 +1,30 @@
package org.nl.wms.basedata_manage.service.dao.mapper;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.nl.wms.basedata_manage.service.dao.MdPdReviewsign;
import java.util.Map;
/**
* <p>
* 双签复核表 Mapper 接口
* </p>
*
* @author Liuxy
* @since 2026-04-01
*/
public interface MdPdReviewsignMapper extends BaseMapper<MdPdReviewsign> {
/**
* 分页查询
*
* @param page 分页条件
* @param whereJson 查询条件
* @return IPage<JSONObject>
*/
IPage<JSONObject> queryAllByPage(Page<JSONObject> page, @Param("param") Map whereJson);
}

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.basedata_manage.service.dao.mapper.MdPdReviewsignMapper">
<select id="queryAllByPage" resultType="com.alibaba.fastjson.JSONObject">
SELECT
review.*,
mater.material_code,
mater.material_name,
mater.quality_code,
supp.supp_code,
supp.supp_name
FROM
md_pd_reviewsign review
INNER JOIN md_me_materialbase mater ON mater.material_id = review.material_id
LEFT JOIN md_cs_supplierbase supp ON mater.supp_code = supp.supp_code
where
1 = 1
<if test="param.material_code != null and param.material_code != ''">
AND
(mater.material_code LIKE #{param.material_code} or
mater.material_name LIKE #{param.material_code} )
</if>
<if test="param.pcsn != null and param.pcsn != ''">
AND
review.pcsn LIKE #{param.pcsn}
</if>
<if test="param.create_name != null and param.create_name != ''">
AND
review.create_name LIKE #{param.create_name}
</if>
<if test="param.begin_time != null">
AND
review.create_time >= #{param.begin_time}
</if>
<if test="param.end_time != null">
AND
review.create_time &lt;= #{param.end_time}
</if>
ORDER BY review.create_time Desc
</select>
</mapper>

View File

@@ -0,0 +1,46 @@
package org.nl.wms.basedata_manage.service.impl;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
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.nl.common.domain.query.PageQuery;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.basedata_manage.service.IMdPdReviewsignService;
import org.nl.wms.basedata_manage.service.dao.MdPdReviewsign;
import org.nl.wms.basedata_manage.service.dao.mapper.MdPdReviewsignMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Map;
/**
* <p>
* 双签复核表 服务实现类
* </p>
*
* @author Liuxy
* @since 2026-04-01
*/
@Service
public class MdPdReviewsignServiceImpl extends ServiceImpl<MdPdReviewsignMapper, MdPdReviewsign> implements IMdPdReviewsignService {
@Override
public IPage<JSONObject> queryAll(Map whereJson, PageQuery page) {
return this.baseMapper.queryAllByPage(new Page<>(page.getPage() + 1, page.getSize()),
whereJson);
}
@Override
@Transactional
public void insert(MdPdReviewsign dto) {
dto.setId(IdUtil.getStringId());
dto.setCreate_code(SecurityUtils.getCurrentUsername());
dto.setCreate_name(SecurityUtils.getCurrentNickName());
dto.setCreate_time(DateUtil.now());
this.save(dto);
}
}

View File

@@ -162,6 +162,7 @@ public class NotCarToWmsServiceImpl implements NotCarToWmsService {
jsonTask.put("task_group_id", task_group_id);
jsonTask.put("material_id", jsonIvt.getMaterial_id());
jsonTask.put("material_qty", jsonIvt.getMaterial_qty());
jsonTask.put("priority", pointIvtList.size() - i);
noCarBackCpTask.create(jsonTask);
}

View File

@@ -93,7 +93,7 @@ public class PdaCommonController {
@PostMapping("/confirmBagAssembly")
@Log("物料组袋-确认组袋")
@SaIgnore
public ResponseEntity<Object> confirmBagAssembly(@RequestBody @Valid AssemblyBagParam param) {
public ResponseEntity<Object> confirmBagAssembly(@RequestBody @Valid AssemblyBagParam param) throws Exception {
return new ResponseEntity<>(pdaCommonService.confirmBagAssembly(param), HttpStatus.OK);
}
@@ -107,7 +107,7 @@ public class PdaCommonController {
@PostMapping("/confirmPalletAssembly")
@Log("物料组盘-组盘")
@SaIgnore
public ResponseEntity<Object> confirmPalletAssembly(@RequestBody @Valid AssemblyPalletParam param) {
public ResponseEntity<Object> confirmPalletAssembly(@RequestBody @Valid AssemblyPalletParam param) throws Exception {
return new ResponseEntity<>(pdaCommonService.confirmPalletAssembly(param), HttpStatus.OK);
}
@@ -128,7 +128,7 @@ public class PdaCommonController {
@PostMapping("/confirmBucketAssembly")
@Log("物料组桶-组桶")
@SaIgnore
public ResponseEntity<Object> confirmBucketAssembly(@RequestBody @Valid AssemblyBucketParam param) {
public ResponseEntity<Object> confirmBucketAssembly(@RequestBody @Valid AssemblyBucketParam param) throws Exception {
return new ResponseEntity<>(pdaCommonService.confirmBucketAssembly(param), HttpStatus.OK);
}

View File

@@ -112,4 +112,25 @@ public class PdaWarehouseController {
public ResponseEntity<Object> confirmMore(@RequestBody JSONObject param) {
return new ResponseEntity<>(pdaWarehouseService.confirmMore(param), HttpStatus.OK);
}
@PostMapping("/hyConfirmIn")
@Log("虚拟入库 - 确认入库")
@SaIgnore
public ResponseEntity<Object> hyConfirmIn(@RequestBody JSONObject param) {
return new ResponseEntity<>(pdaWarehouseService.hyConfirmIn(param), HttpStatus.OK);
}
@PostMapping("/hyQueryIvt")
@Log("虚拟出库 - 查询库存明细")
@SaIgnore
public ResponseEntity<Object> hyQueryIvt(@RequestBody JSONObject param) {
return new ResponseEntity<>(pdaWarehouseService.hyQueryIvt(param), HttpStatus.OK);
}
@PostMapping("/hyConfirmOut")
@Log("虚拟出库 - 确认出库")
@SaIgnore
public ResponseEntity<Object> hyConfirmOut(@RequestBody JSONObject param) {
return new ResponseEntity<>(pdaWarehouseService.hyConfirmOut(param), HttpStatus.OK);
}
}

View File

@@ -19,7 +19,7 @@ public interface PdaBuildParamService {
* @param param
* @param startPoint
*/
void doGroupPallet(JSONObject param, String vehicleCode);
void doGroupPallet(JSONObject param, String vehicleCode) throws Exception;
/**
* 构建创建任务参数

View File

@@ -21,7 +21,7 @@ public interface PdaCommonService {
* @param param
* @return
*/
PdaResponse confirmBagAssembly(AssemblyBagParam param);
PdaResponse confirmBagAssembly(AssemblyBagParam param) throws Exception;
/**
* 获取组袋信息
@@ -37,7 +37,7 @@ public interface PdaCommonService {
* @param param
* @return
*/
PdaResponse confirmPalletAssembly(AssemblyPalletParam param);
PdaResponse confirmPalletAssembly(AssemblyPalletParam param) throws Exception;
/**
* 空托盘入库
@@ -47,7 +47,7 @@ public interface PdaCommonService {
*/
PdaResponse inEmptyVehicle(JSONObject param);
PdaResponse confirmBucketAssembly(AssemblyBucketParam param);
PdaResponse confirmBucketAssembly(AssemblyBucketParam param) throws Exception;
/**
* 空载具堆叠-查询点位堆叠明细

View File

@@ -110,4 +110,32 @@ public interface PdaWarehouseService {
* @return PdaResponse
*/
PdaResponse confirmMore(JSONObject param);
/**
* 虚拟入库 - 确认入库
* @param param {
* rows: 明细
* }
* @return PdaResponse
*/
PdaResponse hyConfirmIn(JSONObject param);
/**
* 虚拟出库 - 查询库存明细
* @param param {
* material_code: 物料编码
* pcsn: 批次
* }
* @return PdaResponse
*/
PdaResponse hyQueryIvt(JSONObject param);
/**
* 虚拟出库 - 确认出库
* @param param {
* rows [列表明细]
* }
* @return PdaResponse
*/
PdaResponse hyConfirmOut(JSONObject param);
}

View File

@@ -28,6 +28,10 @@ public class AssemblyBagParam {
private String pcsn;
@NotNull(message = "数量不能为空")
private BigDecimal qty;
@NotBlank(message = "复核人编码不能为空")
private String username;
@NotBlank(message = "复核人名称不能为空")
private String password;
public static GroupPlate buildGroupObj(AssemblyBagParam param) {
GroupPlate groupPlate = new GroupPlate();

View File

@@ -22,5 +22,9 @@ public class AssemblyBucketParam {
@NotBlank(message = "批次号不能为空")
private String pcsn;
private BigDecimal qty;
@NotBlank(message = "复核人编码不能为空")
private String username;
@NotBlank(message = "复核人名称不能为空")
private String password;
}

View File

@@ -16,6 +16,10 @@ import java.util.List;
public class AssemblyPalletParam {
@NotBlank(message = "托盘码不能为空")
private String vehicle_code;
@NotNull(message = "袋信息不能为空")
@NotNull(message = "袋信息不能为空")
private List<GroupPlate> group_plates;
@NotBlank(message = "复核人编码不能为空")
private String username;
@NotBlank(message = "复核人名称不能为空")
private String password;
}

View File

@@ -80,7 +80,7 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService {
private IStructattrService structattrService;
@Override
public void doGroupPallet(JSONObject param, String vehicleCode) {
public void doGroupPallet(JSONObject param, String vehicleCode) throws Exception {
JSONArray rows = param.getJSONArray("rows");
List<String> bagCode = rows
.stream()

View File

@@ -13,11 +13,17 @@ import lombok.extern.slf4j.Slf4j;
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.controller.secutiry.MobileAuthorizationController;
import org.nl.system.service.dict.ISysDictService;
import org.nl.system.service.secutiry.dto.AuthUserDto;
import org.nl.system.service.user.dao.SysUser;
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService;
import org.nl.wms.basedata_manage.service.IMdPdGroupbucketService;
import org.nl.wms.basedata_manage.service.IMdPdReviewsignService;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.MdPdGroupbucket;
import org.nl.wms.basedata_manage.service.dao.MdPdReviewsign;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.basedata_manage.service.dao.mapper.MdPdGroupbucketMapper;
import org.nl.wms.pda.general_management.service.PdaCommonService;
@@ -48,6 +54,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -88,6 +95,8 @@ public class PdaCommonServiceImpl implements PdaCommonService {
private IMdPdGroupbucketService groupbucketService;
@Resource
private MdPdGroupbucketMapper mdPdGroupbucketMapper;
@Resource
private IMdPdReviewsignService iMdPdReviewsignService;
/**
* 点位服务类
@@ -106,6 +115,7 @@ public class PdaCommonServiceImpl implements PdaCommonService {
@SneakyThrows
@Override
@Transactional
public PdaResponse callEmptyVehicle(JSONObject param) {
log.info("手持请求呼叫空托盘:{}", param);
RLock lock = redissonClient.getLock("lock:callEmptyVehicle");
@@ -162,7 +172,15 @@ public class PdaCommonServiceImpl implements PdaCommonService {
}
@Override
public PdaResponse confirmBagAssembly(AssemblyBagParam param) {
@Transactional
public PdaResponse confirmBagAssembly(AssemblyBagParam param) throws Exception {
// -------------调用接口进行账户密码进行校验-------------
MobileAuthorizationController bean = SpringContextHolder.getBean(MobileAuthorizationController.class);
AuthUserDto authUserDto = new AuthUserDto();
authUserDto.setUsername(param.getUsername());
authUserDto.setPassword(param.getPassword());
SysUser sysUser = bean.loginCheck(authUserDto);
List<GroupPlate> list = groupplateService.list(new LambdaQueryWrapper<GroupPlate>()
.eq(GroupPlate::getBag_code, param.getBagNo())
.le(GroupPlate::getStatus, "2"));
@@ -171,6 +189,17 @@ public class PdaCommonServiceImpl implements PdaCommonService {
}
GroupPlate groupPlate = AssemblyBagParam.buildGroupObj(param);
groupplateService.save(groupPlate);
// -------------插入双签记录-------------
MdPdReviewsign mdPdReviewsign = new MdPdReviewsign();
mdPdReviewsign.setBag_code(groupPlate.getBag_code());
mdPdReviewsign.setMaterial_id(groupPlate.getMaterial_id());
mdPdReviewsign.setPcsn(groupPlate.getPcsn());
mdPdReviewsign.setQty(groupPlate.getQty().toString());
mdPdReviewsign.setReview_code(sysUser.getUsername());
mdPdReviewsign.setReview_name(sysUser.getPerson_name());
mdPdReviewsign.setAction("组袋");
iMdPdReviewsignService.insert(mdPdReviewsign);
return PdaResponse.requestOk("组袋成功!");
}
@@ -190,7 +219,14 @@ public class PdaCommonServiceImpl implements PdaCommonService {
@Override
@Transactional
public PdaResponse confirmPalletAssembly(AssemblyPalletParam param) {
public PdaResponse confirmPalletAssembly(AssemblyPalletParam param) throws Exception {
// -------------调用接口进行账户密码进行校验-------------
MobileAuthorizationController bean = SpringContextHolder.getBean(MobileAuthorizationController.class);
AuthUserDto authUserDto = new AuthUserDto();
authUserDto.setUsername(param.getUsername());
authUserDto.setPassword(param.getPassword());
SysUser sysUser = bean.loginCheck(authUserDto);
// 判断此载具状态
JSONObject jsonObject = new JSONObject();
jsonObject.put("vehicle_code", param.getVehicle_code());
@@ -207,11 +243,28 @@ public class PdaCommonServiceImpl implements PdaCommonService {
groupPlate.setVehicle_code(param.getVehicle_code());
groupPlate.setTableData(param.getGroup_plates());
groupplateService.create(groupPlate);
// -------------插入双签记录-------------
List<GroupPlate> lateList = param.getGroup_plates();
for (int i = 0; i < lateList.size(); i++) {
GroupPlate dao = lateList.get(i);
MdPdReviewsign mdPdReviewsign = new MdPdReviewsign();
mdPdReviewsign.setBag_code(dao.getBag_code());
mdPdReviewsign.setMaterial_id(dao.getMaterial_id());
mdPdReviewsign.setPcsn(dao.getPcsn());
mdPdReviewsign.setQty(dao.getQty().toString());
mdPdReviewsign.setReview_code(sysUser.getUsername());
mdPdReviewsign.setReview_name(sysUser.getPerson_name());
mdPdReviewsign.setAction("组盘");
mdPdReviewsign.setVehicle_code(param.getVehicle_code());
iMdPdReviewsignService.insert(mdPdReviewsign);
}
return PdaResponse.requestOk("组盘成功!");
}
@SneakyThrows
@Override
@Transactional
public PdaResponse inEmptyVehicle(JSONObject param) {
log.info("手持请求空托盘入库:{}", param);
RLock lock = redissonClient.getLock("lock:inEmptyVehicle");
@@ -231,7 +284,15 @@ public class PdaCommonServiceImpl implements PdaCommonService {
}
@Override
public PdaResponse confirmBucketAssembly(AssemblyBucketParam param) {
@Transactional
public PdaResponse confirmBucketAssembly(AssemblyBucketParam param) throws Exception {
// -------------调用接口进行账户密码进行校验-------------
MobileAuthorizationController bean = SpringContextHolder.getBean(MobileAuthorizationController.class);
AuthUserDto authUserDto = new AuthUserDto();
authUserDto.setUsername(param.getUsername());
authUserDto.setPassword(param.getPassword());
SysUser sysUser = bean.loginCheck(authUserDto);
String bucket_code = param.getBucket_code();
// 查询桶码是否存在
storagevehicleinfoService.getByCode(bucket_code);
@@ -250,6 +311,17 @@ public class PdaCommonServiceImpl implements PdaCommonService {
groupbucket.setQty_unit_id("1585604695483879424");
groupbucket.setQty_unit_name("千克");
groupbucketService.save(groupbucket);
// -------------插入双签记录-------------
MdPdReviewsign mdPdReviewsign = new MdPdReviewsign();
mdPdReviewsign.setBag_code(groupbucket.getBucket_code());
mdPdReviewsign.setMaterial_id(groupbucket.getMaterial_id());
mdPdReviewsign.setPcsn(groupbucket.getPcsn());
mdPdReviewsign.setQty(IOSConstant.ZERO);
mdPdReviewsign.setReview_code(sysUser.getUsername());
mdPdReviewsign.setReview_name(sysUser.getPerson_name());
mdPdReviewsign.setAction("组桶");
iMdPdReviewsignService.insert(mdPdReviewsign);
return PdaResponse.requestOk();
}

View File

@@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.IdUtil;
import org.nl.config.SpringContextHolder;
import org.nl.system.service.param.ISysParamService;
@@ -16,6 +17,8 @@ import org.nl.wms.ext.util.NoCarResponse;
import org.nl.wms.pda.general_management.service.PdaNotCarService;
import org.nl.wms.pda.util.PDAEnum;
import org.nl.wms.pda.util.PdaResponse;
import org.nl.wms.pdm_management.service.IMdPdmPackagingService;
import org.nl.wms.pdm_management.service.dao.MdPdmPackaging;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.mapper.SchBasePointMapper;
import org.nl.wms.sch_manage.service.util.tasks.NoCarBackCpTask;
@@ -79,6 +82,12 @@ public class PdaNotCarServiceImpl implements PdaNotCarService {
@Resource
private MdMeMaterialbaseMapper mdMeMaterialbaseMapper;
/**
* 收货服务
*/
@Resource
private IMdPdmPackagingService iMdPdmPackagingService;
@Override
public PdaResponse queryNotCarPoint() {
return PdaResponse.requestParamOk(schBasePointMapper.queryNotCarPoint());
@@ -97,11 +106,57 @@ public class PdaNotCarServiceImpl implements PdaNotCarService {
// 根据物料类型查询目的点位
List<SchBasePoint> pointList = new ArrayList<>();
if (json.getString("class_code").equals(IOSConstant.WBC001)) {
// 1-说明书 2-小箱子 3-大箱子
String material_type = "";
// 说明书
Param wbc_1 = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("wbc_1");
// 小箱子
Param wbc_2 = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("wbc_2");
// 大箱子
Param wbc_3 = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("wbc_3");
if (wbc_1.getValue().contains(json.getString("material_code"))) {
material_type = IOSConstant.ONE;
} else if (wbc_2.getValue().contains(json.getString("material_code"))) {
material_type = IOSConstant.TWO;
} else if (wbc_3.getValue().contains(json.getString("material_code"))) {
material_type = IOSConstant.THREE;
}
if (ObjectUtil.isEmpty(material_type)) {
throw new BadRequestException("当前物料编码【" + json.getString("material_code") + "】没有存放位!");
}
// 查询存放外包材区域
pointList = schBasePointMapper.getNoTaskPointByRegionAndType(IOSConstant.AGVDJ01, IOSConstant.ONE, IOSConstant.ONE);
pointList = schBasePointMapper.getNoTaskPointByRegionAndType(IOSConstant.AGVDJ01, IOSConstant.ONE, IOSConstant.ONE, material_type);
// 插入外包材库存
if (ObjectUtil.isNotEmpty(pointList)) {
MdPdmPackaging packDao = iMdPdmPackagingService.getOne(
new QueryWrapper<MdPdmPackaging>().lambda()
.eq(MdPdmPackaging::getPoint_code, pointList.get(0).getPoint_code())
);
if (ObjectUtil.isNotEmpty(packDao)) {
// 更新
packDao.setMaterial_id(json.getString("material_id"));
packDao.setPcsn(json.getString("pcsn"));
packDao.setQty(json.getBigDecimal("material_qty"));
packDao.setRemark("由无人车卸货创建");
iMdPdmPackagingService.updateById(packDao);
} else {
// 插入
MdPdmPackaging mdPdmPackaging = new MdPdmPackaging();
mdPdmPackaging.setPacking_id(IdUtil.getStringId());
mdPdmPackaging.setMaterial_id(json.getString("material_id"));
mdPdmPackaging.setPcsn(json.getString("material_pcsn"));
mdPdmPackaging.setQty(json.getBigDecimal("material_qty"));
mdPdmPackaging.setCreate_id(SecurityUtils.getCurrentUserId());
mdPdmPackaging.setCreate_name(SecurityUtils.getCurrentNickName());
mdPdmPackaging.setCreate_time(DateUtil.now());
mdPdmPackaging.setPoint_code(pointList.get(0).getPoint_code());
mdPdmPackaging.setRemark("由无人车卸货创建");
iMdPdmPackagingService.save(mdPdmPackaging);
}
}
} else {
// 查询无人车卸货缓存区域
pointList = schBasePointMapper.getNoTaskPointByRegionAndType(IOSConstant.WXHHC01, IOSConstant.ONE, IOSConstant.ONE);
pointList = schBasePointMapper.getNoTaskPointByRegionAndType(IOSConstant.WXHHC01, IOSConstant.ONE, IOSConstant.ONE, null);
}
if (ObjectUtil.isEmpty(pointList)) {
throw new BadRequestException("卸货点位无空位可用!");
@@ -114,7 +169,9 @@ public class PdaNotCarServiceImpl implements PdaNotCarService {
jsonTask.put("point_code2", pointList.get(0).getPoint_code());
jsonTask.put("material_id", json.getString("material_id"));
jsonTask.put("material_qty", json.getString("material_qty"));
jsonTask.put("material_pcsn", json.getString("material_pcsn"));
jsonTask.put("task_group_id", task_group_id);
jsonTask.put("priority", rows.size() - i);
noCarUnloadTask.create(jsonTask);
}
return PdaResponse.requestOk();
@@ -131,7 +188,7 @@ public class PdaNotCarServiceImpl implements PdaNotCarService {
@Override
public PdaResponse queryZhPoint(JSONObject whereJson) {
List<SchBasePoint> pointList = schBasePointMapper.getNoTaskPointByRegionAndType("CPQ01", IOSConstant.ONE, IOSConstant.TWO);
List<SchBasePoint> pointList = schBasePointMapper.getNoTaskPointByRegionAndType("CPQ01", IOSConstant.ONE, IOSConstant.TWO, null);
if (ObjectUtil.isNotEmpty(whereJson.getString("point_code"))) {
pointList = pointList.stream()
.filter(row -> row.getPoint_code().equals(whereJson.getString("point_code")))
@@ -245,8 +302,12 @@ public class PdaNotCarServiceImpl implements PdaNotCarService {
// 根据点位分组
Map<String, List<JSONObject>> pointMapList = pointList.stream()
.collect(Collectors.groupingBy(obj -> obj.getString("point_code")));
// 外包位
int wbClass = 0;
// 说明书
int wbcClass_1 = 0;
// 小纸箱
int wbcClass_2 = 0;
// 大纸箱
int wbcClass_3 = 0;
// 无人车卸货缓存
int materialClass = 0;
@@ -270,9 +331,27 @@ public class PdaNotCarServiceImpl implements PdaNotCarService {
throw new BadRequestException("当前点位【" + point + "】存在不相同物料,请处理!");
}
schBasePoint.setMaterial_qty(list.get(0).getString("qty"));
schBasePoint.setMaterial_pcsn(list.get(0).getString("pcsn"));
// 更新需要用到的货位数量
if (list.get(0).getString("class_code").equals(IOSConstant.WBC001)) {
wbClass += 1;
// 说明书
Param wbc_1 = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("wbc_1");
// 小箱子
Param wbc_2 = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("wbc_2");
// 大箱子
Param wbc_3 = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("wbc_3");
// 判断是哪些外包材
for (JSONObject item : list) {
if (wbc_1.getValue().contains(item.getString("material_code"))) {
wbcClass_1 += 1;
} else if (wbc_2.getValue().contains(item.getString("material_code"))) {
wbcClass_2 += 1;
} else if (wbc_3.getValue().contains(item.getString("material_code"))) {
wbcClass_3 += 1;
} else {
throw new BadRequestException("当前物料编码【" + item.getString("material_code") + "】没有存放位!");
}
}
} else {
materialClass += 1;
}
@@ -282,6 +361,7 @@ public class PdaNotCarServiceImpl implements PdaNotCarService {
.map(row -> row.getDoubleValue("qty"))
.reduce(Double::sum).orElse(0.0);
schBasePoint.setMaterial_qty(String.valueOf(qty));
schBasePoint.setMaterial_pcsn(list.get(0).getString("pcsn"));
// 更新需要用到的货位数量
materialClass = +1;
}
@@ -289,15 +369,29 @@ public class PdaNotCarServiceImpl implements PdaNotCarService {
schBasePointMapper.updateById(schBasePoint);
}
// ---------------校验车间空位---------------
if (wbClass > 0) {
// 查询外包材空位
List<SchBasePoint> wbPointList = schBasePointMapper.getNoTaskPointByRegionAndType(IOSConstant.AGVDJ01, IOSConstant.ONE, IOSConstant.ONE);
if (wbClass > wbPointList.size()) {
throw new BadRequestException("存放外包材空位不足,当前需要空位【" + wbClass + "】当前已有空位【" + wbPointList.size() + "");
if (wbcClass_1 > 0) {
// 查询外包材说明书空位
List<SchBasePoint> wbPointList = schBasePointMapper.getNoTaskPointByRegionAndType(IOSConstant.AGVDJ01, IOSConstant.ONE, IOSConstant.ONE, IOSConstant.ONE);
if (wbcClass_1 > wbPointList.size()) {
throw new BadRequestException("说明书空位不足,当前需要空位【" + wbcClass_1 + "】当前已有空位【" + wbPointList.size() + "");
}
}
if (wbcClass_2 > 0) {
// 查询外包材小箱子空位
List<SchBasePoint> wbPointList = schBasePointMapper.getNoTaskPointByRegionAndType(IOSConstant.AGVDJ01, IOSConstant.ONE, IOSConstant.ONE, IOSConstant.TWO);
if (wbcClass_2 > wbPointList.size()) {
throw new BadRequestException("小箱空位不足,当前需要空位【" + wbcClass_2 + "】当前已有空位【" + wbPointList.size() + "");
}
}
if (wbcClass_3 > 0) {
// 查询外包材大箱子空位
List<SchBasePoint> wbPointList = schBasePointMapper.getNoTaskPointByRegionAndType(IOSConstant.AGVDJ01, IOSConstant.ONE, IOSConstant.ONE, IOSConstant.THREE);
if (wbcClass_3 > wbPointList.size()) {
throw new BadRequestException("大箱空位不足,当前需要空位【" + wbcClass_3 + "】当前已有空位【" + wbPointList.size() + "");
}
}
if (materialClass > 0) {
List<SchBasePoint> xhPointList = schBasePointMapper.getNoTaskPointByRegionAndType(IOSConstant.WXHHC01, IOSConstant.ONE, IOSConstant.ONE);
List<SchBasePoint> xhPointList = schBasePointMapper.getNoTaskPointByRegionAndType(IOSConstant.WXHHC01, IOSConstant.ONE, IOSConstant.ONE, null);
if (materialClass > xhPointList.size()) {
throw new BadRequestException("卸货缓存区空位不足,当前需要空位【" + materialClass + "】当前已有空位【" + xhPointList.size() + "");
}
@@ -368,7 +462,7 @@ public class PdaNotCarServiceImpl implements PdaNotCarService {
// 呼叫无人车
NoCarResponse noCarResponse = wmsToNotCarService.callNotCat(param);
if (noCarResponse.getCode() != 200) {
throw new BadRequestException("下发无人车任务失败"+noCarResponse.getMsg());
throw new BadRequestException("下发无人车任务失败" + noCarResponse.getMsg());
}
} catch (Exception ignored) {
throw new BadRequestException(ignored.getMessage());

View File

@@ -18,14 +18,15 @@ import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.SpringContextHolder;
import org.nl.system.controller.secutiry.MobileAuthorizationController;
import org.nl.system.service.param.ISysParamService;
import org.nl.system.service.param.dao.Param;
import org.nl.system.service.secutiry.dto.AuthUserDto;
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.MdPbStoragevehicleext;
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleinfo;
import org.nl.wms.basedata_manage.service.dao.Sectattr;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.basedata_manage.service.dao.*;
import org.nl.wms.pda.general_management.service.PdaBuildParamService;
import org.nl.wms.pda.general_management.service.PdaWarehouseService;
import org.nl.wms.pda.general_management.service.PdaProductionService;
@@ -124,6 +125,9 @@ public class PdaProductionServiceImpl implements PdaProductionService {
private SectMaterialCheck sectMaterialCheck;
@Resource
private SchBasePointMapper schBasePointMapper;
@Resource
private IMdPdReviewsignService iMdPdReviewsignService;
@Override
public PdaResponse getGroupInfo(JSONObject param) {
// search;
@@ -306,6 +310,13 @@ public class PdaProductionServiceImpl implements PdaProductionService {
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
// -------------调用接口进行账户密码进行校验-------------
MobileAuthorizationController bean = SpringContextHolder.getBean(MobileAuthorizationController.class);
AuthUserDto authUserDto = new AuthUserDto();
authUserDto.setUsername(param.getString("username"));
authUserDto.setPassword(param.getString("password"));
SysUser sysUser = bean.loginCheck(authUserDto);
String search = param.getString("search");
SchBasePoint startPoint = pointService.getByPointCode(search, false);
if (ObjectUtil.isEmpty(startPoint)) {
@@ -344,6 +355,21 @@ public class PdaProductionServiceImpl implements PdaProductionService {
// 3 创建任务
Map<String, Object> jsonMst = defaultPdaBuildParam.buildTaskData(startPoint, invId);
rawAssistIStorService.divPoint(jsonMst);
// -------------插入双签记录-------------
for (int i = 0; i < res.size(); i++) {
JSONObject json = res.get(i);
MdPdReviewsign mdPdReviewsign = new MdPdReviewsign();
mdPdReviewsign.setBag_code(json.getString("bag_code"));
mdPdReviewsign.setMaterial_id(json.getString("material_id"));
mdPdReviewsign.setPcsn(json.getString("pcsn"));
mdPdReviewsign.setQty(json.getString("qty"));
mdPdReviewsign.setReview_code(sysUser.getUsername());
mdPdReviewsign.setReview_name(sysUser.getPerson_name());
mdPdReviewsign.setAction("剩料回库");
mdPdReviewsign.setVehicle_code(startPoint.getVehicle_code());
iMdPdReviewsignService.insert(mdPdReviewsign);
}
} else {
log.info("空载具回库");
// 空载具回库

View File

@@ -10,14 +10,15 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService;
import org.nl.wms.basedata_manage.service.IMdPdGroupbucketService;
import org.nl.wms.basedata_manage.service.ISectattrService;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext;
import org.nl.wms.basedata_manage.service.dao.MdPdGroupbucket;
import org.nl.wms.basedata_manage.service.dao.Sectattr;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.SpringContextHolder;
import org.nl.system.controller.secutiry.MobileAuthorizationController;
import org.nl.system.service.secutiry.dto.AuthUserDto;
import org.nl.system.service.user.dao.SysUser;
import org.nl.wms.basedata_manage.service.*;
import org.nl.wms.basedata_manage.service.dao.*;
import org.nl.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
import org.nl.wms.pda.general_management.service.PdaBuildParamService;
import org.nl.wms.pda.general_management.service.PdaWarehouseService;
@@ -39,6 +40,7 @@ import org.nl.wms.warehouse_management.service.dao.mapper.MdPbGroupplateMapper;
import org.nl.wms.warehouse_management.service.dto.MoreOrLessInsertDto;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -107,6 +109,21 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
@Resource
private IMdPdGroupbucketService iMdPdGroupbucketService;
/**
* 计量单位服务
*/
@Autowired
private IMdPbMeasureunitService iMdPbMeasureunitService;
/**
* 物料服务
*/
@Autowired
private IMdMeMaterialbaseService iMdMeMaterialbaseService;
@Resource
private IMdPdReviewsignService iMdPdReviewsignService;
@Override
public PdaResponse getPalletAssembly(JSONObject param) {
String bag_code = param.getString("bag_code");
@@ -514,6 +531,13 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
// -------------调用接口进行账户密码进行校验-------------
MobileAuthorizationController bean = SpringContextHolder.getBean(MobileAuthorizationController.class);
AuthUserDto authUserDto = new AuthUserDto();
authUserDto.setUsername(param.getString("username"));
authUserDto.setPassword(param.getString("password"));
SysUser sysUser = bean.loginCheck(authUserDto);
List<JSONObject> jsonList = param.getJSONArray("rows").toJavaList(JSONObject.class);
if (ObjectUtil.isEmpty(jsonList)) {
throw new BadRequestException("数据为空!");
@@ -531,11 +555,11 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
if (qty < change_qty) {
// 溢
moreOrLessInsertDto.setMol_type(IOSEnum.MORE_TYPE.code(""));
ivt_qty = NumberUtil.sub(change_qty,qty);
ivt_qty = NumberUtil.sub(change_qty, qty);
} else if (qty > change_qty) {
// 损
moreOrLessInsertDto.setMol_type(IOSEnum.MORE_TYPE.code(""));
ivt_qty = NumberUtil.sub(qty,change_qty);
ivt_qty = NumberUtil.sub(qty, change_qty);
} else {
// 不处理
continue;
@@ -548,7 +572,7 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
.eq(Structattr::getStoragevehicle_code, json.getString("vehicle_code"))
);
if (ObjectUtil.isEmpty(attrList)) {
throw new BadRequestException("当前载具【"+json.getString("vehicle_code")+"】不在库内");
throw new BadRequestException("当前载具【" + json.getString("vehicle_code") + "】不在库内");
}
moreOrLessInsertDto.setStor_id(attrList.get(0).getStor_id());
moreOrLessInsertDto.setTotal_qty(BigDecimal.valueOf(ivt_qty));
@@ -583,17 +607,28 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
// 更新袋重量
groupplateService.update(
new UpdateWrapper<GroupPlate>().lambda()
.eq(GroupPlate::getBag_code, json.getString("bag_code"))
.set(GroupPlate::getQty, change_qty)
.eq(GroupPlate::getBag_code, json.getString("bag_code"))
.set(GroupPlate::getQty, change_qty)
);
} else {
// 更新桶重量
iMdPdGroupbucketService.update(
new UpdateWrapper<MdPdGroupbucket>().lambda()
.eq(MdPdGroupbucket::getBucket_code, json.getString("vehicle_code"))
.set(MdPdGroupbucket::getQty, change_qty)
.eq(MdPdGroupbucket::getBucket_code, json.getString("vehicle_code"))
.set(MdPdGroupbucket::getQty, change_qty)
);
}
// -------------插入双签记录-------------
MdPdReviewsign mdPdReviewsign = new MdPdReviewsign();
mdPdReviewsign.setBag_code(json.getString("bag_code"));
mdPdReviewsign.setMaterial_id(json.getString("material_id"));
mdPdReviewsign.setPcsn(json.getString("pcsn"));
mdPdReviewsign.setQty(json.getString("change_qty"));
mdPdReviewsign.setReview_code(sysUser.getUsername());
mdPdReviewsign.setReview_name(sysUser.getPerson_name());
mdPdReviewsign.setAction("损益");
mdPdReviewsign.setVehicle_code(json.getString("vehicle_code"));
iMdPdReviewsignService.insert(mdPdReviewsign);
}
} else {
throw new BadRequestException("当前业务繁忙,稍后再试...");
@@ -605,4 +640,110 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
}
return PdaResponse.requestOk();
}
@Override
@Transactional
public PdaResponse hyConfirmIn(JSONObject param) {
List<JSONObject> rowsList = param.getJSONArray("rows").toJavaList(JSONObject.class);
if (ObjectUtil.isEmpty(rowsList)) {
throw new BadRequestException("明细不能为空");
}
// 组织入库参数
List<MdPbStoragevehicleext> updateIvtList = new ArrayList<>();
for (JSONObject json : rowsList) {
MdMeMaterialbase materialDao = iMdMeMaterialbaseService.getByCode(json.getString("material_code"));
if (ObjectUtil.isEmpty(materialDao)) {
throw new BadRequestException("物料【" + json.getString("material_code") + "】不存在!");
}
MdPbMeasureunit unitDao = iMdPbMeasureunitService.getById(materialDao.getBase_unit_id());
if (ObjectUtil.isEmpty(unitDao)) {
throw new BadRequestException("计量单位标识【" + materialDao.getBase_unit_id() + "】不存在!");
}
String xn_vehicle_code = CodeUtil.getNewCode("XN_VEHICLE_CODE");
// 查询一个虚拟空位
List<Structattr> attrList = structattrService.list(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getIs_used, IOSConstant.IS_DELETE_YES)
.eq(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.eq(Structattr::getSect_code, IOSEnum.SECT_CODE.code("恩双平虚拟库区"))
.eq(Structattr::getIs_delete, IOSConstant.IS_DELETE_NO)
.and(wrapper -> wrapper.isNull(Structattr::getStoragevehicle_code).or().eq(Structattr::getStoragevehicle_code, ""))
.orderByAsc(Structattr::getStruct_code)
);
if (ObjectUtil.isEmpty(attrList)) {
throw new BadRequestException("没有可用的虚拟库位!");
}
// 更新仓位载具号
Structattr structattr = attrList.get(0);
structattr.setStoragevehicle_code(xn_vehicle_code);
structattrService.updateById(structattr);
// 新增新载具库存信息
MdPbStoragevehicleext extParamDao = new MdPbStoragevehicleext();
extParamDao.setStoragevehicleext_id(IdUtil.getStringId());
extParamDao.setStoragevehicle_code(xn_vehicle_code);
extParamDao.setMaterial_id(json.getString("material_id"));
extParamDao.setPcsn(json.getString("pcsn"));
extParamDao.setQty_unit_id(unitDao.getMeasure_unit_id());
extParamDao.setQty_unit_name(unitDao.getUnit_name());
extParamDao.setCanuse_qty(json.getBigDecimal("qty"));
extParamDao.setFrozen_qty(BigDecimal.valueOf(0));
extParamDao.setInsert_time(DateUtil.now());
extParamDao.setUpdate_optid(SecurityUtils.getCurrentUserId());
extParamDao.setUpdate_optname(SecurityUtils.getCurrentNickName());
extParamDao.setUpdate_time(DateUtil.now());
updateIvtList.add(extParamDao);
}
iMdPbStoragevehicleextService.saveBatch(updateIvtList);
return PdaResponse.requestOk();
}
@Override
public PdaResponse hyQueryIvt(JSONObject param) {
return PdaResponse.requestParamOk(mdPbStoragevehicleextMapper.pdaHyQueryIvt(param));
}
@Override
public PdaResponse hyConfirmOut(JSONObject param) {
List<JSONObject> rowsList = param.getJSONArray("rows").toJavaList(JSONObject.class);
if (ObjectUtil.isEmpty(rowsList)) {
throw new BadRequestException("明细不能为空");
}
for (JSONObject json : rowsList) {
MdPbStoragevehicleext extDao = iMdPbStoragevehicleextService.getOne(
new QueryWrapper<MdPbStoragevehicleext>().lambda()
.eq(MdPbStoragevehicleext::getStoragevehicleext_id, json.getString("storagevehicleext_id"))
);
if (ObjectUtil.isEmpty(extDao)) {
throw new BadRequestException("当前载具【" + extDao.getStoragevehicle_code() + "】不存在相关物料批次库存,请检查数据!");
}
// 减扣库存
double canuse_qty = NumberUtil.sub(extDao.getCanuse_qty(), json.getDoubleValue("canuse_qty")).doubleValue();
if (canuse_qty <= 0) {
// 删除
iMdPbStoragevehicleextService.removeById(extDao);
// 更新仓位
Structattr structattr = structattrService.getOne(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getStoragevehicle_code, extDao.getStoragevehicle_code())
.eq(Structattr::getSect_code, IOSEnum.SECT_CODE.code("恩双平虚拟库区"))
);
if (ObjectUtil.isEmpty(structattr)) {
throw new BadRequestException("虚拟托盘为【" + extDao.getStoragevehicle_code() + "】的仓位不存在!");
}
structattr.setStoragevehicle_code("");
structattrService.updateById(structattr);
} else {
// 更新
extDao.setCanuse_qty(BigDecimal.valueOf(canuse_qty));
extDao.setUpdate_optid(SecurityUtils.getCurrentUserId());
extDao.setUpdate_optname(SecurityUtils.getCurrentNickName());
extDao.setUpdate_time(DateUtil.now());
iMdPbStoragevehicleextService.updateById(extDao);
}
}
return PdaResponse.requestOk();
}
}

View File

@@ -77,7 +77,7 @@ public class PdaPackagingController {
@PostMapping("/packInConfirm")
@Log("外包材送入-送入")
@SaIgnore
public ResponseEntity<Object> packInConfirm(@RequestBody JSONObject whereJson) {
public ResponseEntity<Object> packInConfirm(@RequestBody JSONObject whereJson) throws Exception {
return new ResponseEntity<>(pdaPackagingService.packInConfirm(whereJson), HttpStatus.OK);
}
@@ -98,7 +98,7 @@ public class PdaPackagingController {
@PostMapping("/packConfirmReturn")
@Log("外包材还回-确认还回")
@SaIgnore
public ResponseEntity<Object> packConfirmReturn(@RequestBody JSONObject whereJson) {
public ResponseEntity<Object> packConfirmReturn(@RequestBody JSONObject whereJson) throws Exception {
return new ResponseEntity<>(pdaPackagingService.packConfirmReturn(whereJson), HttpStatus.OK);
}

View File

@@ -86,7 +86,7 @@ public interface PdaPackagingService {
* }
* @return PdaResponse
*/
PdaResponse packInConfirm(JSONObject whereJson);
PdaResponse packInConfirm(JSONObject whereJson) throws Exception;
/**
* 外包材领用-查询点位库存明细
@@ -122,5 +122,5 @@ public interface PdaPackagingService {
* }
* @return PdaResponse
*/
PdaResponse packConfirmReturn(JSONObject whereJson);
PdaResponse packConfirmReturn(JSONObject whereJson) throws Exception;
}

View File

@@ -10,6 +10,12 @@ import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.JSONObjectOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.config.SpringContextHolder;
import org.nl.system.controller.secutiry.MobileAuthorizationController;
import org.nl.system.service.secutiry.dto.AuthUserDto;
import org.nl.system.service.user.dao.SysUser;
import org.nl.wms.basedata_manage.service.IMdPdReviewsignService;
import org.nl.wms.basedata_manage.service.dao.MdPdReviewsign;
import org.nl.wms.pda.general_management.service.PdaPublicInterfaceService;
import org.nl.wms.pda.packaging_management.service.PdaPackagingService;
import org.nl.wms.pda.util.PdaResponse;
@@ -71,6 +77,8 @@ public class PdaPackagingServiceImpl implements PdaPackagingService {
*/
@Resource
private PackagingMiddleTask packagingMiddleTask;
@Resource
private IMdPdReviewsignService iMdPdReviewsignService;
@Override
public PdaResponse queryPointRegion(JSONObject whereJson) {
@@ -201,7 +209,14 @@ public class PdaPackagingServiceImpl implements PdaPackagingService {
@Override
@Transactional
public PdaResponse packInConfirm(JSONObject whereJson) {
public PdaResponse packInConfirm(JSONObject whereJson) throws Exception {
// -------------调用接口进行账户密码进行校验-------------
MobileAuthorizationController bean = SpringContextHolder.getBean(MobileAuthorizationController.class);
AuthUserDto authUserDto = new AuthUserDto();
authUserDto.setUsername(whereJson.getString("username"));
authUserDto.setPassword(whereJson.getString("password"));
SysUser sysUser = bean.loginCheck(authUserDto);
List<JSONObject> rows = whereJson.getJSONArray("rows").toJavaList(JSONObject.class);
// 创建agv任务
JSONObject jsonTask = new JSONObject();
@@ -215,6 +230,17 @@ public class PdaPackagingServiceImpl implements PdaPackagingService {
jsonTask.put("material_qty", whereJson.getString("total_qty"));
jsonTask.put("task_type", ACSTaskTypeEnum.AGV_TASK.getCode());
packagingMiddleTask.create(jsonTask);
// -------------插入双签记录-------------
MdPdReviewsign mdPdReviewsign = new MdPdReviewsign();
mdPdReviewsign.setBag_code("");
mdPdReviewsign.setMaterial_id(rows.get(0).getString("material_id"));
mdPdReviewsign.setPcsn(rows.get(0).getString("pcsn"));
mdPdReviewsign.setQty(whereJson.getString("total_qty"));
mdPdReviewsign.setReview_code(sysUser.getUsername());
mdPdReviewsign.setReview_name(sysUser.getPerson_name());
mdPdReviewsign.setAction("外包材送入");
iMdPdReviewsignService.insert(mdPdReviewsign);
return PdaResponse.requestOk();
}
@@ -266,7 +292,14 @@ public class PdaPackagingServiceImpl implements PdaPackagingService {
@Override
@Transactional
public PdaResponse packConfirmReturn(JSONObject whereJson) {
public PdaResponse packConfirmReturn(JSONObject whereJson) throws Exception {
// -------------调用接口进行账户密码进行校验-------------
MobileAuthorizationController bean = SpringContextHolder.getBean(MobileAuthorizationController.class);
AuthUserDto authUserDto = new AuthUserDto();
authUserDto.setUsername(whereJson.getString("username"));
authUserDto.setPassword(whereJson.getString("password"));
SysUser sysUser = bean.loginCheck(authUserDto);
SchBasePoint pointDao = iSchBasePointService.getById(whereJson.getString("point_code"));
if (ObjectUtil.isEmpty(pointDao)) {
throw new BadRequestException("当前点位不存在【" + whereJson.getString("point_code") + "");
@@ -320,6 +353,17 @@ public class PdaPackagingServiceImpl implements PdaPackagingService {
// 新增带你为库存记录
iMdPdmPackagingService.save(mdPdmPackaging);
}
// -------------插入双签记录-------------
MdPdReviewsign mdPdReviewsign = new MdPdReviewsign();
mdPdReviewsign.setBag_code("");
mdPdReviewsign.setMaterial_id(whereJson.getString("material_id"));
mdPdReviewsign.setPcsn(whereJson.getString("pcsn"));
mdPdReviewsign.setQty(whereJson.getString("qty"));
mdPdReviewsign.setReview_code(sysUser.getUsername());
mdPdReviewsign.setReview_name(sysUser.getPerson_name());
mdPdReviewsign.setAction("外包材还回");
iMdPdReviewsignService.insert(mdPdReviewsign);
return PdaResponse.requestOk();
}
}

View File

@@ -134,6 +134,7 @@ public class SchBasePoint implements Serializable {
private String material_id;
private String material_qty;
private String material_pcsn;
@TableField(exist = false)
private List<String> can_vehicle_types;

View File

@@ -78,7 +78,7 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
*/
List<JSONObject> pdaQueryPointDtl(@Param("param") JSONObject whereJson);
List<SchBasePoint> getNoTaskPointByRegionAndType(String region, String type, String pointStatus);
List<SchBasePoint> getNoTaskPointByRegionAndType(String region, String type, String pointStatus, String material_type);
List<SchBasePoint> getNoTaskPointByRegionAndTypeCp(String region, String type, String pointStatus);

View File

@@ -204,6 +204,10 @@
AND (t.point_code1 = p.point_code OR
t.point_code2 = p.point_code OR t.point_code3 = p.point_code OR t.point_code4 = p.point_code)
AND '5' > t.task_status)
<if test="material_type != null and material_type != ''">
AND
p.ext_point_code = #{material_type}
</if>
</select>
<select id="getNoTaskPointByRegionAndTypeCp" resultType="org.nl.wms.sch_manage.service.dao.SchBasePoint">
SELECT *

View File

@@ -305,7 +305,7 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
@Override
public List<SchBasePoint> getNoTaskPointByRegionAndType(String region, String type, String pointStatus) {
return this.baseMapper.getNoTaskPointByRegionAndType(region, type, pointStatus);
return this.baseMapper.getNoTaskPointByRegionAndType(region, type, pointStatus,null);
}
@Override

View File

@@ -80,7 +80,7 @@ public class NoCarBackCpTask extends AbstractTask {
task.setMaterial_id(json.getString("material_id"));
task.setMaterial_qty(json.getBigDecimal("material_qty"));
task.setRequest_param(json.toString());
task.setPriority(json.getString("Priority"));
task.setPriority(json.getString("priority"));
task.setTask_group_id(json.getString("task_group_id"));
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName());
@@ -105,7 +105,7 @@ public class NoCarBackCpTask extends AbstractTask {
acsTaskDto.setVehicle_code(taskDao.getVehicle_code());
acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode());
acsTaskDto.setPriority(IOSConstant.ONE);
acsTaskDto.setPriority(taskDao.getPriority());
acsTaskDto.setAgv_system_type(IOSConstant.TWO);
return acsTaskDto;

View File

@@ -82,7 +82,7 @@ public class NoCarUnloadTask extends AbstractTask {
task.setTask_group_id(json.getString("task_group_id"));
task.setMaterial_qty(json.getBigDecimal("material_qty"));
task.setRequest_param(json.toString());
task.setPriority(json.getString("Priority"));
task.setPriority(json.getString("priority"));
task.setRemark(json.getString("remark"));
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentNickName());
@@ -110,7 +110,7 @@ public class NoCarUnloadTask extends AbstractTask {
acsTaskDto.setVehicle_type(IOSConstant.ONE);
acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode());
acsTaskDto.setPriority(IOSConstant.ONE);
acsTaskDto.setPriority(taskDao.getPriority());
acsTaskDto.setAgv_system_type(IOSConstant.TWO);
return acsTaskDto;
@@ -171,6 +171,7 @@ public class NoCarUnloadTask extends AbstractTask {
@Transactional
public void finishTask(SchBaseTask taskObj) {
JSONObject jsonObject = JSONObject.parseObject(taskObj.getRequest_param());
// 更新起点
iSchBasePointService.update(
new UpdateWrapper<SchBasePoint>().lambda()
@@ -179,6 +180,7 @@ public class NoCarUnloadTask extends AbstractTask {
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位"))
.set(SchBasePoint::getMaterial_id, "")
.set(SchBasePoint::getMaterial_qty, "")
.set(SchBasePoint::getMaterial_pcsn, "")
);
// 更新终点
iSchBasePointService.update(
@@ -187,6 +189,7 @@ public class NoCarUnloadTask extends AbstractTask {
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
.set(SchBasePoint::getMaterial_id, taskObj.getMaterial_id())
.set(SchBasePoint::getMaterial_qty, taskObj.getMaterial_qty())
.set(SchBasePoint::getMaterial_pcsn, jsonObject.getString("material_pcsn"))
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料"))
);
// 更新任务

View File

@@ -11,6 +11,8 @@ 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.TaskEnum;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBasePointService;
@@ -51,6 +53,8 @@ public class RawInTask extends AbstractTask {
private IOStorInvDisMapper ioStorInvDisMapper;
@Resource
private ISchBasePointService pointService;
@Resource
private IStructattrService iStructattrService;
@Override
public String create(JSONObject json) {
SchBaseTask task = new SchBaseTask();
@@ -76,8 +80,11 @@ public class RawInTask extends AbstractTask {
throw new BadRequestException("起点终点不能一致,请检查!");
}
// 下发任务
// 由定时器下发
// this.sendTaskOne(task.getTask_id());
// 起点为拆包缓存室由定时器下发
String point_code2 = task.getPoint_code2();
if (!task.getPoint_code1().equals(IOSConstant.CBHC01) || point_code2.contains("N")) {
this.sendTaskOne(task.getTask_id());
}
return task.getTask_id();
}
@@ -145,6 +152,10 @@ public class RawInTask extends AbstractTask {
.eq(IOStorInvDis::getTask_id, taskObj.getTask_id())
);
Structattr byCode = iStructattrService.getByCode(taskObj.getPoint_code2());
byCode.setLock_type(IOSEnum.LOCK_TYPE.code("未锁定"));
iStructattrService.updateById(byCode);
// 更新任务状态
taskObj.setTask_status(TaskStatus.CANCELED.getCode());
taskObj.setRemark("已取消");

View File

@@ -99,7 +99,7 @@ public enum IOSEnum {
// 库区编码
SECT_CODE(MapOf.of("内包材区", "NBC01", "批料室区", "PZC01",
"中间站区", "ZZC01", "物料间区", "WZC01", "辅料区", "WFL01", "原料区", "WYL01",
"无人车卸货缓存1区", "WRCXHHC01"
"无人车卸货缓存1区", "WRCXHHC01","恩双平虚拟库区", "ESPXN01"
)),
// 存放载具类型

View File

@@ -0,0 +1,180 @@
<template>
<div class="app-container">
<!--工具栏-->
<div class="head-container">
<div v-if="crud.props.searchToggle">
<!-- 搜索 -->
<el-form
:inline="true"
class="demo-form-inline"
label-position="right"
label-width="90px"
label-suffix=":"
>
<el-form-item label="物料搜索">
<el-input
v-model="query.material_code"
clearable
size="small"
placeholder="物料编码、名称"
style="width: 200px;"
class="filter-item"
/>
</el-form-item>
<el-form-item label="批次号">
<el-input
v-model="query.pcsn"
clearable
size="small"
placeholder="批次号"
style="width: 200px;"
class="filter-item"
/>
</el-form-item>
<el-form-item label="操作人">
<el-input
v-model="query.create_name"
clearable
size="small"
placeholder="操作人"
style="width: 200px;"
class="filter-item"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="query.createTime"
type="daterange"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
@change="crud.toQuery"
/>
</el-form-item>
<rrOperation :crud="crud" />
</el-form>
</div>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission"/>
<!--表格渲染-->
<el-table
ref="table"
v-loading="crud.loading"
:data="crud.data"
size="mini"
style="width: 100%;"
@selection-change="crud.selectionChangeHandler"
>
<el-table-column prop="bag_code" label="袋号/桶号" :min-width="flexWidth('bag_code',crud.data,'袋号/桶号')" />
<el-table-column prop="material_code" label="物料编码" :min-width="flexWidth('material_code',crud.data,'物料编码')" />
<el-table-column prop="material_name" label="物料名称" :min-width="flexWidth('material_name',crud.data,'物料名称')" />
<el-table-column prop="pcsn" label="批次号" :min-width="flexWidth('pcsn',crud.data,'批次号')" />
<el-table-column prop="qty" label="重量" :formatter="crud.formatNum3" :min-width="100" />
<el-table-column prop="quality_code" label="质量代码" :min-width="flexWidth('quality_code',crud.data,'质量代码')" />
<el-table-column prop="vehicle_code" label="载具编码" :min-width="flexWidth('vehicle_code',crud.data,'载具编码')" />
<!-- <el-table-column prop="supp_code" label="供应商编码" :min-width="flexWidth('supp_code',crud.data,'供应商编码')" />-->
<!-- <el-table-column prop="supp_name" label="供应商名称" :min-width="flexWidth('supp_name',crud.data,'供应商名称')" />-->
<el-table-column prop="create_time" label="时间" :min-width="flexWidth('create_time',crud.data,'时间')" />
<el-table-column prop="create_code" label="操作人编码" :min-width="flexWidth('create_code',crud.data,'操作人编码')" />
<el-table-column prop="create_name" label="操作人名称" :min-width="flexWidth('create_name',crud.data,'操作人名称')" />
<el-table-column prop="review_code" label="复核人编码" :min-width="flexWidth('review_code',crud.data,'复核人编码')" />
<el-table-column prop="review_name" label="复核人名称" :min-width="flexWidth('review_name',crud.data,'复核人名称')" />
<el-table-column prop="action" label="动作" :min-width="flexWidth('action',crud.data,'动作')" />
</el-table>
<!--分页组件-->
<pagination />
</div>
</div>
</template>
<script>
import crudReview from '@/views/wms/statement/review/review'
import CRUD, { presenter, header, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination'
import { download } from '@/api/data'
import { downloadFile } from '@/utils'
export default {
name: 'Review',
components: { pagination, crudOperation, rrOperation },
mixins: [presenter(), header(), crud()],
cruds() {
return CRUD({
title: '复核记录', url: 'api/review', idField: 'id', sort: 'id,desc',
optShow: {
add: false,
edit: false,
showDtlLoading: false,
del: false,
download: false,
reset: true
},
crudMethod: { ...crudReview }
})
},
data() {
return {
showDtlLoading: false,
permission: {},
rules: {}
}
},
created() {
this.initQuery()
},
methods: {
// 钩子在获取表格数据之前执行false 则代表不获取数据
[CRUD.HOOK.beforeRefresh]() {
return true
},
hand(value) {
this.crud.toQuery()
},
initQuery() {
const end = new Date()
const start = new Date()
const endYear = end.getFullYear()
var endMonth = end.getMonth() + 1
if (end.getMonth() + 1 < 10) {
endMonth = '0' + endMonth.toString()
}
var endDay = end.getDate()
if (end.getDate() < 10) {
endDay = '0' + endDay.toString()
}
const endDate = endYear + '-' + endMonth + '-' + endDay + ' 23:59:59'
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
const startYear = start.getFullYear()
var startMonth = start.getMonth() + 1
if (start.getMonth() + 1 < 10) {
startMonth = '0' + startMonth.toString()
}
var startDay = start.getDate()
if (start.getDate() < 10) {
startDay = '0' + startDay.toString()
}
const startDate = startYear + '-' + startMonth + '-' + startDay + ' 00:00:00'
this.$set(this.query, 'createTime', [startDate, endDate])
this.crud.toQuery()
},
downdtl() {
if (this.currentRow !== null) {
this.showDtlLoading = true
download('/api/review/download', this.crud.query).then(result => {
downloadFile(result, '复核记录', 'xlsx')
this.showDtlLoading = false
}).catch(() => {
this.showDtlLoading = false
})
}
}
}
}
</script>
<style scoped>
</style>

View File

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