add:手持新增损益管理

This commit is contained in:
2026-02-27 12:51:58 +08:00
parent 3133f3404e
commit 6c9875eeca
8 changed files with 231 additions and 8 deletions

View File

@@ -138,4 +138,13 @@ public interface MdPbStoragevehicleextMapper extends BaseMapper<MdPbStoragevehic
* @return List<JSONObject>
*/
List<JSONObject> pdaQueryIvtRegion(@Param("param") JSONObject whereJson);
/**
* 手持查询库存信息(损益管理)
* @param param {
* vehicle_code 袋码/载具编码
* }
* @return List<JSONObject>
*/
List<JSONObject> queryMoreIvt(@Param("param") JSONObject param);
}

View File

@@ -545,4 +545,58 @@
</where>
</select>
<select id="queryMoreIvt" resultType="com.alibaba.fastjson.JSONObject">
SELECT
late.vehicle_code,
late.bag_code,
late.pcsn,
late.qty,
late.qty AS change_qty,
material.material_code,
material.material_id,
material.material_name,
class.class_name,
late.qty_unit_id,
late.qty_unit_name
FROM
md_pb_groupplate late
INNER JOIN md_me_materialbase material ON material.material_id = late.material_id
LEFT JOIN md_pb_classstandard class ON class.class_id = material.material_type_id
<where>
1 = 1
<if test="param.vehicle_code != null and param.vehicle_code != ''">
AND
(late.vehicle_code = #{param.vehicle_code} or
late.bag_code = #{param.vehicle_code})
</if>
</where>
UNION
SELECT
late.bucket_code AS vehicle_code,
"" AS bag_code,
late.pcsn,
late.qty,
late.qty AS change_qty,
material.material_code,
material.material_id,
material.material_name,
class.class_name,
late.qty_unit_id,
late.qty_unit_name
FROM
md_pd_groupbucket late
INNER JOIN md_me_materialbase material ON material.material_id = late.material_id
LEFT JOIN md_pb_classstandard class ON class.class_id = material.material_type_id
<where>
1 = 1
<if test="param.vehicle_code != null and param.vehicle_code != ''">
AND
late.bucket_code = #{param.vehicle_code}
</if>
</where>
</select>
</mapper>

View File

@@ -98,4 +98,18 @@ public class PdaWarehouseController {
public ResponseEntity<Object> confirmInside(@RequestBody JSONObject param) {
return new ResponseEntity<>(pdaWarehouseService.confirmInside(param), HttpStatus.OK);
}
@PostMapping("/queryMoreIvt")
@Log("损益管理 - 查询库存信息")
@SaIgnore
public ResponseEntity<Object> queryMoreIvt(@RequestBody JSONObject param) {
return new ResponseEntity<>(pdaWarehouseService.queryMoreIvt(param), HttpStatus.OK);
}
@PostMapping("/confirmMore")
@Log("损益管理 - 确认损益")
@SaIgnore
public ResponseEntity<Object> confirmMore(@RequestBody JSONObject param) {
return new ResponseEntity<>(pdaWarehouseService.confirmMore(param), HttpStatus.OK);
}
}

View File

@@ -92,4 +92,22 @@ public interface PdaWarehouseService {
* @return PdaResponse
*/
PdaResponse confirmInside(JSONObject param);
/**
* 损益管理 - 查询库存信息
* @param param {
* vehicle_code 袋码/载具编码
* }
* @return PdaResponse
*/
PdaResponse queryMoreIvt(JSONObject param);
/**
* 损益管理 - 确认损益
* @param param {
* rows: 列表数据
* }
* @return PdaResponse
*/
PdaResponse confirmMore(JSONObject param);
}

View File

@@ -1,20 +1,21 @@
package org.nl.wms.pda.general_management.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.google.gson.JsonObject;
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.config.MapOf;
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.wms.basedata_manage.service.dao.mapper.MdPbStoragevehicleextMapper;
@@ -31,8 +32,11 @@ import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_management.service.IRawAssistIStorService;
import org.nl.wms.warehouse_management.service.IStIvtMoreorlessmstService;
import org.nl.wms.warehouse_management.service.dao.GroupPlate;
import org.nl.wms.warehouse_management.service.dao.StIvtMoreorlessmst;
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.stereotype.Service;
@@ -91,11 +95,23 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
@Resource
private IMdPbStoragevehicleextService iMdPbStoragevehicleextService;
/**
* 损益服务
*/
@Resource
private IStIvtMoreorlessmstService iStIvtMoreorlessmstService;
/**
* 桶记录服务
*/
@Resource
private IMdPdGroupbucketService iMdPdGroupbucketService;
@Override
public PdaResponse getPalletAssembly(JSONObject param) {
String bag_code = param.getString("bag_code");
if (ObjectUtil.isNotEmpty(bag_code)) {
param.put("search",bag_code);
param.put("search", bag_code);
}
String search = param.getString("search");
@@ -208,10 +224,10 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
Double total_qty = lateList.stream()
.map(row -> row.getDoubleValue("qty"))
.reduce(Double::sum).orElse(0.0);
param.put("total_qty",total_qty);
param.put("rows",lateList);
param.put("total_qty", total_qty);
param.put("rows", lateList);
// 调用新增
defaultPdaBuildParam.createIOS(param,IOSEnum.IO_TYPE.code("入库"),IOSEnum.IN_BILL_TYPE.code("直接入库"));
defaultPdaBuildParam.createIOS(param, IOSEnum.IO_TYPE.code("入库"), IOSEnum.IN_BILL_TYPE.code("直接入库"));
// 更新所有此载具下的组盘信息
List<GroupPlate> collect = lateList.stream()
@@ -236,7 +252,7 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
public PdaResponse queryReceiveSect() {
List<Sectattr> sectList = sectattrService.list(
new QueryWrapper<Sectattr>().lambda()
.in(Sectattr::getStor_id, IOSEnum.STOR_ID.code("物料室仓库"),IOSEnum.STOR_ID.code("内包材仓库"))
.in(Sectattr::getStor_id, IOSEnum.STOR_ID.code("物料室仓库"), IOSEnum.STOR_ID.code("内包材仓库"))
.eq(Sectattr::getIs_delete, IOSConstant.ZERO)
.eq(Sectattr::getIs_used, IOSConstant.ONE)
);
@@ -484,4 +500,109 @@ public class PdaWarehouseServiceImpl implements PdaWarehouseService {
}
return PdaResponse.requestOk();
}
@Override
public PdaResponse queryMoreIvt(JSONObject param) {
return PdaResponse.requestParamOk(mdPbStoragevehicleextMapper.queryMoreIvt(param));
}
@Override
@SneakyThrows
@Transactional
public PdaResponse confirmMore(JSONObject param) {
RLock lock = redissonClient.getLock("lock:confirmInside");
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
List<JSONObject> jsonList = param.getJSONArray("rows").toJavaList(JSONObject.class);
if (ObjectUtil.isEmpty(jsonList)) {
throw new BadRequestException("数据为空!");
}
for (int i = 0; i < jsonList.size(); i++) {
JSONObject json = jsonList.get(i);
// 组织损益单主表数据
MoreOrLessInsertDto moreOrLessInsertDto = new MoreOrLessInsertDto();
moreOrLessInsertDto.setMol_inv_type("1001");
// 判断损益类型
double qty = json.getDoubleValue("qty");
double change_qty = json.getDoubleValue("change_qty");
double ivt_qty = 0;
if (qty < change_qty) {
// 溢
moreOrLessInsertDto.setMol_type(IOSEnum.MORE_TYPE.code(""));
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);
} else {
// 不处理
continue;
}
moreOrLessInsertDto.setBiz_date(DateUtil.today());
moreOrLessInsertDto.setDtl_num(BigDecimal.ONE);
// 查询所属仓库
List<Structattr> attrList = structattrService.list(
new QueryWrapper<Structattr>().lambda()
.eq(Structattr::getStoragevehicle_code, json.getString("vehicle_code"))
);
if (ObjectUtil.isEmpty(attrList)) {
throw new BadRequestException("当前载具【"+json.getString("vehicle_code")+"】不在库内");
}
moreOrLessInsertDto.setStor_id(attrList.get(0).getStor_id());
moreOrLessInsertDto.setTotal_qty(BigDecimal.valueOf(ivt_qty));
moreOrLessInsertDto.setCreate_mode(IOSEnum.CREATE_MODE.code("终端产生"));
moreOrLessInsertDto.setStatus(IOSEnum.MORE_MST_STATUS.code("生成"));
// 组织损益单明细表数据
List<JSONObject> tableData = new ArrayList<>();
JSONObject jsonDtl = new JSONObject();
jsonDtl.put("material_code", json.getString("material_code"));
jsonDtl.put("material_id", json.getString("material_id"));
jsonDtl.put("material_name", json.getString("material_name"));
jsonDtl.put("pcsn", json.getString("pcsn"));
jsonDtl.put("ivt_qty", qty);
jsonDtl.put("mol_qty", ivt_qty);
jsonDtl.put("qty_unit_id", json.getString("qty_unit_id"));
jsonDtl.put("qty_unit_name", json.getString("qty_unit_name"));
jsonDtl.put("storagevehicle_code", json.getString("vehicle_code"));
jsonDtl.put("sect_code", attrList.get(0).getSect_code());
jsonDtl.put("struct_code", attrList.get(0).getStruct_code());
jsonDtl.put("status", IOSEnum.MORE_MST_STATUS.code("生成"));
jsonDtl.put("bag_code", json.getString("bag_code"));
tableData.add(jsonDtl);
moreOrLessInsertDto.setTableData(tableData);
// 调用新增
String mol_id = iStIvtMoreorlessmstService.create(moreOrLessInsertDto);
StIvtMoreorlessmst mstDao = iStIvtMoreorlessmstService.getById(mol_id);
// 调用完成
iStIvtMoreorlessmstService.confirm(mstDao);
// 更新袋或者桶重量
if (ObjectUtil.isNotEmpty(json.getString("bag_code"))) {
// 更新袋重量
groupplateService.update(
new UpdateWrapper<GroupPlate>().lambda()
.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)
);
}
}
} else {
throw new BadRequestException("当前业务繁忙,稍后再试...");
}
} finally {
if (tryLock) {
lock.unlock();
}
}
return PdaResponse.requestOk();
}
}

View File

@@ -1,5 +1,6 @@
package org.nl.wms.warehouse_management.service.dao;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@@ -89,5 +90,9 @@ public class StIvtMoreorlessdtl implements Serializable {
*/
private String source_bill_code;
/**
* 袋码
*/
private String bag_code;
}

View File

@@ -47,6 +47,7 @@ public class StIvtMoreorlessdtlServiceImpl extends ServiceImpl<StIvtMoreorlessdt
dao.setMol_qty(json.getBigDecimal("mol_qty"));
dao.setStatus(IOSEnum.MORE_MST_STATUS.code("生成"));
dao.setSource_bill_code(json.getString("source_bill_code"));
dao.setBag_code(json.getString("bag_code"));
dtlDaoList.add(dao);
}
this.saveBatch(dtlDaoList);

View File

@@ -144,6 +144,7 @@ public class StIvtMoreorlessmstServiceImpl extends ServiceImpl<StIvtMoreorlessms
json.put("qty_unit_id",dto.getQty_unit_id());
json.put("qty_unit_name",dto.getQty_unit_name());
json.put("change_qty",dto.getMol_qty());
json.put("bag_code",dto.getBag_code());
json.put("remark","由损益单据【"+dao.getMol_code()+"】变更库存数量【"+dto.getMol_qty()+"");
updateIvtUtils.updateIvt(json);
}