【admin】优化#1、出入库管理 2、仓库编辑 3、仓库库存对比接口

dev
renfan 2024-08-06 21:07:07 +08:00
parent af4b4276c0
commit 68c7c1ac16
16 changed files with 715 additions and 13 deletions

View File

@ -0,0 +1,97 @@
package com.hcy.admin.controller.sparePartReceive;
import com.hcy.admin.config.aop.Log;
import com.hcy.admin.service.SparePartReceive.ISparePartReceiveService;
import com.hcy.admin.service.sparePartOutWarehouse.ISparePartOutWarehouseService;
import com.hcy.admin.validate.common.PageParam;
import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam;
import com.hcy.admin.vo.SparePartOutWarehouseListVo.SparePartOutWarehouseListVo;
import com.hcy.common.core.AjaxResult;
import com.hcy.common.core.PageResult;
import com.hcy.common.validator.annotation.IDMust;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Map;
/**
*
*/
@RestController
@RequestMapping("api/sparePartReceive")
public class SparePartReceiveController {
@Resource
ISparePartReceiveService iSparePartReceiveService;
/**
*
*
* @author hcy
* @param pageParam
* @param params
* @return Object
*/
@GetMapping("/list")
public Object list(@Validated PageParam pageParam,
@RequestParam Map<String, String> params) {
PageResult<SparePartOutWarehouseListVo> list = iSparePartReceiveService.list(pageParam, params);
return AjaxResult.success(list);
}
/**
*
*
* @author hcy
* @param id ID
* @return Object
*/
@GetMapping("/detail")
public Object detail(@Validated @IDMust() @RequestParam("id") Integer id) {
SparePartOutWarehouseListVo detail = iSparePartReceiveService.detail(id);
return AjaxResult.success(detail);
}
/**
*
*
* @author hcy
* @param sparePartStockAuditParam
* @return Object
*/
@Log(title = "备件出库新增")
@PostMapping("/add")
public Object add(@Validated(value = SparePartStockAuditParam.create.class) @RequestBody SparePartStockAuditParam sparePartStockAuditParam) {
iSparePartReceiveService.add(sparePartStockAuditParam);
return AjaxResult.success();
}
/**
*
*
* @author hcy
* @param sparePartStockAuditParam
* @return Object
*/
@Log(title = "备件出库编辑")
@PostMapping("/edit")
public Object edit(@Validated(value = SparePartStockAuditParam.update.class) @RequestBody SparePartStockAuditParam sparePartStockAuditParam) {
iSparePartReceiveService.edit(sparePartStockAuditParam);
return AjaxResult.success();
}
/**
*
*
* @author hcy
* @param sparePartStockAuditParam
* @return Object
*/
@Log(title = "备件出库删除")
@PostMapping("/del")
public Object del(@Validated(value = SparePartStockAuditParam.delete.class) @RequestBody SparePartStockAuditParam sparePartStockAuditParam) {
iSparePartReceiveService.del(Math.toIntExact(sparePartStockAuditParam.getId()));
return AjaxResult.success();
}
}

View File

@ -121,4 +121,14 @@ public class SparePartStockAuditController {
iSparePartStockAuditService.cancelAudit(Math.toIntExact(sparePartStockAuditParam.getId())); iSparePartStockAuditService.cancelAudit(Math.toIntExact(sparePartStockAuditParam.getId()));
return AjaxResult.success(); return AjaxResult.success();
} }
/**
*
* @param id
*/
@GetMapping("/inventoryComparison")
public Object inventoryComparison(@RequestParam("id") Integer id){
iSparePartStockAuditService.inventoryComparison(id);
return AjaxResult.success();
}
} }

View File

@ -0,0 +1,58 @@
package com.hcy.admin.service.SparePartReceive;
import com.hcy.admin.validate.common.PageParam;
import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam;
import com.hcy.admin.vo.SparePartOutWarehouseListVo.SparePartOutWarehouseListVo;
import com.hcy.common.core.PageResult;
import java.util.Map;
/**
*
*/
public interface ISparePartReceiveService {
/**
*
*
* @param pageParam
* @param params
* @return PageResult<SparePartInWarehouseListVo>
* @author hcy
*/
PageResult<SparePartOutWarehouseListVo> list(PageParam pageParam, Map<String, String> params);
/**
*
*
* @author hcy
* @param id ID
* @return SparePartInWarehouseListVo
*/
SparePartOutWarehouseListVo detail(Integer id);
/**
*
*
* @author hcy
* @param sparePartStockAuditParam
*/
void add(SparePartStockAuditParam sparePartStockAuditParam);
/**
*
*
* @author hcy
* @param sparePartStockAuditParam
*/
void edit(SparePartStockAuditParam sparePartStockAuditParam);
/**
*
*
* @author hcy
* @param id ID
*/
void del(Integer id);
}

View File

@ -0,0 +1,331 @@
package com.hcy.admin.service.SparePartReceive.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hcy.admin.AdminThreadLocal;
import com.hcy.admin.service.sparePartOutWarehouse.ISparePartOutWarehouseService;
import com.hcy.admin.validate.common.PageParam;
import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam;
import com.hcy.admin.vo.SparePartOutWarehouseListVo.SparePartOutWarehouseListVo;
import com.hcy.common.core.PageResult;
import com.hcy.common.entity.SparePartAudit.SparePartAudit;
import com.hcy.common.entity.sparePart.SparePart;
import com.hcy.common.entity.sparePartStockAudit.SparePartStockAudit;
import com.hcy.common.entity.warehouse.Warehouse;
import com.hcy.common.enums.Audit.AuditStateEnum;
import com.hcy.common.mapper.SparePartAudit.SparePartAuditMapper;
import com.hcy.common.mapper.sparePart.SparePartMapper;
import com.hcy.common.mapper.sparePartStockAudit.SparePartStockAuditMapper;
import com.hcy.common.mapper.warehouse.WarehouseMapper;
import com.hcy.common.utils.TimeUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
/**
*
*/
@Service
public class SparePartReceiveServiceImpl implements ISparePartOutWarehouseService {
@Resource
SparePartStockAuditMapper sparePartStockAuditMapper;
@Resource
SparePartAuditMapper sparePartAuditMapper;
@Resource
SparePartMapper sparePartMapper;
@Resource
WarehouseMapper warehouseMapper;
/**
*
*
* @param pageParam
* @param params
* @return PageResult<SparePartInWarehouseListVo>
* @author hcy
*/
public PageResult<SparePartOutWarehouseListVo> list(PageParam pageParam, Map<String, String> params) {
Integer page = pageParam.getPageNo();
Integer limit = pageParam.getPageSize();
QueryWrapper<SparePartStockAudit> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("receipt_type",1);
queryWrapper.eq("is_delete", 0);
queryWrapper.orderByDesc("id");
sparePartStockAuditMapper.setSearch(queryWrapper, params, new String[]{
"like:receiptNumber@receipt_number:str",
"=:warehouseId@warehouse_id:long",
"=:outInWarehouseType@out_in_warehouse_type:long",
"=:auditState@audit_state:int",
});
IPage<SparePartStockAudit> iPage = sparePartStockAuditMapper.selectPage(new Page<>(page, limit), queryWrapper);
List<SparePartOutWarehouseListVo> list = new LinkedList<>();
for(SparePartStockAudit item : iPage.getRecords()) {
SparePartOutWarehouseListVo vo = new SparePartOutWarehouseListVo();
BeanUtils.copyProperties(item, vo);
vo.setCreateTime(TimeUtil.timestampToDate(item.getCreateTime()));
vo.setUpdateTime(TimeUtil.timestampToDate(item.getUpdateTime()));
vo.setHandlingTime(TimeUtil.timestampToDate(item.getHandlingTime())); //经办时间
vo.setConsigneePhone(item.getConsignee() + "/" + item.getPhone());
Warehouse warehouse = warehouseMapper.selectOne(
new QueryWrapper<Warehouse>()
.eq("id", item.getWarehouseId())
.eq("is_delete", 0)
.last("limit 1"));
vo.setWarehouseName(warehouse.getWarehouseName());
list.add(vo);
}
return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
}
/**
*
*
* @author hcy
* @param id
* @return SparePartInWarehouseListVo
*/
@Override
public SparePartOutWarehouseListVo detail(Integer id) {
SparePartStockAudit model = sparePartStockAuditMapper.selectOne(
new QueryWrapper<SparePartStockAudit>()
.eq("id", id)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在");
SparePartOutWarehouseListVo vo = new SparePartOutWarehouseListVo();
BeanUtils.copyProperties(model, vo);
Warehouse warehouse = warehouseMapper.selectOne(
new QueryWrapper<Warehouse>()
.eq("id", model.getWarehouseId())
.eq("is_delete", 0)
.last("limit 1"));
vo.setWarehouseName(warehouse.getWarehouseName());
//获取待审核备件信息
List<SparePartAudit> stockAuditId = sparePartAuditMapper.selectList(
new QueryWrapper<SparePartAudit>()
.eq("stock_audit_id", model.getId())
.eq("is_delete", 0)
);
//获取备件信息
List<SparePartAudit> listVo = new ArrayList<>();
for (SparePartAudit sparePartAudit : stockAuditId) {
SparePart sparePart = sparePartMapper.selectOne(
new QueryWrapper<SparePart>()
.eq("id", sparePartAudit.getSparePartsId())
.eq("is_delete", 0)
.last("limit 1"));
SparePartAudit sparePartAudit1 = new SparePartAudit();
BeanUtils.copyProperties(sparePart, sparePartAudit1);
sparePartAudit1.setId(sparePartAudit.getId());
sparePartAudit1.setSparePartsId(sparePart.getId());
sparePartAudit1.setStockAuditId(sparePartAudit.getStockAuditId());
sparePartAudit1.setCount(sparePartAudit.getCount()); // 出库数量
listVo.add(sparePartAudit1);
}
vo.setSparePartAuditList(listVo);
vo.setHandlingTime(TimeUtil.timestampToDate(model.getHandlingTime())); //经办时间
return vo;
}
/**
*
*
* @author hcy
* @param sparePartStockAuditParam
*/
@Override
public void add(SparePartStockAuditParam sparePartStockAuditParam) {
SparePartStockAudit model = new SparePartStockAudit();
QueryWrapper<SparePartStockAudit> qw = new QueryWrapper<>();
qw.select("max(id) as id");
SparePartStockAudit sparePartStockAudit = sparePartStockAuditMapper.selectOne(qw);
if(sparePartStockAudit == null){
model.setId(1L);
}else{
model.setId(sparePartStockAudit.getId() + 1);
}
model.setWarehouseId(sparePartStockAuditParam.getWarehouseId()); // 出库仓库
model.setOutInWarehouseType(sparePartStockAuditParam.getOutInWarehouseType()); // 出库类别 2=员工领料3=销售出库)
model.setConsignee(sparePartStockAuditParam.getConsignee()); // 收货单位(人员)
model.setPhone(sparePartStockAuditParam.getPhone()); // 联系电话
model.setReceiptNumber(generateOrderNumber()); // 单据编号
// 获取当前的用户
Object username = AdminThreadLocal.get("username");
model.setResponsiblePerson((String) username);
model.setHandlingTime(System.currentTimeMillis() / 1000); //经办时间
// 审核状态
model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus());
//单据类型0=入库单1=出库单2=仓库调拨单)
model.setReceiptType(AuditStateEnum.OUTWAREHOUSE.getStatus());
List<SparePartAudit> sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList();
// 使用StringBuilder来拼接id值
StringBuilder sb = new StringBuilder();
for (SparePartAudit sparePartAudit : sparePartAuditList) {
SparePartAudit insertSparePartAudit = new SparePartAudit();
insertSparePartAudit.setSparePartsId(sparePartAudit.getId()); //备件id
sb.append(sparePartAudit.getId()).append(",");
insertSparePartAudit.setCount(sparePartAudit.getCount()); //备件出库数量
insertSparePartAudit.setStockAuditId(model.getId()); // 出入库审核id
insertSparePartAudit.setCreateTime(System.currentTimeMillis() / 1000);
sparePartAuditMapper.insert(insertSparePartAudit);//插入备件审核信息
}
sb.deleteCharAt(sb.length() - 1); // 删除最后一个逗号
model.setSparePartAuditId(String.valueOf(sb));// 备件审核id
model.setCreateTime(System.currentTimeMillis() / 1000);
sparePartStockAuditMapper.insert(model);
}
/**
*
*
* @author hcy
* @param sparePartStockAuditParam
*/
@Override
public void edit(SparePartStockAuditParam sparePartStockAuditParam) {
SparePartStockAudit model = sparePartStockAuditMapper.selectOne(
new QueryWrapper<SparePartStockAudit>()
.eq("id", sparePartStockAuditParam.getId())
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在!");
model.setId(sparePartStockAuditParam.getId());
model.setWarehouseId(sparePartStockAuditParam.getWarehouseId()); // 出库仓库
model.setOutInWarehouseType(sparePartStockAuditParam.getOutInWarehouseType()); // 出库类别1=调拨出库)
model.setConsignee(sparePartStockAuditParam.getConsignee()); // 收货单位(人员)
model.setPhone(sparePartStockAuditParam.getPhone()); // 联系电话
model.setReceiptNumber(sparePartStockAuditParam.getReceiptNumber()); // 单据编号
List<SparePartAudit> sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList();
// 使用StringBuilder来拼接id值
StringBuilder sb = new StringBuilder();
List<SparePartAudit> auditList = sparePartAuditMapper.selectList(
new QueryWrapper<SparePartAudit>()
.eq("stock_audit_id", model.getId())
.eq("is_delete", 0));
for (SparePartAudit sparePartAudit : auditList) {
//将旧备件审核信息删除
SparePartAudit delectSparePartAudit = sparePartAuditMapper.selectOne(
new QueryWrapper<SparePartAudit>()
.eq("stock_audit_id", model.getId())
.eq("is_delete", 0)
.last("limit 1"));
if(delectSparePartAudit != null){
delectSparePartAudit.setIsDelete(1);
delectSparePartAudit.setDeleteTime(System.currentTimeMillis() / 1000);
sparePartAuditMapper.updateById(delectSparePartAudit);
}
}
for (SparePartAudit sparePartAudit : sparePartAuditList) {
//插入新的备件审核信息
SparePartAudit insertSparePartAudit = new SparePartAudit();
if(sparePartAudit.getSparePartsId() != null){
insertSparePartAudit.setSparePartsId(sparePartAudit.getSparePartsId()); //备件id
}else {
insertSparePartAudit.setSparePartsId(sparePartAudit.getId());
}
sb.append(sparePartAudit.getId()).append(",");
insertSparePartAudit.setCount(sparePartAudit.getCount()); //备件出库数量
insertSparePartAudit.setStockAuditId(model.getId()); // 出入库审核id
insertSparePartAudit.setUpdateTime(System.currentTimeMillis() / 1000);
sparePartAuditMapper.insert(insertSparePartAudit);//插入备件审核信息
}
//如果是已取消状态编辑改成未审核
if(model.getAuditState() == AuditStateEnum.CANCELED.getStatus()){
model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus());
}
//已审核,但不通过的,重新编辑之后状态也要变成未审核,审核结果改成空
if(model.getAuditState() == AuditStateEnum.AUDITED.getStatus()
&& model.getAuditResult() == AuditStateEnum.NOTPASS.getStatus()){
model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus());
model.setAuditResult(null);
}
sb.deleteCharAt(sb.length() - 1); // 删除最后一个逗号
model.setSparePartAuditId(String.valueOf(sb));// 备件审核id
model.setUpdateTime(System.currentTimeMillis() / 1000);
sparePartStockAuditMapper.updateById(model);
}
/**
*
*
* @author hcy
* @param id ID
*/
@Override
public void del(Integer id) {
SparePartStockAudit model = sparePartStockAuditMapper.selectOne(
new QueryWrapper<SparePartStockAudit>()
.eq("id", id)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在!");
model.setIsDelete(1);
model.setDeleteTime(System.currentTimeMillis() / 1000);
sparePartStockAuditMapper.updateById(model);
}
/**
* +6
* @return
*/
public String generateOrderNumber() {
String DATE_FORMAT = "yyyyMMdd";
int SEQUENCE_LENGTH = 6;
int sequence = 1; // 流水号从1开始
// 获取当前日期
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
String dateStr = dateFormat.format(new Date());
//查看数据库是否今日有订单编号
QueryWrapper<SparePartStockAudit> queryWrapper = new QueryWrapper<>();
queryWrapper.like("receipt_number",dateStr);
List<SparePartStockAudit> sparePartStockAudits = sparePartStockAuditMapper.selectList(queryWrapper);
int max = sparePartStockAudits.size();
if(sequence <= max){
sequence = max + 1; // 递增流水号
}
// 生成6位流水号
StringBuilder sequenceBuilder = new StringBuilder();
for (int i = 0; i < SEQUENCE_LENGTH; i++) {
sequenceBuilder.append(String.format("%0" + (SEQUENCE_LENGTH - i) + "d", sequence));
}
String truncatedString = sequenceBuilder.substring(0, 6);
// 拼接订单号
String orderNumber = dateStr + truncatedString;
return orderNumber;
}
}

View File

@ -92,10 +92,20 @@ public class SparePartServiceImpl implements ISparePartService {
.eq("id", item.getWarehouseId()) .eq("id", item.getWarehouseId())
.eq("is_delete", 0) .eq("is_delete", 0)
.last("limit 1")); .last("limit 1"));
if(warehouse != null){
vo.setWarehouseName(warehouse.getWarehouseName()); vo.setWarehouseName(warehouse.getWarehouseName());
}
//出库和调拨选配件的时候库存数量为0的不应出现 查询要加个字段
String s = params.get("outAllotType");
if(s != null && s.equals("0") && item.getQuantity() == 0){
System.out.println("出库和调拨时库存数量为0的不应出现");
}else{
list.add(vo); list.add(vo);
} }
}
return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list); return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
} }
@ -179,7 +189,7 @@ public class SparePartServiceImpl implements ISparePartService {
.eq("warehouse_id", sparePartParam.getWarehouseId()) .eq("warehouse_id", sparePartParam.getWarehouseId())
.eq("is_delete", 0) .eq("is_delete", 0)
.last("limit 1")); .last("limit 1"));
if(sparePart != null){ if(sparePart != null && !Objects.equals(sparePartParam.getId(), sparePart.getId())){
throw new OperateException("当前仓库下的备件编码不可重复!"); throw new OperateException("当前仓库下的备件编码不可重复!");
} }

View File

@ -243,7 +243,11 @@ public class SpareParAllotServiceImpl implements ISparePartAllotService {
List<SparePartAudit> sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList(); List<SparePartAudit> sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList();
// 使用StringBuilder来拼接id值 // 使用StringBuilder来拼接id值
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (SparePartAudit sparePartAudit : sparePartAuditList) { List<SparePartAudit> auditList = sparePartAuditMapper.selectList(
new QueryWrapper<SparePartAudit>()
.eq("stock_audit_id", model.getId())
.eq("is_delete", 0));
for (SparePartAudit sparePartAudit : auditList) {
//将旧备件审核信息删除 //将旧备件审核信息删除
SparePartAudit delectSparePartAudit = sparePartAuditMapper.selectOne( SparePartAudit delectSparePartAudit = sparePartAuditMapper.selectOne(
new QueryWrapper<SparePartAudit>() new QueryWrapper<SparePartAudit>()

View File

@ -238,7 +238,13 @@ public class SparePartInWarehouseServiceImpl implements ISparePartInWarehouseSer
List<SparePartAudit> sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList(); List<SparePartAudit> sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList();
// 使用StringBuilder来拼接id值 // 使用StringBuilder来拼接id值
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (SparePartAudit sparePartAudit : sparePartAuditList) {
List<SparePartAudit> auditList = sparePartAuditMapper.selectList(
new QueryWrapper<SparePartAudit>()
.eq("stock_audit_id", model.getId())
.eq("is_delete", 0));
for (SparePartAudit sparePartAudit : auditList) {
//将旧备件审核信息删除 //将旧备件审核信息删除
SparePartAudit delectSparePartAudit = sparePartAuditMapper.selectOne( SparePartAudit delectSparePartAudit = sparePartAuditMapper.selectOne(
new QueryWrapper<SparePartAudit>() new QueryWrapper<SparePartAudit>()

View File

@ -227,7 +227,11 @@ public class SparePartOutWarehouseServiceImpl implements ISparePartOutWarehouseS
List<SparePartAudit> sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList(); List<SparePartAudit> sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList();
// 使用StringBuilder来拼接id值 // 使用StringBuilder来拼接id值
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (SparePartAudit sparePartAudit : sparePartAuditList) { List<SparePartAudit> auditList = sparePartAuditMapper.selectList(
new QueryWrapper<SparePartAudit>()
.eq("stock_audit_id", model.getId())
.eq("is_delete", 0));
for (SparePartAudit sparePartAudit : auditList) {
//将旧备件审核信息删除 //将旧备件审核信息删除
SparePartAudit delectSparePartAudit = sparePartAuditMapper.selectOne( SparePartAudit delectSparePartAudit = sparePartAuditMapper.selectOne(
new QueryWrapper<SparePartAudit>() new QueryWrapper<SparePartAudit>()

View File

@ -69,4 +69,10 @@ public interface ISparePartStockAuditService {
* @param id * @param id
*/ */
void cancelAudit(Integer id); void cancelAudit(Integer id);
/**
*
* @param id
*/
void inventoryComparison(Integer id);
} }

View File

@ -414,4 +414,60 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
model.setUpdateTime(System.currentTimeMillis() / 1000); model.setUpdateTime(System.currentTimeMillis() / 1000);
sparePartStockAuditMapper.updateById(model); sparePartStockAuditMapper.updateById(model);
} }
//库存比对接口,就是每次出入库审核的时候前端都要请求,如果库存不够就不审核了
public void inventoryComparison(Integer id){
SparePartStockAudit model = sparePartStockAuditMapper.selectOne(
new QueryWrapper<SparePartStockAudit>()
.eq("id", id)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在!");
// 出库时需要判断库存数量是否大于出库数量,大于才允许出库;反之,提示备件库存数量不足
//获取待审核备件信息
List<SparePartAudit> stockAuditId = sparePartAuditMapper.selectList(
new QueryWrapper<SparePartAudit>()
.eq("stock_audit_id", model.getId())
.eq("is_delete", 0)
);
if(model.getReceiptType() == AuditStateEnum.OUTWAREHOUSE.getStatus()){
// 通过审核的出库单
//获取备件信息
for (SparePartAudit sparePartAudit : stockAuditId) {
SparePart sparePart = sparePartMapper.selectOne(
new QueryWrapper<SparePart>()
.eq("id", sparePartAudit.getSparePartsId())
.eq("is_delete", 0)
.last("limit 1"));
// 出库时需要判断库存数量是否大于出库数量,大于才允许出库;反之,提示备件库存数量不足
if(sparePart.getQuantity() >= sparePartAudit.getCount()){
}else{
throw new OperateException(sparePart.getSparePartsName() + "备件库存数量不足,请联系客服人员!");
}
}
}else if(model.getReceiptType() == AuditStateEnum.ALLOT.getStatus()){
//通过审核的调拨单
//获取备件信息
for (SparePartAudit sparePartAudit : stockAuditId) {
//调出仓库
SparePart sparePart = sparePartMapper.selectOne(
new QueryWrapper<SparePart>()
.eq("spare_parts_code", sparePartAudit.getSparePartsCode())
.eq("warehouse_id", model.getExportWarehouse())
.eq("is_delete", 0)
.last("limit 1"));
// 出库时需要判断库存数量是否大于出库数量,大于才允许出库;反之,提示备件库存数量不足
if(sparePart.getQuantity() >= sparePartAudit.getCount()){
}else{
throw new OperateException(sparePart.getSparePartsName() + "备件库存数量不足,请联系客服人员!");
}
}
}
}
} }

View File

@ -20,6 +20,7 @@ import com.hcy.common.core.PageResult;
import com.hcy.common.entity.sparePart.SparePart; import com.hcy.common.entity.sparePart.SparePart;
import com.hcy.common.entity.system.SystemAuthDept; import com.hcy.common.entity.system.SystemAuthDept;
import com.hcy.common.entity.warehouse.Warehouse; import com.hcy.common.entity.warehouse.Warehouse;
import com.hcy.common.exception.OperateException;
import com.hcy.common.mapper.sparePart.SparePartMapper; import com.hcy.common.mapper.sparePart.SparePartMapper;
import com.hcy.common.mapper.warehouse.WarehouseMapper; import com.hcy.common.mapper.warehouse.WarehouseMapper;
import com.hcy.common.utils.ArrayUtil; import com.hcy.common.utils.ArrayUtil;
@ -158,17 +159,29 @@ public class WarehouseServiceImpl implements IWarehouseService {
new QueryWrapper<Warehouse>() new QueryWrapper<Warehouse>()
.in("id", ids)); .in("id", ids));
for (Long id : ids) { for (Long id : ids) {
//仓库存在配件且配件数量不为0时不允许删除
SparePart sparePart = sparePartMapper.selectOne(
new QueryWrapper<SparePart>()
.eq("warehouse_id", id)
.eq("is_delete", 0)
.last("limit 1"));
if(sparePart != null && sparePart.getQuantity() != 0){
}else{
Warehouse pModel = warehouseMapper.selectOne( Warehouse pModel = warehouseMapper.selectOne(
new QueryWrapper<Warehouse>() new QueryWrapper<Warehouse>()
.select("id,pid,warehouse_name") .select("id,pid,warehouse_name")
.eq("pid", id) .eq("pid", id)
.eq("is_delete", 0) .eq("is_delete", 0)
.last("limit 1")); .last("limit 1"));
Assert.isNull(pModel, "请先删除子级仓库"); Assert.isNull(pModel, "请先删除子级仓库");
} }
}
// GlobalConstant.NOT_DELETE 调用未删除常量 // GlobalConstant.NOT_DELETE 调用未删除常量
// GlobalConstant.DELETE 删除标识 // GlobalConstant.DELETE 删除标识

View File

@ -9,6 +9,7 @@ import org.hibernate.validator.constraints.Length;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.*; import javax.validation.constraints.*;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -85,4 +86,18 @@ public class SparePartStockAuditParam implements Serializable {
private List<SparePartAudit> sparePartAuditList; //待入库的备件 private List<SparePartAudit> sparePartAuditList; //待入库的备件
private Long outInWarehouseType; //出入库类别0=采购入库1=库存调拨2=员工领料3=销售出库) private Long outInWarehouseType; //出入库类别0=采购入库1=库存调拨2=员工领料3=销售出库)
private String workOrderId; //工单号
private String orderId; //订单编号
private String shippingAddress; //收货地址
private String consigner; //发货人
private String consignerPhone; //发货人联系电话
private String shipAddress; //发货地址
private String logisticsCompany; //物流公司
private String trackingNumber; //物流编号
private Long distributionMode; //配送方式0=物流快递1=送货上门2=上门取件)
private BigDecimal salesPrice; //销售价
private String recipient; //领用员工
private String recipientPhone; //领用员工联系电话
private Integer recipientNumber; //领用数量
private Long state; //状态0=未审核1=待管理员审核2=未通过3=待发货4=待收货5=已完成)
} }

View File

@ -0,0 +1,47 @@
package com.hcy.admin.vo.sparePartReceive;
import com.hcy.common.entity.SparePartAudit.SparePartAudit;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* SparePartReceiveListVo
*/
@Data
public class SparePartReceiveListVo implements Serializable {
private static final long serialVersionUID = 1L;
private Long id; // 主键id
private String receiptNumber; // 单据编号
private Long warehouseId; // 所属仓库
private String consignee; // 收货单位(人员)
private String phone; // 联系电话
private String responsiblePerson; // 经办人
private String handlingTime; // 经办时间
private Integer auditState; // 审核状态0=未审核1=已审核2=已取消)
private Integer auditResult; // 审核结果0=已通过1=未通过)
private Long auditTime; // 审核时间
private String auditIdea; // 审核意见
private String createTime; // 创建时间
private String updateTime; // 更新时间
private String sparePartAuditId; // 备件审核id
private String consigneePhone; // 收货单位(人员)/电话
private List<SparePartAudit> sparePartAuditList; //待入库的备件
private String warehouseName; // 所属仓库名
private Long outInWarehouseType; // 出入库类别0=采购入库1=库存调拨2=员工领料3=销售出库)
private String workOrderId; //工单号
private String recipient; //领用员工
private String recipientPhone; //领用员工联系电话
private Integer recipientNumber; //领用数量
private Long state; //状态0=未审核1=待管理员审核2=未通过3=待发货4=待收货5=已完成)
private String shippingAddress; //收货地址
private String consigner; //发货人
private String consignerPhone; //发货人联系电话
private String shipAddress; //发货地址
private String logisticsCompany; //物流公司
private String trackingNumber; //物流编号
}

View File

@ -5,6 +5,7 @@ import io.swagger.models.auth.In;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
/** /**
@ -39,7 +40,19 @@ public class SparePartStockAuditDetailVo implements Serializable {
private Long outInWarehouseType; // 出入库类别0=采购入库1=库存调拨2=员工领料3=销售出库) private Long outInWarehouseType; // 出入库类别0=采购入库1=库存调拨2=员工领料3=销售出库)
private String supplierPhone; // 供应商/电话 private String supplierPhone; // 供应商/电话
private String consigneePhone; // 收货单位(人员)/电话 private String consigneePhone; // 收货单位(人员)/电话
private String workOrderId; //工单号
private String orderId; //订单编号
private String shippingAddress; //收货地址
private String consigner; //发货人
private String consignerPhone; //发货人联系电话
private String shipAddress; //发货地址
private String logisticsCompany; //物流公司
private String trackingNumber; //物流编号
private Long distributionMode; //配送方式0=物流快递1=送货上门2=上门取件)
private BigDecimal salesPrice; //销售价
private String recipient; //领用员工
private String recipientPhone; //领用员工联系电话
private Integer recipientNumber; //领用数量
private Long state; //状态0=未审核1=待管理员审核2=未通过3=待发货4=待收货5=已完成)
} }

View File

@ -4,6 +4,7 @@ import com.hcy.common.entity.SparePartAudit.SparePartAudit;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
/** /**
@ -37,4 +38,20 @@ public class SparePartStockAuditListVo implements Serializable {
private String importWarehouseName; // 调入仓库名 private String importWarehouseName; // 调入仓库名
private String exportWarehouseName; // 调出仓库名 private String exportWarehouseName; // 调出仓库名
private Long outInWarehouseType; // 出入库类别0=采购入库1=库存调拨2=员工领料3=销售出库) private Long outInWarehouseType; // 出入库类别0=采购入库1=库存调拨2=员工领料3=销售出库)
private String workOrderId; //工单号
private String orderId; //订单编号
private String shippingAddress; //收货地址
private String consigner; //发货人
private String consignerPhone; //发货人联系电话
private String shipAddress; //发货地址
private String logisticsCompany; //物流公司
private String trackingNumber; //物流编号
private Long distributionMode; //配送方式0=物流快递1=送货上门2=上门取件)
private BigDecimal salesPrice; //销售价
private String recipient; //领用员工
private String recipientPhone; //领用员工联系电话
private Integer recipientNumber; //领用数量
private Long state; //状态0=未审核1=待管理员审核2=未通过3=待发货4=待收货5=已完成)
} }

View File

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
/** /**
* *
@ -40,4 +41,18 @@ public class SparePartStockAudit implements Serializable {
private Long deleteTime; // 删除时间 private Long deleteTime; // 删除时间
private String sparePartAuditId; // 备件审核id private String sparePartAuditId; // 备件审核id
private Long outInWarehouseType; // 出入库类别0=采购入库1=库存调拨2=员工领料3=销售出库) private Long outInWarehouseType; // 出入库类别0=采购入库1=库存调拨2=员工领料3=销售出库)
private String workOrderId; //工单号
private String orderId; //订单编号
private String shippingAddress; //收货地址
private String consigner; //发货人
private String consignerPhone; //发货人联系电话
private String shipAddress; //发货地址
private String logisticsCompany; //物流公司
private String trackingNumber; //物流编号
private Long distributionMode; //配送方式0=物流快递1=送货上门2=上门取件)
private BigDecimal salesPrice; //销售价
private String recipient; //领用员工
private String recipientPhone; //领用员工联系电话
private Integer recipientNumber; //领用数量
private Long state; //状态0=未审核1=待管理员审核2=未通过3=待发货4=待收货5=已完成)
} }