仓库管理修改

liweidong
wusiyu 1 week ago
parent 8c8650dc35
commit 6dd8153dd6
  1. 7
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/entity/StReturnRecord.java
  2. 3
      blade-service-api/blade-wms-api/src/main/java/org/springblade/wms/pojo/vo/StGlassCakeOutVO.java
  3. 3
      blade-service/blade-wms/src/main/java/org/springblade/wms/controller/StExpireRecordController.java
  4. 6
      blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StGlassCakeOutMapper.xml
  5. 2
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/IStExpireRecordService.java
  6. 6
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StExpireRecordServiceImpl.java
  7. 64
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherOutRecordServiceImpl.java
  8. 6
      blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StReturnRecordServiceImpl.java

@ -1,5 +1,6 @@
package org.springblade.wms.pojo.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@ -109,6 +110,12 @@ public class StReturnRecord extends TenantEntity {
@DateTimeFormat(pattern = "yyyy-MM-dd")
@Schema(description = "本次归还时间")
private Date returnTime;
/**
* 审批人
*/
@Schema(description = "审批人")
@TableField(exist = false)
private Long approver;
}

@ -75,6 +75,9 @@ public class StGlassCakeOutVO extends StGlassCakeOut {
@Schema(description = "出库人名称")
@TableField(exist = false)
private String outUserName;
@Schema(description = "领料人名称")
@TableField(exist = false)
private String pickerName;
@TableField(exist = false)
private String startEstUseTime;

@ -170,8 +170,9 @@ public class StExpireRecordController extends BladeController {
@RequestParam(required = false) String bfCode,
@RequestParam(required = false) Long rrId,
@RequestParam(required = false) String woCode,
@RequestParam(required = false) Long approver,
@RequestParam Short bfType) {
stExpireRecordService.invalidatedOut(rlsId, outQty, memo, bfCode, rrId, woCode, bfType, AuthUtil.getUser());
stExpireRecordService.invalidatedOut(rlsId, outQty, memo, bfCode, rrId, woCode, approver, bfType, AuthUtil.getUser());
return R.success();
}

@ -41,7 +41,7 @@
gco.part_name, gco.batch_code, gco.card_no, gco.quantity, gco.require_qty,
gco.stove_pi_no, gco.out_qty, gco.cur_status, gco.est_use_time, gco.out_time,
gco.out_users, gco.out_code,
gco.memo,
gco.memo, gco.picker,
-- 物料表字段(根据实际ST_GOODS字段调整,无则删对应行)
g.goods_code,
g.id AS goodsId,
@ -64,7 +64,8 @@
-- 创建人名称
cu.name AS create_user_name,
-- 出库人名称
ou.name AS out_user_name
ou.name AS out_user_name,
pk.name AS picker_name
FROM ST_GLASS_CAKE_OUT gco
-- 左关联物料表:获取物料信息
LEFT JOIN ST_GOODS g ON gco.goods_id = g.id AND g.is_deleted = 0
@ -78,6 +79,7 @@
LEFT JOIN BLADE_USER cu ON gco.create_user = cu.id AND cu.is_deleted = 0
-- 左关联出库人表:获取出库人真实姓名
LEFT JOIN BLADE_USER ou ON gco.out_users = ou.id AND ou.is_deleted = 0
LEFT JOIN BLADE_USER pk ON gco.picker = pk.id AND pk.is_deleted = 0
-- 原有过滤条件:软删除
WHERE gco.is_deleted = 0
<if test="stGlassCakeOut.yoCode != null and stGlassCakeOut.yoCode != ''">

@ -43,7 +43,7 @@ public interface IStExpireRecordService extends BaseService<StExpireRecord> {
void expireHandle(List<Long> rlsIdArr, String dueDate, BladeUser user);
void invalidatedOut(Long rlsId, Double outQty, String memo, String bfCode, Long rrId, String woCode, Short bfType, BladeUser user);
void invalidatedOut(Long rlsId, Double outQty, String memo, String bfCode, Long rrId, String woCode, Long approver, Short bfType, BladeUser user);
void batchInvalidatedOut(StExpireRecordDTO dto, BladeUser user);
}

@ -97,7 +97,7 @@ public class StExpireRecordServiceImpl extends BaseServiceImpl<StExpireRecordMap
@Override
@Transactional(rollbackFor = Exception.class)
public void invalidatedOut(Long rlsId, Double outQty, String memo, String bfCode, Long rrId, String woCode, Short bfType, BladeUser user) {
public void invalidatedOut(Long rlsId, Double outQty, String memo, String bfCode, Long rrId, String woCode, Long approver, Short bfType, BladeUser user) {
StRealtimeStock stock = stRealtimeStockService.getById(rlsId);
if (stock == null) {
throw new ServiceException("库存记录不存在");
@ -139,6 +139,7 @@ public class StExpireRecordServiceImpl extends BaseServiceImpl<StExpireRecordMap
record.setBfType(bfType);
record.setRlsId(rlsId);
record.setOutQty(outQty);
record.setApprover(approver);
stOtherOutRecordService.createPendingOutRecord(record, stockList, user, rrId);
}
@ -160,6 +161,7 @@ public class StExpireRecordServiceImpl extends BaseServiceImpl<StExpireRecordMap
@Override
@Transactional(rollbackFor = Exception.class)
public void batchInvalidatedOut(StExpireRecordDTO dto, BladeUser user) {
Long approver = null;
Short bfType = dto.getBfType();
List<StExpireRecordVO> items = dto.getItems();
@ -181,7 +183,7 @@ public class StExpireRecordServiceImpl extends BaseServiceImpl<StExpireRecordMap
}
// 3. 直接调用原有单条方法,传入这条独立的outQty
this.invalidatedOut(rlsId, outQty, null, null, null, null, bfType, user);
this.invalidatedOut(rlsId, outQty, null, null, null, null, approver, bfType, user);
}
}

@ -1,12 +1,13 @@
package org.springblade.wms.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import jakarta.annotation.Resource;
import org.springblade.core.log.exception.ServiceException;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.BladeUser;
import org.springblade.core.tool.api.R;
import org.springblade.desk.common.feign.IMesApprovalRecordClient;
import org.springblade.desk.common.pojo.entity.MesApprovalRecordEntity;
import org.springblade.system.feign.ISysClient;
@ -15,6 +16,7 @@ import org.springblade.system.pojo.entity.User;
import org.springblade.wms.excel.StOtherOutRecordExcel;
import org.springblade.wms.mapper.StOtherOutRecordMapper;
import org.springblade.wms.mapper.StReturnRecordMapper;
import org.springblade.wms.mapper.StStockInoutRecordMapper;
import org.springblade.wms.pojo.entity.StOtherOutRecord;
import org.springblade.wms.pojo.entity.StRealtimeStock;
import org.springblade.wms.pojo.entity.StReturnRecord;
@ -48,6 +50,8 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
@Resource
StReturnRecordMapper stReturnRecordMapper;
@Resource
StStockInoutRecordMapper stStockInoutRecordMapper;
@Resource
IMesApprovalRecordClient mesApprovalRecordClient;
@Resource
IUserClient userClient;
@ -87,16 +91,22 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
approvalRecord.setBizId(stOtherOutRecord.getId());
approvalRecord.setBizType("报废审批");
approvalRecord.setContent("报废审批");
R<User> ruser = userClient.userInfoById(stOtherOutRecord.getCreateUser());
User user1 = ruser.getData();
approvalRecord.setCurrentRoleId(Long.valueOf(user1.getRoleId().split(",")[0]));
R<String> roleName = sysClient.getRoleName(approvalRecord.getCurrentRoleId());
String roleNameData = roleName.getData();
approvalRecord.setCurrentRoleName(roleNameData);
approvalRecord.setNextRoleName("热表-工艺员");
R<String> roleIdResp = sysClient.getRoleIds("000000", approvalRecord.getNextRoleName());
String roleId = roleIdResp.getData();
approvalRecord.setNextRoleId(Long.valueOf(roleId));
// R<User> ruser = userClient.userInfoById(stOtherOutRecord.getCreateUser());
// User user1 = ruser.getData();
// approvalRecord.setCurrentRoleId(Long.valueOf(user1.getRoleId().split(",")[0]));
// R<String> roleName = sysClient.getRoleName(approvalRecord.getCurrentRoleId());
// String roleNameData = roleName.getData();
// approvalRecord.setCurrentRoleName(roleNameData);
// approvalRecord.setNextRoleName("热表-工艺员");
// R<String> roleIdResp = sysClient.getRoleIds("000000", approvalRecord.getNextRoleName());
// String roleId = roleIdResp.getData();
// approvalRecord.setNextRoleId(Long.valueOf(roleId));
approvalRecord.setCurrentUserId(user.getUserId());
approvalRecord.setCurrentUserName(user.getNickName());
User ruser = userClient.userInfoById(stOtherOutRecord.getApprover()).getData();
approvalRecord.setNextUserId(stOtherOutRecord.getApprover());
approvalRecord.setNextUserName(ruser.getRealName());
mesApprovalRecordClient.save(approvalRecord);
}
@ -105,9 +115,10 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
@Transactional(rollbackFor = Exception.class)
public void approvalRequest(Long id, Short approvalResult, BladeUser approver) {
// 1. 校验工艺员权限
if (Objects.equals(approver.getRoleName(), "rb_craft")) {
StOtherOutRecord stOtherOutRecord = this.getById(id);
if (stOtherOutRecord.getApprover().equals(approver.getUserId())) {
// 2. 查询数据
StOtherOutRecord stOtherOutRecord = this.getById(id);
// StOtherOutRecord stOtherOutRecord = this.getById(id);
if (stOtherOutRecord == null) {
throw new RuntimeException("数据不存在!");
}
@ -119,14 +130,12 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
stOtherOutRecord.setApprovalStatus(approvalResult);
this.updateById(stOtherOutRecord);
R<String> roleIdResp = sysClient.getRoleIds("000000", "热表-工艺员");
String roleId = roleIdResp.getData();
MesApprovalRecordEntity updateRecord = new MesApprovalRecordEntity();
updateRecord.setBizId(id);
updateRecord.setBizType("报废审批");
updateRecord.setOpinion("");
updateRecord.setNextRoleId(Long.valueOf(roleId));
// updateRecord.setNextRoleId(Long.valueOf(roleId));
updateRecord.setNextUserId(stOtherOutRecord.getApprover());
updateRecord.setStatus(Integer.valueOf(approvalResult));
mesApprovalRecordClient.update(updateRecord);
@ -237,6 +246,15 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
Map<Long, StRealtimeStock> stockMap = stockList.stream()
.collect(Collectors.toMap(StRealtimeStock::getId, Function.identity()));
String datePrefix = DateUtil.format(new Date(), "yyyyMMdd");
// 2. 当天最大序号
String maxCode = stStockInoutRecordMapper.getMaxCheckCode(datePrefix);
int lastNum = 0;
if (StrUtil.isNotBlank(maxCode)) {
String number = maxCode.substring(datePrefix.length());
lastNum = Integer.parseInt(number);
}
// ========== 1.3 组装所有商品明细 ==========
for (StRealtimeStock stock : outList) {
StRealtimeStock entity = stockMap.get(stock.getId());
@ -245,10 +263,15 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
}
StStockInoutRecord detail = new StStockInoutRecord();
// 明细复用主单公共属性
detail.setSirCode(stStockInoutRecordService.generateCode()); // 单据编码
lastNum++;
String sirCode = datePrefix + StrUtil.padPre(String.valueOf(lastNum), 4, '0');
detail.setSirCode(sirCode);
// detail.setSirCode(stStockInoutRecordService.generateCode()); // 单据编码
detail.setInOutDate(mainInout.getInOutDate());
detail.setInOutSource(mainInout.getInOutSource());
// detail.setShId(entity.getShId());
if(stOtherOutRecord.getShId() == null) {
detail.setShId(entity.getShId());
}
detail.setShId(mainInout.getShId());
detail.setDeptId(mainInout.getDeptId());
detail.setCreateUser(mainInout.getCreateUser());
@ -282,6 +305,9 @@ public class StOtherOutRecordServiceImpl extends BaseServiceImpl<StOtherOutRecor
// 绑定当前明细的ID和出库类型
newOutRecord.setSirId(detail.getId());
if (stOtherOutRecord.getShId() == null) {
newOutRecord.setShId(detail.getShId());
}
newOutRecord.setOutType(stOtherOutRecord.getOutType());
newOutRecord.setBfType(stOtherOutRecord.getBfType());
newOutRecord.setBfCode(stOtherOutRecord.getBfCode());

@ -47,7 +47,7 @@ public class StReturnRecordServiceImpl extends BaseServiceImpl<StReturnRecordMap
if (stReturnRecordList == null || stReturnRecordList.isEmpty()) {
return false;
}
// 循环批量处理,内部是你原封不动的归还逻辑
for (StReturnRecord stReturnRecord : stReturnRecordList) {
StLend stLend = stLendService.getById(stReturnRecord.getLeId());
@ -56,6 +56,8 @@ public class StReturnRecordServiceImpl extends BaseServiceImpl<StReturnRecordMap
// 库存加上退库数 - 归还扣减占用量
StRealtimeStock stRealtimeStock = stRealtimeStockService.getById(stLend.getRlsId());
stRealtimeStock.setOccupyQuantity(stRealtimeStock.getOccupyQuantity()- ghNum);
stRealtimeStock.setSumNum(stRealtimeStock.getSumNum() + stReturnRecord.getUseNumber());
stRealtimeStock.setStayMaintainNum(stRealtimeStock.getStayMaintainNum() + stReturnRecord.getUseNumber());
stRealtimeStockService.updateById(stRealtimeStock);
//更新借出状态
@ -105,7 +107,7 @@ public class StReturnRecordServiceImpl extends BaseServiceImpl<StReturnRecordMap
// 3. 核心新增:判断报废数是否大于0,若大于0则生成报废单
if (stReturnRecord.getBfQty() > 0) {
// 调用报废出库逻辑生成报废单
stExpireRecordService.invalidatedOut(stRealtimeStock.getId(), stReturnRecord.getBfQty(), stLend.getMemo(), null, stReturnRecord.getId(), null, StOtherOutRecord.BF_TYPE_RETURN, user);
stExpireRecordService.invalidatedOut(stRealtimeStock.getId(), stReturnRecord.getBfQty(), stLend.getMemo(), null, stReturnRecord.getId(), null, stReturnRecord.getApprover(), StOtherOutRecord.BF_TYPE_RETURN, user);
}
}
return true;

Loading…
Cancel
Save