add:手持新增损益管理
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user