【admin】新增&优化# 1.新增检修单配件领用 2.优化出入库单查询

dev
dabin 2024-08-29 10:46:47 +08:00
parent 9144e704de
commit f68344087c
20 changed files with 522 additions and 137 deletions

View File

@ -121,6 +121,18 @@ public class SparePartStockAuditController {
return AjaxResult.success();
}
/**
*
* @param sparePartStockAuditParam
* @return
*/
@Log(title = "备件采购审核")
@PostMapping("/purchaseAudit")
public Object purchaseAudit(@RequestBody SparePartStockAuditParam sparePartStockAuditParam) {
iSparePartStockAuditService.purchaseAudit(sparePartStockAuditParam);
return AjaxResult.success();
}
/**
*
* @param id

View File

@ -15,6 +15,7 @@ import com.hcy.admin.vo.order.MaintenanceOrderListVo;
import com.hcy.admin.vo.order.MaintenanceOrderDetailVo;
import com.hcy.admin.vo.order.OrderSparePartListVo;
import com.hcy.admin.vo.order.repair.MaintenanceRepairDetailVo;
import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditDetailVo;
import com.hcy.common.constant.GlobalConstant;
import com.hcy.common.core.PageResult;
import com.hcy.common.dto.order.MaintenanceOrderDto;
@ -27,6 +28,7 @@ import com.hcy.common.entity.client.EquipmentModel;
import com.hcy.common.entity.fault.Fault;
import com.hcy.common.entity.order.MaintenanceOrder;
import com.hcy.common.entity.order.repair.MaintenanceRepair;
import com.hcy.common.entity.sparePartStockAudit.SparePartStockAudit;
import com.hcy.common.entity.system.SystemAuthAdmin;
import com.hcy.common.entity.user.User;
import com.hcy.common.entity.warehouse.Warehouse;
@ -43,6 +45,7 @@ import com.hcy.common.mapper.fault.FaultMapper;
import com.hcy.common.mapper.order.MaintenanceOrderMapper;
import com.hcy.common.mapper.order.OrderSparePartMapper;
import com.hcy.common.mapper.order.repair.MaintenanceRepairMapper;
import com.hcy.common.mapper.sparePartStockAudit.SparePartStockAuditMapper;
import com.hcy.common.mapper.system.SystemAuthAdminMapper;
import com.hcy.common.mapper.user.UserMapper;
import com.hcy.common.mapper.warehouse.WarehouseMapper;
@ -102,6 +105,9 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService {
@Resource
WarehouseMapper warehouseMapper;
@Resource
SparePartStockAuditMapper sparePartStockAuditMapper;
/**
*
*
@ -222,6 +228,20 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService {
vo.setFaultName(fault.getName());
}
//设置常见维修结论
Fault familiarFault = faultMapper.findFaultById(model.getFamiliarFaultId());
if(familiarFault != null){
vo.setFamiliarFaultName(familiarFault.getName());
}
//设置配件领用明细
SparePartStockAudit sparePartStockAudit = sparePartStockAuditMapper.findSparePartStockAuditByOrderId(model.getId());
if(sparePartStockAudit != null){
SparePartStockAuditDetailVo sparePartStockAuditDetailVo = new SparePartStockAuditDetailVo();
BeanUtils.copyProperties(sparePartStockAudit,sparePartStockAuditDetailVo);
vo.setSparePartStockAuditDetailVo(sparePartStockAuditDetailVo);
}
//设置配件清单
List<OrderSparePart> orderSpareParts = orderSparePartMapper.selectList(new LambdaQueryWrapper<OrderSparePart>()
.eq(OrderSparePart::getMaintenanceOrderId, model.getId()));
@ -286,7 +306,7 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService {
}
MaintenanceOrder maintenanceOrder = maintenanceOrderMapper.findLastMaintenanceOrderByTime(TimeUtil.getCurrentTimeYYYYMMDD());
model.setOrderNo(OrderUtil.getOrderNo(maintenanceOrder.getOrderNo()));
model.setOrderNo(OrderUtil.getOrderNo(maintenanceOrder == null ? "" :maintenanceOrder.getOrderNo()));
model.setCreatorId(AdminThreadLocal.getAdminId().longValue());
maintenanceOrderMapper.insert(model);

View File

@ -70,6 +70,12 @@ public interface ISparePartStockAuditService {
*/
void cancelAudit(Integer id);
/**
*
* @param sparePartStockAuditParam
*/
void purchaseAudit(SparePartStockAuditParam sparePartStockAuditParam);
/**
*
* @param id

View File

@ -24,6 +24,7 @@ import com.hcy.common.entity.user.User;
import com.hcy.common.entity.warehouse.Warehouse;
import com.hcy.common.enums.SparePartStockAuditEnum;
import com.hcy.common.enums.audit.AuditStateEnum;
import com.hcy.common.enums.order.MaintenanceOrderStatusEnum;
import com.hcy.common.exception.OperateException;
import com.hcy.common.mapper.SparePartAudit.SparePartAuditMapper;
import com.hcy.common.mapper.order.MaintenanceOrderMapper;
@ -77,10 +78,10 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
/**
*
*
* @author hcy
* @param pageParam
* @param params
* @return PageResult<SparePartStockAuditListVo>
* @author hcy
*/
@Override
public PageResult<SparePartStockAuditListVo> list(PageParam pageParam, SparePartStockAuditParam params) {
@ -91,11 +92,37 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
.eq(SparePartStockAudit::getIsDelete, GlobalConstant.NOT_DELETE)
.eq(params.getReceiptType() != null, SparePartStockAudit::getReceiptType, params.getReceiptType())
.eq(params.getOutInWarehouseType() != null, SparePartStockAudit::getOutInWarehouseType, params.getOutInWarehouseType())
.eq(StringUtils.isNotEmpty(params.getReceiptNumber()), SparePartStockAudit::getReceiptNumber, params.getReceiptNumber())
.like(StringUtils.isNotEmpty(params.getReceiptNumber()), SparePartStockAudit::getReceiptNumber, params.getReceiptNumber())
.eq(params.getAuditState() != null, SparePartStockAudit::getAuditState, params.getAuditState())
.eq(params.getWarehouseId() != null, SparePartStockAudit::getWarehouseId, params.getWarehouseId())
.eq(params.getDeliveryMethod() != null, SparePartStockAudit::getDeliveryMethod, params.getDeliveryMethod())
.eq(params.getPurchaseStatus() != null, SparePartStockAudit::getPurchaseStatus, params.getPurchaseStatus())
.ge(StringUtils.isNotEmpty(params.getCreateTimeStart()), SparePartStockAudit::getCreateTime, params.getCreateTimeStart())
.le(StringUtils.isNotEmpty(params.getCreateTimeEnd()), SparePartStockAudit::getCreateTime, params.getCreateTimeEnd())
.orderByDesc(SparePartStockAudit::getCreateTime);
if(params.getOrderType() == null){
//如果当前不是配件采购则将配件采购出入库单排除
if (params.getOutInWarehouseType() == null) {
if (params.getReceiptType() == null) {
queryWrapper.isNull(SparePartStockAudit::getPurchaseStatus)
.or(orQuery -> orQuery.ne(SparePartStockAudit::getPurchaseStatus, AuditStateEnum.UNREVIEWED.getStatus())
.ne(SparePartStockAudit::getPurchaseStatus, AuditStateEnum.AUDITED.getStatus())
.ne(SparePartStockAudit::getPurchaseStatus, AuditStateEnum.CANCELED_AUDIT.getStatus())
.ne(SparePartStockAudit::getPurchaseStatus, AuditStateEnum.FILLING_OUT.getStatus()));
} else {
queryWrapper.isNull(SparePartStockAudit::getPurchaseStatus);
}
}else{
if(StringUtils.isEmpty(params.getConsignee())){
queryWrapper.and(query -> query.ne(SparePartStockAudit::getPurchaseStatus, AuditStateEnum.FILLING_OUT.getStatus())
.ne(SparePartStockAudit::getPurchaseStatus,AuditStateEnum.CANCELED_AUDIT.getStatus()));
}else{
queryWrapper.isNotNull(SparePartStockAudit::getPurchaseStatus);
}
}
}
//领用时间范围,配送方式查询
IPage<SparePartStockAudit> iPage = sparePartStockAuditMapper.selectPage(new Page<>(page, limit), queryWrapper);
List<SparePartStockAuditListVo> list = new ArrayList<>();
@ -103,16 +130,21 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
SparePartStockAuditListVo vo = new SparePartStockAuditListVo();
BeanUtils.copyProperties(item, vo);
vo.setRecipientAndPhone(item.getRecipient() + "/" + item.getRecipientPhone()); //领料员工/联系电话
vo.setSupplierPhone(item.getSupplier() + "/" + item.getPhone()); //领料员工/联系电话
vo.setSupplierPhone(item.getSupplier() + "/" + item.getPhone()); //供应商/电话
if (item.getOrderType() != null) {
User user = userMapper.selectById(item.getCreatorId());
vo.setCreator(user.getUsername());
item.setConsignee(user.getUsername());
vo.setConsignerPhone(user.getUsername() + "/" + item.getPhone());
vo.setRecipientAndPhone(user.getUsername() + "/" + item.getPhone()); //领料员工/联系电话
} else {
SystemAuthAdmin systemAuthAdmin = systemAuthAdminMapper.findSystemAuthAdminById(item.getCreatorId());
if (systemAuthAdmin != null) {
vo.setCreator(systemAuthAdmin.getUsername());
item.setConsignee(systemAuthAdmin.getUsername());
vo.setConsignerPhone(systemAuthAdmin.getUsername() + "/" + item.getPhone());
vo.setRecipientAndPhone(systemAuthAdmin.getUsername() + "/" + item.getPhone()); //领料员工/联系电话
}
}
@ -158,7 +190,7 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
}
//设置仓库名称
if(AuditStateEnum.ALLOT.getStatus() == item.getOutInWarehouseType()){
if (AuditStateEnum.ALLOT.getStatus() == item.getReceiptType()) {
// 调入仓库名
Warehouse importWarehouseName = warehouseMapper.findWarehouseById(item.getImportWarehouse());
if (importWarehouseName != null) {
@ -192,9 +224,9 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
/**
*
*
* @author hcy
* @param id
* @return SparePartStockAudit
* @author hcy
*/
@Override
public SparePartStockAuditDetailVo detail(Long id) {
@ -204,6 +236,16 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
SparePartStockAuditDetailVo vo = new SparePartStockAuditDetailVo();
BeanUtils.copyProperties(model, vo);
if (model.getOrderType() != null) {
User user = userMapper.selectById(model.getCreatorId());
vo.setCreator(user.getUsername());
} else {
SystemAuthAdmin systemAuthAdmin = systemAuthAdminMapper.findSystemAuthAdminById(model.getCreatorId());
if (systemAuthAdmin != null) {
vo.setCreator(systemAuthAdmin.getUsername());
}
}
//获取待审核备件信息
if (model.getOrderType() != null && model.getOrderType() == SparePartStockAuditEnum.MAINTENANCE_ORDER.getStatus()) {
MaintenanceOrder maintenanceOrder = maintenanceOrderMapper.findMaintenanceOrderById(model.getOrderId());
@ -228,14 +270,13 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
for (SparePartAudit sparePartAudit : sparePartAuditList) {
SparePartAuditListVo sparePartAuditListVo = new SparePartAuditListVo();
BeanUtils.copyProperties(sparePartAudit, sparePartAuditListVo);
listVo.add(sparePartAuditListVo);
}
vo.setSparePartAuditList(listVo);
}
//设置仓库名称
if(AuditStateEnum.ALLOT.getStatus() == model.getOutInWarehouseType()){
if (AuditStateEnum.ALLOT.getStatus() == model.getReceiptType()) {
// 调入仓库名
Warehouse importWarehouseName = warehouseMapper.findWarehouseById(model.getImportWarehouse());
if (importWarehouseName != null) {
@ -248,7 +289,7 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
vo.setExportWarehouseName(exportWarehouseName.getWarehouseName());
}
} else {
Long warehouseId = model.getWarehouseId();
Long warehouseId;
if (model.getImportWarehouse() != null) {
warehouseId = model.getImportWarehouse();
} else {
@ -266,8 +307,8 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
/**
*
*
* @author hcy
* @param sparePartStockAuditParam
* @author hcy
*/
@Override
@Transactional
@ -281,15 +322,6 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
// 获取当前的用户
model.setCreatorId(AdminThreadLocal.getAdminId());
if(sparePartStockAuditParam.getReceiptType() == AuditStateEnum.OUT_WAREHOUSE.getStatus()){
model.setExportWarehouse(sparePartStockAuditParam.getWarehouseId());
}else if(sparePartStockAuditParam.getReceiptType() == AuditStateEnum.IN_WAREHOUSE.getStatus()){
model.setImportWarehouse(sparePartStockAuditParam.getWarehouseId());
}else if(sparePartStockAuditParam.getReceiptType() == AuditStateEnum.ALLOT.getStatus()){
model.setExportWarehouse(sparePartStockAuditParam.getWarehouseId());
model.setImportWarehouse(sparePartStockAuditParam.getWarehouseId());
}
sparePartStockAuditMapper.insert(model);
List<SparePartAudit> sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList();
@ -297,8 +329,10 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
SparePart sparePart = sparePartMapper.findSparePartById(item.getId());
SparePartAudit sparePartAudit = new SparePartAudit();
BeanUtils.copyProperties(sparePart, sparePartAudit);
sparePartAudit.setId(null);
sparePartAudit.setStockAuditId(model.getId());
sparePartAudit.setSparePartsId(sparePart.getId());
sparePartAudit.setCount(item.getCount());
sparePartAuditMapper.insert(sparePartAudit);//插入备件审核信息
}
@ -307,49 +341,73 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
/**
*
*
* @author hcy
* @param sparePartStockAuditParam
* @author hcy
*/
@Override
@Transactional
public void edit(SparePartStockAuditParam sparePartStockAuditParam) {
SparePartStockAudit model = sparePartStockAuditMapper.findSparePartStockAuditById(sparePartStockAuditParam.getId());
Assert.notNull(model, "数据不存在!");
SparePartStockAudit orlModel = sparePartStockAuditMapper.findSparePartStockAuditById(sparePartStockAuditParam.getId());
Assert.notNull(orlModel, "数据不存在!");
SparePartStockAudit model = new SparePartStockAudit();
BeanUtils.copyProperties(sparePartStockAuditParam, model);
//删除已保存的备件信息
List<SparePartAudit> sparePartAudits = sparePartAuditMapper.findSparePartAuditByStockAuditId(model.getId());
List<SparePartAudit> sparePartAudits = sparePartAuditMapper.findSparePartAuditByStockAuditId(orlModel.getId());
for (SparePartAudit sparePartAudit : sparePartAudits) {
sparePartAudit.setIsDelete(GlobalConstant.DELETE);
sparePartAuditMapper.updateById(sparePartAudit);
}
//新增新编辑备件信息
//新增出入库审核备件信息
List<SparePartAudit> sparePartAuditList = sparePartStockAuditParam.getSparePartAuditList();
for (SparePartAudit sparePartAudit : sparePartAuditList) {
sparePartAudit.setStockAuditId(model.getId());
sparePartAuditMapper.insert(sparePartAudit);
for (SparePartAudit item : sparePartAuditList) {
SparePart sparePart;
if (item.getSparePartsId() != null) {
sparePart = sparePartMapper.findSparePartById(item.getSparePartsId());
} else {
sparePart = sparePartMapper.findSparePartById(item.getId());
}
SparePartAudit sparePartAudit = new SparePartAudit();
BeanUtils.copyProperties(sparePart, sparePartAudit);
BeanUtils.copyProperties(model,sparePartStockAuditParam);
sparePartAudit.setId(null);
sparePartAudit.setStockAuditId(orlModel.getId());
sparePartAudit.setSparePartsId(sparePart.getId());
sparePartAudit.setCount(item.getCount());
sparePartAuditMapper.insert(sparePartAudit);//插入备件审核信息
}
//如果是已取消状态编辑改成未审核
if(model.getAuditState() == AuditStateEnum.CANCELED.getStatus()){
if (orlModel.getAuditState() == AuditStateEnum.CANCELED.getStatus()) {
model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus());
}
if (orlModel.getPurchaseStatus() != null && orlModel.getPurchaseStatus() == AuditStateEnum.CANCELED_AUDIT.getStatus()) {
model.setPurchaseStatus(AuditStateEnum.UNREVIEWED.getStatus());
}
//已审核,但不通过的,重新编辑之后状态也要变成未审核,审核结果改成空
if(model.getAuditState() == AuditStateEnum.AUDITED.getStatus()
&& model.getAuditResult() == AuditStateEnum.NOT_PASS.getStatus()){
if (orlModel.getAuditState() == AuditStateEnum.AUDITED.getStatus()
&& orlModel.getAuditResult() == AuditStateEnum.NOT_PASS.getStatus()) {
model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus());
model.setAuditResult(null);
}
if (orlModel.getPurchaseStatus() != null && orlModel.getPurchaseStatus() == AuditStateEnum.AUDITED.getStatus()) {
model.setPurchaseStatus(AuditStateEnum.UNREVIEWED.getStatus());
model.setAuditResult(null);
}
sparePartStockAuditMapper.updateById(model);
}
/**
*
*
* @author hcy
* @param id ID
* @author hcy
*/
@Override
public void del(Long id) {
@ -364,10 +422,11 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
/**
*
*
* @author hcy
* @param sparePartStockAuditParam
* @author hcy
*/
@Override
@Transactional
public void audit(SparePartStockAuditParam sparePartStockAuditParam) {
SparePartStockAudit model = sparePartStockAuditMapper.selectOne(
new QueryWrapper<SparePartStockAudit>()
@ -379,11 +438,11 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
model.setId(sparePartStockAuditParam.getId());
model.setAuditResult(sparePartStockAuditParam.getAuditResult()); // 审核结果0=已通过1=未通过)
if(sparePartStockAuditParam.getAuditResult() == AuditStateEnum.NOT_PASS.getStatus()){
model.setPurchaseStatus(AuditStateEnum.NOTPASSSTATE.getStatus()); //审核未通过
if (model.getPurchaseStatus() != null && sparePartStockAuditParam.getAuditResult() == AuditStateEnum.NOT_PASS.getStatus()) {
model.setPurchaseStatus(AuditStateEnum.NOT_PASS_STATE.getStatus()); //审核未通过
}
model.setAuditState(AuditStateEnum.AUDITED.getStatus()); // 审核状态0=未审核1=已审核2=已取消)
model.setAuditTime(System.currentTimeMillis() / 1000); // 审核时间
model.setAuditTime(new Date()); // 审核时间
model.setAuditIdea(sparePartStockAuditParam.getAuditIdea()); // 审核意见
// 出库时需要判断库存数量是否大于出库数量,大于才允许出库;反之,提示备件库存数量不足
@ -419,15 +478,14 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
// 出库时需要判断库存数量是否大于出库数量,大于才允许出库;反之,提示备件库存数量不足
if (sparePart.getQuantity() >= sparePartAudit.getCount()) {
sparePart.setQuantity(sparePart.getQuantity() - sparePartAudit.getCount());
if(model.getPurchaseStatus() != null && model.getPurchaseStatus() == AuditStateEnum.CHECKPENDING.getStatus()){
model.setPurchaseStatus(AuditStateEnum.WAITDELIVER.getStatus()); //审核通过改成待发货
}
} else {
throw new OperateException("备件库存数量不足,请联系客服人员!");
}
sparePartMapper.updateById(sparePart);
}
if (model.getPurchaseStatus() != null && model.getPurchaseStatus() == AuditStateEnum.CHECK_PENDING.getStatus()) {
model.setPurchaseStatus(AuditStateEnum.WAITDELIVER.getStatus()); //审核通过改成待发货
}
} else if (model.getReceiptType() == AuditStateEnum.ALLOT.getStatus()
&& model.getAuditResult() == AuditStateEnum.ALREADY_PASSED.getStatus()) {
//通过审核的调拨单
@ -472,7 +530,19 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
}
}
}
//管理员检修单审核不通过
if(model.getOrderType() != null && model.getOrderType() == SparePartStockAuditEnum.MAINTENANCE_ORDER.getStatus() &&
sparePartStockAuditParam.getAuditResult() == AuditStateEnum.NOT_PASS.getStatus()){
MaintenanceOrder maintenanceOrder = maintenanceOrderMapper.findMaintenanceOrderById(model.getOrderId());
if(maintenanceOrder != null){
maintenanceOrder.setOrderStatus(MaintenanceOrderStatusEnum.RETURNED.getStatus());
maintenanceOrder.setReturnCause(sparePartStockAuditParam.getAuditIdea());
maintenanceOrderMapper.updateById(maintenanceOrder);
}
model.setAuditResult(null); // 审核结果0=已通过1=未通过)
model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus());
}
sparePartStockAuditMapper.updateById(model);
@ -481,8 +551,8 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
/**
*
*
* @author hcy
* @param id ID
* @author hcy
*/
@Override
public void cancelAudit(Integer id) {
@ -493,12 +563,75 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
.last("limit 1"));
Assert.notNull(model, "数据不存在!");
if (model.getPurchaseStatus() != null) {
model.setPurchaseStatus(AuditStateEnum.CANCELED_AUDIT.getStatus()); //取消审核
} else {
model.setAuditState(AuditStateEnum.CANCELED.getStatus()); //取消审核
}
sparePartStockAuditMapper.updateById(model);
}
@Override
@Transactional
public void purchaseAudit(SparePartStockAuditParam sparePartStockAuditParam) {
SparePartStockAudit model = sparePartStockAuditMapper.selectOne(
new QueryWrapper<SparePartStockAudit>()
.eq("id", sparePartStockAuditParam.getId())
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在!");
// 配件领用状态 1=未通过2=待管理员审核
model.setPurchaseStatus(sparePartStockAuditParam.getPurchaseStatus());
model.setPurchaseIdea(sparePartStockAuditParam.getPurchaseIdea()); // 采购意见
//仓管员检修单审核不通过
if(model.getOrderType() != null && model.getOrderType() == SparePartStockAuditEnum.MAINTENANCE_ORDER.getStatus() &&
sparePartStockAuditParam.getPurchaseStatus() == AuditStateEnum.NOT_PASS_STATE.getStatus()){
MaintenanceOrder maintenanceOrder = maintenanceOrderMapper.findMaintenanceOrderById(model.getOrderId());
if(maintenanceOrder != null){
maintenanceOrder.setOrderStatus(MaintenanceOrderStatusEnum.RETURNED.getStatus());
maintenanceOrder.setReturnCause(sparePartStockAuditParam.getPurchaseIdea());
maintenanceOrderMapper.updateById(maintenanceOrder);
}
}
// 出库时需要判断库存数量是否大于出库数量,大于才允许出库;反之,提示备件库存数量不足
//获取待审核备件信息
List<SparePartAudit> stockAuditId = sparePartAuditMapper.selectList(
new QueryWrapper<SparePartAudit>()
.eq("stock_audit_id", model.getId())
.eq("is_delete", 0)
);
if (model.getReceiptType() == AuditStateEnum.OUT_WAREHOUSE.getStatus()
&& model.getPurchaseStatus() == AuditStateEnum.CHECK_PENDING.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()) {
model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus());
} else {
throw new OperateException("备件库存数量不足,请联系客服人员!");
}
sparePartMapper.updateById(sparePart);
}
}
sparePartStockAuditMapper.updateById(model);
}
//库存比对接口,就是每次出入库审核的时候前端都要请求,如果库存不够就不审核了
@Override
public void inventoryComparison(Integer id) {
SparePartStockAudit model = sparePartStockAuditMapper.selectOne(
new QueryWrapper<SparePartStockAudit>()
@ -578,7 +711,7 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
if (model.getReceiptType() == AuditStateEnum.OUT_WAREHOUSE.getStatus()
&& model.getPurchaseStatus() == AuditStateEnum.CHECKPENDING.getStatus()){
&& model.getPurchaseStatus() == AuditStateEnum.CHECK_PENDING.getStatus()) {
// 通过审核的出库单
//获取备件信息
for (SparePartAudit sparePartAudit : stockAuditId) {

View File

@ -56,8 +56,6 @@ public class SparePartStockAuditParam implements Serializable {
// @NotNull(message = "handlingTime参数缺失", groups = {create.class, update.class})
private Date handlingTime;
//@NotNull(message = "consignee参数缺失", groups = {create.class, update.class})
@Length(max = 255, message = "consignee参数不能超出255个字符", groups = {create.class, update.class})
private String consignee;
@ -101,4 +99,8 @@ public class SparePartStockAuditParam implements Serializable {
private Integer recipientNumber; //领用数量
private Integer purchaseStatus; //配件领用状态0=待审核1=未通过2=待管理员审核3=待发货4=待收货5=已完成)
private String purchaseIdea; //采购意见
private String orderType; // 0-检修工单 1-维修工单
private String createTimeStart; //创建时间
private String createTimeEnd; //创建时间
}

View File

@ -2,6 +2,7 @@ package com.hcy.admin.vo.order;
import com.hcy.admin.vo.client.EquipmentDetailVo;
import com.hcy.admin.vo.order.repair.MaintenanceRepairDetailVo;
import com.hcy.admin.vo.sparePartStockAudit.SparePartStockAuditDetailVo;
import com.hcy.common.entity.client.Equipment;
import lombok.Data;
@ -56,6 +57,7 @@ public class MaintenanceOrderDetailVo implements Serializable {
private String clientPhone; //客户电话
private EquipmentDetailVo equipment; //设备信息
private String familiarFaultName; //常见维修结论名称
private String faultName; //故障名称
private String creatorName; // 创建人姓名
private String receiverName; // 接单人姓名
@ -63,4 +65,5 @@ public class MaintenanceOrderDetailVo implements Serializable {
private Integer clientType; //维修类型
private List<OrderSparePartListVo> sparePartList; // 备件清单
private MaintenanceRepairDetailVo maintenanceRepair; // 返修信息
private SparePartStockAuditDetailVo sparePartStockAuditDetailVo; //备件领用申请
}

View File

@ -26,17 +26,15 @@ public class SparePartStockAuditDetailVo implements Serializable {
private Long warehouseId; // 所属仓库
private Long importWarehouse; // 调入仓库
private Long exportWarehouse; // 调出仓库
private Long supplier; // 供应商
private String responsiblePerson; // 经办人
private String handlingTime; // 经办时间
private String supplier; // 供应商
private String consignee; // 收货单位(人员)
private Integer auditState; // 审核状态0=未审核1=已审核2=已取消)
private Integer auditResult; // 审核结果0=已通过1=未通过)
private String auditTime; // 审核时间
private Date auditTime; // 审核时间
private String auditIdea; // 审核意见
private String phone; // 联系电话
private String remark; // 备注
private String sparePartAuditId; // 备件审核id
private Integer sparePartAuditId; // 备件审核id
private String warehouseName; // 所属仓库名
private String importWarehouseName; // 调入仓库名
private String exportWarehouseName; // 调出仓库名
@ -63,4 +61,5 @@ public class SparePartStockAuditDetailVo implements Serializable {
private List<SparePartAuditListVo> sparePartAuditList; //待入库的备件
private List<OrderSparePartListVo> orderSparePartListVoList; //订单配件
private String recipientAndPhone; //领用员工/联系电话
private String creator; // 创建人
}

View File

@ -26,7 +26,6 @@ public class SparePartStockAuditListVo implements Serializable {
private Long exportWarehouse; // 调出仓库
private String supplier; // 供应商
private String responsiblePerson; // 经办人
private String handlingTime; // 经办时间
private String consignee; // 收货单位(人员)
private Integer auditState; // 审核状态0=未审核1=已审核2=已取消)
private Integer auditResult; // 审核结果0=已通过1=未通过)
@ -41,7 +40,8 @@ public class SparePartStockAuditListVo implements Serializable {
private Integer outInWarehouseType; // 出入库类别0=采购入库1=库存调拨2=员工领料3=销售出库)
private String workOrderId; //工单号
private String orderId; //订单编号
private Long orderId; //订单编号
private Integer orderType; // 0-检修工单 1-维修工单
private String shippingAddress; //收货地址
private String consigner; //发货人
private String consignerPhone; //发货人联系电话

View File

@ -36,6 +36,7 @@ public class MaintenanceOrderDto implements Serializable {
private Date cancelOrderTime; // 取消订单时间
private String cancelCause; // 取消原因
private String refuseMaintenanceCause; // 拒绝维修原因
private String returnCause; //退回原因
private String remark; // 备注
private Long creatorId; // 创建人id
private Date orderAccomplishTime; // 订单完成时间

View File

@ -31,7 +31,7 @@ public class SparePartStockAudit implements Serializable {
private Integer auditState; // 审核状态0=未审核1=已审核2=已取消)
@TableField(updateStrategy = FieldStrategy.IGNORED)
private Integer auditResult; // 审核结果0=已通过1=未通过)
private Long auditTime; // 审核时间
private Date auditTime; // 审核时间
private String auditIdea; // 审核意见
private String phone; // 联系电话
private String remark; // 备注

View File

@ -14,13 +14,16 @@ public enum AuditStateEnum {
UNREVIEWED(0, "待审核"),
AUDITED(1, "已审核"),
CANCELED(2,"已取消"),
NOTPASSSTATE(1, "未通过"),
CHECKPENDING(2, "待管理员审核"),
NOT_PASS_STATE(1, "未通过"),
CHECK_PENDING(2, "待管理员审核"),
WAITDELIVER(3, "待发货"),
WAITFORRECEIVING(4, "待收货"),
DONE(5, "已完成"),
FILLINGOUT(6, "填写中"),
FILLING_OUT(6, "填写中"),
OVERDUE(7, "收货超期"),
CANCELED_AUDIT(8, "已取消"),
//审核结果0=已通过1=未通过)
NOT_PASS(1,"未通过"),

View File

@ -15,6 +15,9 @@ import java.util.List;
@Mapper
public interface SparePartAuditMapper extends IBaseMapper<SparePartAudit> {
@Select("select * from la_spare_part_audit where stock_audit_id = #{id}")
@Select("select * from la_spare_part_audit where is_delete = 0 and stock_audit_id = #{id}")
List<SparePartAudit> findSparePartAuditByStockAuditId(@Param("id") Long id);
@Select("select * from la_spare_part_audit where is_delete = 0 and id = #{id}")
SparePartAudit findSparePartAuditById(@Param("id") Long id);
}

View File

@ -24,4 +24,12 @@ public interface SparePartStockAuditMapper extends IBaseMapper<SparePartStockAud
*/
@Select("select * from la_spare_part_stock_audit where is_delete = 0 and id = #{id}")
SparePartStockAudit findSparePartStockAuditById(@Param("id") Long id);
/**
* orderId
* @param orderId id
* @return SparePartStockAudit
*/
@Select("select * from la_spare_part_stock_audit where is_delete = 0 and order_type = 0 and order_id = #{orderId}")
SparePartStockAudit findSparePartStockAuditByOrderId(@Param("orderId") Long orderId);
}

View File

@ -170,6 +170,17 @@ public class MaintenanceOrderController {
return AjaxResult.success();
}
/**
*
* @param maintenanceOrderParam
* @return Object
*/
@PostMapping("/confirmReceipt")
public Object confirmReceipt(@RequestBody MaintenanceOrderParam maintenanceOrderParam) {
iMaintenanceOrderService.confirmReceipt(maintenanceOrderParam);
return AjaxResult.success();
}
/**
*
* @return Object

View File

@ -63,7 +63,7 @@ public interface IMaintenanceOrderService {
MaintenanceOrderDetailVo getMaintenanceOrderDetail(String modelNo);
/**
* 退
*
* @param maintenanceOrderParam
*/
void serviceOfferPrice(MaintenanceOrderParam maintenanceOrderParam);
@ -98,6 +98,12 @@ public interface IMaintenanceOrderService {
*/
void oldModuleRepair(MaintenanceOrderParam maintenanceOrderParam);
/**
*
* @param maintenanceOrderParam
*/
void confirmReceipt(MaintenanceOrderParam maintenanceOrderParam);
/**
*
* @return

View File

@ -50,6 +50,11 @@ import com.hcy.front.validate.warehouse.SparePartParam;
import com.hcy.front.vo.client.EquipmentDetailVo;
import com.hcy.front.vo.client.EquipmentModelDetailVo;
import com.hcy.front.vo.order.*;
import com.hcy.front.vo.order.MaintenanceOrderDetailVo;
import com.hcy.front.vo.order.MaintenanceOrderListVo;
import com.hcy.front.vo.order.MaintenanceRepairDetailVo;
import com.hcy.front.vo.order.OrderSparePartListVo;
import com.hcy.front.vo.sparePartStockAudit.SparePartStockAuditDetailVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@ -127,7 +132,7 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService {
model.setOrderStatus(OrderStateEnum.WAITING_LIST.getStatus());
MaintenanceOrder lastmMaintenanceOrder = maintenanceOrderMapper.findLastMaintenanceOrderByTime(TimeUtil.getCurrentTimeYYYYMMDD());
model.setOrderNo(OrderUtil.getOrderNo(lastmMaintenanceOrder.getOrderNo()));
model.setOrderNo(OrderUtil.getOrderNo(lastmMaintenanceOrder == null ? "" :lastmMaintenanceOrder.getOrderNo()));
model.setCreatorId(FrontThreadLocal.getUserId().longValue());
maintenanceOrderMapper.insert(model);
@ -249,6 +254,14 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService {
vo.setMaintenanceRepair(maintenanceRepairDetailVo);
}
//设置备件领用信息
SparePartStockAudit sparePartStockAudit = sparePartStockAuditMapper.findSparePartStockAuditByOrderId(item.getId());
if(sparePartStockAudit != null){
SparePartStockAuditDetailVo sparePartStockAuditDetailVo = new SparePartStockAuditDetailVo();
BeanUtils.copyProperties(sparePartStockAudit,sparePartStockAuditDetailVo);
vo.setSparePartStockAudit(sparePartStockAuditDetailVo);
}
returnData.add(vo);
}
@ -412,6 +425,14 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService {
vo.setMaintenanceRepair(maintenanceRepairDetailVo);
}
//设置备件领用信息
SparePartStockAudit sparePartStockAudit = sparePartStockAuditMapper.findSparePartStockAuditByOrderId(maintenanceOrder.getId());
if(sparePartStockAudit != null){
SparePartStockAuditDetailVo sparePartStockAuditDetailVo = new SparePartStockAuditDetailVo();
BeanUtils.copyProperties(sparePartStockAudit,sparePartStockAuditDetailVo);
vo.setSparePartStockAudit(sparePartStockAuditDetailVo);
}
return vo;
}
@ -441,6 +462,7 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService {
//判断当前客户是全包还是半包
if(client.getClientType() == ClientStatusEnum.PLIE_POINT_ALL_WRAPPED.getStatus()){
maintenanceOrder.setOrderStatus(MaintenanceOrderStatusEnum.MAINTENANCE_ING.getStatus());
maintenanceOrder.setIsMaintain(MaintenanceOrderStatusEnum.MAINTAIN.getStatus());
}else{
maintenanceOrder.setOrderStatus(MaintenanceOrderStatusEnum.WAIT_CONFIRMATION.getStatus());
}
@ -528,11 +550,18 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService {
maintenanceOrderMapper.updateById(maintenanceOrder);
}else{
User user = userMapper.selectById(FrontThreadLocal.getUserId());
UserAddress userAddress = userAddressMapper.findUserAddressById(maintenanceOrderParam.getAddressId());
SparePartStockAudit resultSps = sparePartStockAuditMapper.findSparePartStockAuditByOrderId(maintenanceOrder.getId());
if(resultSps != null){
//已有领取记录但被拒绝则重新审核
resultSps.setPurchaseStatus(AuditStateEnum.UNREVIEWED.getStatus());
resultSps.setCreateTime(new Date());
sparePartStockAuditMapper.updateById(resultSps);
}else{
//没领过配件则创建新的领用单
SparePartStockAudit lastSparePartStockAudit = sparePartStockAuditMapper.findLastSparePartStockAuditByTime(TimeUtil.getCurrentTimeYYYYMMDD());
SparePartStockAudit sparePartStockAudit = new SparePartStockAudit();
sparePartStockAudit.setReceiptNumber(OrderUtil.getOrderNo(lastSparePartStockAudit.getReceiptNumber()));
sparePartStockAudit.setReceiptNumber(OrderUtil.getOrderNo(lastSparePartStockAudit == null ? "" :lastSparePartStockAudit.getReceiptNumber()));
sparePartStockAudit.setOrderId(maintenanceOrderParam.getId());
sparePartStockAudit.setOrderType(SparePartStockAuditEnum.MAINTENANCE_ORDER.getStatus());
sparePartStockAudit.setReceiptType(AuditStateEnum.OUT_WAREHOUSE.getStatus());
@ -540,18 +569,22 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService {
sparePartStockAudit.setConsignee(user.getUsername());
sparePartStockAudit.setPhone(user.getMobile());
sparePartStockAudit.setCreatorId(FrontThreadLocal.getUserId());
sparePartStockAudit.setPurchaseStatus(AuditStateEnum.UNREVIEWED.getStatus());
//获取检修员选择地址
if(maintenanceOrderParam.getAddressId() != null){
UserAddress userAddress = userAddressMapper.findUserAddressById(maintenanceOrderParam.getAddressId());
Map<Long, String> regionMap = regionService.getRegionMap();
sparePartStockAudit.setShippingAddress(regionMap.get(userAddress.getProvinceId()) +
regionMap.get(userAddress.getCityId()) +
regionMap.get(userAddress.getDistrictId()) +
userAddress.getAddress());
}
sparePartStockAudit.setDeliveryMethod(maintenanceOrderParam.getDeliveryMethod());
sparePartStockAudit.setRemark(maintenanceOrderParam.getRemark());
sparePartStockAuditMapper.insert(sparePartStockAudit);
}
}
}
@Override
public void fillInReceipt(MaintenanceOrderParam maintenanceOrderParam) {
@ -624,6 +657,30 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService {
}
}
@Override
@Transactional
public void confirmReceipt(MaintenanceOrderParam maintenanceOrderParam) {
MaintenanceOrder maintenanceOrder = maintenanceOrderMapper.findMaintenanceOrderById(maintenanceOrderParam.getId());
Assert.notNull(maintenanceOrder, "数据不存在");
SparePartStockAudit resultSps = sparePartStockAuditMapper.findSparePartStockAuditByOrderId(maintenanceOrder.getId());
if(resultSps != null){
if(resultSps.getPurchaseStatus() == AuditStateEnum.WAITFORRECEIVING.getStatus()){
//确认收货后可进行填写回单操作
maintenanceOrder.setIsConfirmReceipt(MaintenanceOrderStatusEnum.CONFIRM_RECEIPT.getStatus());
maintenanceOrderMapper.updateById(maintenanceOrder);
//将对应的配件领用订单改成已完成
resultSps.setPurchaseStatus(AuditStateEnum.DONE.getStatus());
sparePartStockAuditMapper.updateById(resultSps);
}else{
throw new OperateException("当前订单状态无法进行确认收货");
}
}else{
throw new OperateException("配件领用订单未生成,不可进行确认收货");
}
}
/**
*
*

View File

@ -3,7 +3,9 @@ package com.hcy.front.vo.order;
import com.hcy.common.entity.client.Equipment;
import com.hcy.common.entity.client.EquipmentModel;
import com.hcy.common.entity.order.repair.MaintenanceRepair;
import com.hcy.common.entity.sparePartStockAudit.SparePartStockAudit;
import com.hcy.front.vo.client.EquipmentModelDetailVo;
import com.hcy.front.vo.sparePartStockAudit.SparePartStockAuditDetailVo;
import lombok.Data;
import java.io.Serializable;
@ -63,6 +65,7 @@ public class MaintenanceOrderDetailVo implements Serializable {
private List<OrderSparePartListVo> sparePartList; // 备件清单
private EquipmentModelDetailVo equipmentModel; //设备模块信息
private MaintenanceRepairDetailVo maintenanceRepair; // 返修信息
private SparePartStockAuditDetailVo sparePartStockAudit; //备件领用信息
private String completeImg; // 完工照片
}

View File

@ -1,6 +1,7 @@
package com.hcy.front.vo.order;
import com.hcy.common.entity.order.repair.MaintenanceRepair;
import com.hcy.front.vo.sparePartStockAudit.SparePartStockAuditDetailVo;
import lombok.Data;
import java.io.Serializable;
@ -60,6 +61,7 @@ public class MaintenanceOrderListVo implements Serializable {
private String creatorName; // 创建人姓名
private String receiverName; // 接单人姓名
private MaintenanceRepairDetailVo maintenanceRepair; // 返修信息
private SparePartStockAuditDetailVo sparePartStockAudit; //备件领用信息
private Integer pendingOrderCount; // 待接单数量
private Integer checkingCount; // 检测中数量

View File

@ -0,0 +1,59 @@
package com.hcy.front.vo.sparePartStockAudit;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* SparePartStockAuditVo
*/
@Data
public class SparePartStockAuditDetailVo implements Serializable {
private static final long serialVersionUID = 1L;
private Long id; // 主键id
private String receiptNumber; // 单据编号
private Long orderId; //订单编
private Integer receiptType; // 单据类型0=入库单1=出库单2=仓库调拨单)
private Long warehouseId; // 所属仓库
private Long importWarehouse; // 调入仓库
private Long exportWarehouse; // 调出仓库
private String supplier; // 供应商
private String consignee; // 收货单位(人员)
private Integer auditState; // 审核状态0=未审核1=已审核2=已取消)
private Integer auditResult; // 审核结果0=已通过1=未通过)
private Date auditTime; // 审核时间
private String auditIdea; // 审核意见
private String phone; // 联系电话
private String remark; // 备注
private Integer sparePartAuditId; // 备件审核id
private String warehouseName; // 所属仓库名
private String importWarehouseName; // 调入仓库名
private String exportWarehouseName; // 调出仓库名
private Integer outInWarehouseType; // 出入库类别0=采购入库1=库存调拨2=员工领料3=销售出库)
private String supplierPhone; // 供应商/电话
private String consigneePhone; // 收货单位(人员)/电话
private String workOrderId; //工单号
private String shippingAddress; //收货地址
private String consigner; //发货人
private String consignerPhone; //发货人联系电话
private String shipAddress; //发货地址
private String logisticsCompany; //物流公司
private String trackingNumber; //物流编号
private Integer deliveryMethod; //配送方式0=物流快递1=上门取件2=送货上门)
private BigDecimal salesPrice; //销售价
private String recipient; //领用员工
private String recipientPhone; //领用员工联系电话
private Integer recipientNumber; //领用数量
private Integer purchaseStatus; //配件领用状态0=待审核1=未通过2=待管理员审核3=待发货4=待收货5=已完成)
private Date createTime; // 创建时间
private Integer orderType; // 0-检修工单 1-维修工单
private String workOrderNo; //工单号
private String recipientAndPhone; //领用员工/联系电话
private String creator; // 创建人
}

View File

@ -0,0 +1,57 @@
package com.hcy.front.vo.sparePartStockAudit;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* SparePartStockAuditVo
*/
@Data
public class SparePartStockAuditListVo implements Serializable {
private static final long serialVersionUID = 1L;
private Long id; // 主键id
private String receiptNumber; // 单据编号
private Integer receiptType; // 单据类型0=入库单1=出库单2=仓库调拨单)
private Long warehouseId; // 所属仓库
private Long importWarehouse; // 调入仓库
private Long exportWarehouse; // 调出仓库
private String supplier; // 供应商
private String responsiblePerson; // 经办人
private String consignee; // 收货单位(人员)
private Integer auditState; // 审核状态0=未审核1=已审核2=已取消)
private Integer auditResult; // 审核结果0=已通过1=未通过)
private Date auditTime; // 审核时间
private Date createTime; // 创建时间
private Date updateTime; // 更新时间
private String sparePartAuditId; // 备件审核id
private String consigneePhone; // 收货单位(人员)/电话
private String warehouseName; // 所属仓库名
private String importWarehouseName; // 调入仓库名
private String exportWarehouseName; // 调出仓库名
private Integer 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 Integer deliveryMethod; //配送方式0=物流快递1=上门取件2=送货上门)
private BigDecimal salesPrice; //销售价
private String recipient; //领用员工
private String recipientPhone; //领用员工联系电话
private Integer recipientNumber; //领用数量
private Integer purchaseStatus; //配件领用状态0=待审核1=未通过2=待管理员审核3=待发货4=待收货5=已完成)
private String workOrderNo; //工单号
private String recipientAndPhone; //领用员工/联系电话
private String supplierPhone; // 供应商/电话
private String creator; // 创建人
}