【admin】优化#1、出入库管理 2、仓库编辑 3、仓库库存对比接口
parent
af4b4276c0
commit
68c7c1ac16
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
|
@ -121,4 +121,14 @@ public class SparePartStockAuditController {
|
|||
iSparePartStockAuditService.cancelAudit(Math.toIntExact(sparePartStockAuditParam.getId()));
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 库存比对接口,就是每次出入库审核的时候前端都要请求,如果库存不够就不审核了
|
||||
* @param id
|
||||
*/
|
||||
@GetMapping("/inventoryComparison")
|
||||
public Object inventoryComparison(@RequestParam("id") Integer id){
|
||||
iSparePartStockAuditService.inventoryComparison(id);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -92,10 +92,20 @@ public class SparePartServiceImpl implements ISparePartService {
|
|||
.eq("id", item.getWarehouseId())
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1"));
|
||||
if(warehouse != null){
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
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("is_delete", 0)
|
||||
.last("limit 1"));
|
||||
if(sparePart != null){
|
||||
if(sparePart != null && !Objects.equals(sparePartParam.getId(), sparePart.getId())){
|
||||
throw new OperateException("当前仓库下的备件编码不可重复!");
|
||||
}
|
||||
|
||||
|
|
|
@ -243,7 +243,11 @@ public class SpareParAllotServiceImpl implements ISparePartAllotService {
|
|||
List<SparePartAudit> sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList();
|
||||
// 使用StringBuilder来拼接id值
|
||||
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(
|
||||
new QueryWrapper<SparePartAudit>()
|
||||
|
|
|
@ -238,7 +238,13 @@ public class SparePartInWarehouseServiceImpl implements ISparePartInWarehouseSer
|
|||
List<SparePartAudit> sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList();
|
||||
// 使用StringBuilder来拼接id值
|
||||
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(
|
||||
new QueryWrapper<SparePartAudit>()
|
||||
|
|
|
@ -227,7 +227,11 @@ public class SparePartOutWarehouseServiceImpl implements ISparePartOutWarehouseS
|
|||
List<SparePartAudit> sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList();
|
||||
// 使用StringBuilder来拼接id值
|
||||
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(
|
||||
new QueryWrapper<SparePartAudit>()
|
||||
|
|
|
@ -69,4 +69,10 @@ public interface ISparePartStockAuditService {
|
|||
* @param id
|
||||
*/
|
||||
void cancelAudit(Integer id);
|
||||
|
||||
/**
|
||||
* 库存对比
|
||||
* @param id
|
||||
*/
|
||||
void inventoryComparison(Integer id);
|
||||
}
|
||||
|
|
|
@ -414,4 +414,60 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
|
|||
model.setUpdateTime(System.currentTimeMillis() / 1000);
|
||||
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() + "备件库存数量不足,请联系客服人员!");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ import com.hcy.common.core.PageResult;
|
|||
import com.hcy.common.entity.sparePart.SparePart;
|
||||
import com.hcy.common.entity.system.SystemAuthDept;
|
||||
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.warehouse.WarehouseMapper;
|
||||
import com.hcy.common.utils.ArrayUtil;
|
||||
|
@ -158,17 +159,29 @@ public class WarehouseServiceImpl implements IWarehouseService {
|
|||
new QueryWrapper<Warehouse>()
|
||||
.in("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(
|
||||
new QueryWrapper<Warehouse>()
|
||||
.select("id,pid,warehouse_name")
|
||||
.eq("pid", id)
|
||||
.eq("is_delete", 0)
|
||||
.last("limit 1"));
|
||||
|
||||
Assert.isNull(pModel, "请先删除子级仓库");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// GlobalConstant.NOT_DELETE 调用未删除常量
|
||||
// GlobalConstant.DELETE 删除标识
|
||||
|
||||
|
|
|
@ -9,6 +9,7 @@ import org.hibernate.validator.constraints.Length;
|
|||
import lombok.Data;
|
||||
import javax.validation.constraints.*;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -85,4 +86,18 @@ public class SparePartStockAuditParam implements Serializable {
|
|||
private List<SparePartAudit> sparePartAuditList; //待入库的备件
|
||||
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=已完成)
|
||||
}
|
||||
|
|
|
@ -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; //物流编号
|
||||
}
|
|
@ -5,6 +5,7 @@ import io.swagger.models.auth.In;
|
|||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
@ -39,7 +40,19 @@ public class SparePartStockAuditDetailVo implements Serializable {
|
|||
private Long outInWarehouseType; // 出入库类别(0=采购入库,1=库存调拨,2=员工领料,3=销售出库)
|
||||
private String supplierPhone; // 供应商/电话
|
||||
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=已完成)
|
||||
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import com.hcy.common.entity.SparePartAudit.SparePartAudit;
|
|||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
@ -37,4 +38,20 @@ public class SparePartStockAuditListVo implements Serializable {
|
|||
private String importWarehouseName; // 调入仓库名
|
||||
private String exportWarehouseName; // 调出仓库名
|
||||
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=已完成)
|
||||
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
|
|||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 备件出入库审核实体
|
||||
|
@ -40,4 +41,18 @@ public class SparePartStockAudit implements Serializable {
|
|||
private Long deleteTime; // 删除时间
|
||||
private String sparePartAuditId; // 备件审核id
|
||||
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=已完成)
|
||||
}
|
Loading…
Reference in New Issue