【admin】优化#1、配件采购暂存草稿 2、优化配件采购发货、收货功能

dev
renfan 2024-08-09 20:56:34 +08:00
parent e811bb95ec
commit 376e5eaf9e
9 changed files with 306 additions and 28 deletions

View File

@ -95,4 +95,58 @@ public class sparePartPurchaseController {
return AjaxResult.success();
}
/**
*
* @param sparePartStockAuditParam
* @return
*/
@Log(title = "备件采购审核")
@PostMapping("/purchaseAudit")
public Object purchaseAudit(@RequestBody SparePartStockAuditParam sparePartStockAuditParam) {
iSparePartPurchaseService.purchaseAudit(sparePartStockAuditParam);
return AjaxResult.success();
}
/**
*
*
* @author hcy
* @param pageParam
* @param params
* @return Object
*/
@GetMapping("/purchaseOrderlist")
public Object purchaseOrderlist(@Validated PageParam pageParam,
@RequestParam Map<String, String> params) {
PageResult<SparePartPurchaseListVo> list = iSparePartPurchaseService.purchaseOrderlist(pageParam, params);
return AjaxResult.success(list);
}
/**
*
*
* @author hcy
* @param sparePartStockAuditParam
* @return Object
*/
@Log(title = "备件物流发送")
@PostMapping("/logisticsSending")
public Object logisticsSending(@RequestBody SparePartStockAuditParam sparePartStockAuditParam) {
iSparePartPurchaseService.logisticsSending(sparePartStockAuditParam);
return AjaxResult.success();
}
/**
*
*
* @author hcy
* @param sparePartStockAuditParam
* @return Object
*/
@Log(title = "备件采购收货")
@PostMapping("/receiving")
public Object receiving(@RequestBody SparePartStockAuditParam sparePartStockAuditParam) {
iSparePartPurchaseService.receiving(sparePartStockAuditParam);
return AjaxResult.success();
}
}

View File

@ -251,6 +251,7 @@ public class SettingDictTypeServiceImpl implements ISettingDictTypeService {
new QueryWrapper<DictData>()
.eq("type_id", dictType.getId())
.eq("is_delete", 0)
.orderByDesc("sort")
);
//获取字典数据
List<DictDataVo> listVo = new ArrayList<>();

View File

@ -5,6 +5,7 @@ import com.hcy.admin.validate.sparePartStockAudit.SparePartStockAuditParam;
import com.hcy.admin.vo.sparePartPurchase.SparePartPurchaseListVo;
import com.hcy.admin.vo.sparePartReceive.SparePartReceiveListVo;
import com.hcy.common.core.PageResult;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Map;
@ -56,4 +57,31 @@ public interface ISparePartPurchaseService {
*/
void del(Integer id);
/**
*
*
* @param pageParam
* @param params
* @return PageResult<SparePartPurchaseListVo>
* @author hcy
*/
PageResult<SparePartPurchaseListVo> purchaseOrderlist(PageParam pageParam, Map<String, String> params);
/**
*
* @param sparePartStockAuditParam
*/
void purchaseAudit(SparePartStockAuditParam sparePartStockAuditParam);
/**
*
* @param sparePartStockAuditParam
*/
void logisticsSending(SparePartStockAuditParam sparePartStockAuditParam);
/**
*
* @param sparePartStockAuditParam
*/
void receiving(SparePartStockAuditParam sparePartStockAuditParam);
}

View File

@ -16,6 +16,7 @@ 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.exception.OperateException;
import com.hcy.common.mapper.SparePartAudit.SparePartAuditMapper;
import com.hcy.common.mapper.sparePart.SparePartMapper;
import com.hcy.common.mapper.sparePartStockAudit.SparePartStockAuditMapper;
@ -131,18 +132,20 @@ public class SparePartPurchaseServiceImpl implements ISparePartPurchaseService {
.eq("id", id)
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在");
SparePartPurchaseListVo vo = new SparePartPurchaseListVo();
BeanUtils.copyProperties(model, vo);
vo.setCreateTime(TimeUtil.timestampToDate(model.getCreateTime()));
Warehouse warehouseName = warehouseMapper.selectOne(
new QueryWrapper<Warehouse>()
.eq("id", model.getWarehouseId())
.eq("is_delete", 0)
.last("limit 1"));
vo.setWarehouseName(warehouseName.getWarehouseName());
if(warehouseName != null){
vo.setWarehouseName(warehouseName.getWarehouseName());
}
//获取待审核备件信息
List<SparePartAudit> stockAuditId = sparePartAuditMapper.selectList(
@ -172,7 +175,10 @@ public class SparePartPurchaseServiceImpl implements ISparePartPurchaseService {
.eq("id", sparePart.getWarehouseId())
.eq("is_delete", 0)
.last("limit 1"));
sparePartAudit1.setWarehouseName(warehouse.getWarehouseName());
if(warehouse != null){
sparePartAudit1.setWarehouseName(warehouse.getWarehouseName());
}
listVo.add(sparePartAudit1);
}
vo.setSparePartAuditList(listVo);
@ -206,6 +212,7 @@ public class SparePartPurchaseServiceImpl implements ISparePartPurchaseService {
model.setPhone(sparePartStockAuditParam.getPhone()); // 联系电话
model.setReceiptNumber(generateOrderNumber()); // 单据编号
model.setShippingAddress(sparePartStockAuditParam.getShippingAddress()); //收货地址
model.setRemark(sparePartStockAuditParam.getRemark()); //备注
model.setConsigner(sparePartStockAuditParam.getConsigner()); //发货人
model.setConsignerPhone(sparePartStockAuditParam.getConsignerPhone()); //发货人联系电话
@ -213,7 +220,14 @@ public class SparePartPurchaseServiceImpl implements ISparePartPurchaseService {
model.setLogisticsCompany(sparePartStockAuditParam.getLogisticsCompany()); //物流公司
model.setTrackingNumber(sparePartStockAuditParam.getTrackingNumber()); //物流编号
model.setDeliveryMethod(sparePartStockAuditParam.getDeliveryMethod()); //配送方式0=物流快递1=上门取件2=送货上门)
model.setPurchaseStatus(AuditStateEnum.UNREVIEWED.getStatus()); //状态 未审核
//配件采购还有个暂存草稿的功能,操作后这个单还是填写中状态,不是未审核
System.out.println(sparePartStockAuditParam.getPurchaseStatus());
if(sparePartStockAuditParam.getPurchaseStatus() != null){
model.setPurchaseStatus(sparePartStockAuditParam.getPurchaseStatus());
}else {
model.setPurchaseStatus(AuditStateEnum.UNREVIEWED.getStatus()); //状态 未审核
}
// 获取当前的用户
@ -222,8 +236,6 @@ public class SparePartPurchaseServiceImpl implements ISparePartPurchaseService {
model.setConsignee((String) username); // 收货单位(人员)
model.setHandlingTime(System.currentTimeMillis() / 1000); //经办时间
// 审核状态
model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus());
//单据类型0=入库单1=出库单2=仓库调拨单)
model.setReceiptType(AuditStateEnum.OUTWAREHOUSE.getStatus());
@ -267,6 +279,7 @@ public class SparePartPurchaseServiceImpl implements ISparePartPurchaseService {
model.setPhone(sparePartStockAuditParam.getPhone()); // 联系电话
model.setReceiptNumber(generateOrderNumber()); // 单据编号
model.setShippingAddress(sparePartStockAuditParam.getShippingAddress()); //收货地址
model.setRemark(sparePartStockAuditParam.getRemark()); //备注
model.setConsigner(sparePartStockAuditParam.getConsigner()); //发货人
model.setConsignerPhone(sparePartStockAuditParam.getConsignerPhone()); //发货人联系电话
@ -274,15 +287,17 @@ public class SparePartPurchaseServiceImpl implements ISparePartPurchaseService {
model.setLogisticsCompany(sparePartStockAuditParam.getLogisticsCompany()); //物流公司
model.setTrackingNumber(sparePartStockAuditParam.getTrackingNumber()); //物流编号
model.setDeliveryMethod(sparePartStockAuditParam.getDeliveryMethod()); //配送方式0=物流快递1=上门取件2=送货上门)
model.setPurchaseStatus(AuditStateEnum.UNREVIEWED.getStatus()); //状态 未审核
//配件采购还有个暂存草稿的功能,操作后这个单还是填写中状态,不是未审核
if(sparePartStockAuditParam.getPurchaseStatus() != null){
model.setPurchaseStatus(sparePartStockAuditParam.getPurchaseStatus());
}else {
model.setPurchaseStatus(AuditStateEnum.UNREVIEWED.getStatus()); //状态 未审核
}
// 获取当前的用户
Object username = AdminThreadLocal.get("username");
model.setResponsiblePerson((String) username); // 经办人
model.setConsignee((String) username); // 收货单位(人员)
// 审核状态
model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus());
//单据类型0=入库单1=出库单2=仓库调拨单)
model.setReceiptType(AuditStateEnum.OUTWAREHOUSE.getStatus());
@ -321,16 +336,7 @@ public class SparePartPurchaseServiceImpl implements ISparePartPurchaseService {
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);
@ -358,6 +364,170 @@ public class SparePartPurchaseServiceImpl implements ISparePartPurchaseService {
sparePartStockAuditMapper.updateById(model);
}
/**
*
*
* @param pageParam
* @param params
* @return PageResult<SparePartPurchaseListVo>
* @author hcy
*/
@Override
public PageResult<SparePartPurchaseListVo> purchaseOrderlist(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.ne("purchase_status", 6);
queryWrapper.orderByDesc("id");
sparePartStockAuditMapper.setSearch(queryWrapper, params, new String[]{
"like:receiptNumber@receipt_number:str",
"=:deliveryMethod@delivery_method:int",
"like:responsiblePerson@responsible_person:str",
"=:purchaseStatus@purchase_status:int",
"datetime:createTimeStart-createTimeEnd@create_time:str",
});
IPage<SparePartStockAudit> iPage = sparePartStockAuditMapper.selectPage(new Page<>(page, limit), queryWrapper);
List<SparePartPurchaseListVo> list = new LinkedList<>();
for(SparePartStockAudit item : iPage.getRecords()) {
SparePartPurchaseListVo vo = new SparePartPurchaseListVo();
BeanUtils.copyProperties(item, vo);
vo.setCreateTime(TimeUtil.timestampToDate(item.getCreateTime()));
vo.setUpdateTime(TimeUtil.timestampToDate(item.getUpdateTime()));
vo.setHandlingTime(TimeUtil.timestampToDate(item.getHandlingTime())); //经办时间
vo.setResponsiblePersonPhone(vo.getResponsiblePerson() + "/" + vo.getPhone()); //采购人/联系电话
//获取待审核备件信息
List<SparePartAudit> stockAuditId = sparePartAuditMapper.selectList(
new QueryWrapper<SparePartAudit>()
.eq("stock_audit_id", item.getId())
.eq("is_delete", 0)
);
//获取备件信息
List<SparePartAuditListVo> 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"));
SparePartAuditListVo sparePartAudit1 = new SparePartAuditListVo();
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);
list.add(vo);
}
return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
}
/**
*
*
* @param sparePartStockAuditParam
*/
@Override
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, "数据不存在!");
model.setPurchaseStatus(sparePartStockAuditParam.getPurchaseStatus()); // 配件领用状态 1=未通过2=待管理员审核
model.setPurchaseIdea(sparePartStockAuditParam.getPurchaseIdea()); // 采购意见
// 出库时需要判断库存数量是否大于出库数量,大于才允许出库;反之,提示备件库存数量不足
//获取待审核备件信息
List<SparePartAudit> stockAuditId = sparePartAuditMapper.selectList(
new QueryWrapper<SparePartAudit>()
.eq("stock_audit_id", model.getId())
.eq("is_delete", 0)
);
if(model.getReceiptType() == AuditStateEnum.OUTWAREHOUSE.getStatus()
&& model.getPurchaseStatus() == AuditStateEnum.CHECKPENDING.getStatus()){
model.setAuditState(AuditStateEnum.UNREVIEWED.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()){
sparePart.setQuantity(sparePart.getQuantity() - sparePartAudit.getCount());
}else{
throw new OperateException("备件库存数量不足,请联系客服人员!");
}
sparePartMapper.updateById(sparePart);
}
}
sparePartStockAuditMapper.updateById(model);
}
/**
*
*
* @param sparePartStockAuditParam
*/
@Override
public void logisticsSending(SparePartStockAuditParam sparePartStockAuditParam) {
SparePartStockAudit model = sparePartStockAuditMapper.selectOne(
new QueryWrapper<SparePartStockAudit>()
.eq("id", sparePartStockAuditParam.getId())
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在!");
model.setConsigner(sparePartStockAuditParam.getConsigner()); //发货人
model.setConsignerPhone(sparePartStockAuditParam.getConsignerPhone()); //发货人联系电话
model.setShipAddress(sparePartStockAuditParam.getShipAddress()); //发货地址
model.setLogisticsCompany(sparePartStockAuditParam.getLogisticsCompany()); //物流公司
model.setTrackingNumber(sparePartStockAuditParam.getTrackingNumber()); //物流编号
model.setPurchaseStatus(AuditStateEnum.WAITFORRECEIVING.getStatus()); // 采购状态 4=待收货
sparePartStockAuditMapper.updateById(model);
}
/**
*
*
* @param sparePartStockAuditParam
*/
@Override
public void receiving(SparePartStockAuditParam sparePartStockAuditParam) {
SparePartStockAudit model = sparePartStockAuditMapper.selectOne(
new QueryWrapper<SparePartStockAudit>()
.eq("id", sparePartStockAuditParam.getId())
.eq("is_delete", 0)
.last("limit 1"));
Assert.notNull(model, "数据不存在!");
model.setPurchaseStatus(AuditStateEnum.DONE.getStatus()); // 采购状态 5=已完成
sparePartStockAuditMapper.updateById(model);
}
/**
* +6

View File

@ -79,6 +79,7 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
IPage<SparePartStockAudit> iPage = sparePartStockAuditMapper.selectPage(new Page<>(page, limit), queryWrapper);
List<SparePartStockAuditListVo> list = new LinkedList<>();
long total = 0;//总查询数
for(SparePartStockAudit item : iPage.getRecords()) {
SparePartStockAuditListVo vo = new SparePartStockAuditListVo();
BeanUtils.copyProperties(item, vo);
@ -112,10 +113,22 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
if(exportWarehouseName != null){
vo.setExportWarehouseName(exportWarehouseName.getWarehouseName());
}
list.add(vo);
//采购单状态是待管理员审核才能显示
if(item.getPurchaseStatus() != null && item.getPurchaseStatus() == AuditStateEnum.UNREVIEWED.getStatus()){
System.out.println("采购单状态是未审核不显示");
}else if (item.getPurchaseStatus() != null && item.getPurchaseStatus() == AuditStateEnum.NOTPASSSTATE.getStatus()){
System.out.println("采购单状态是审核未通过不显示");
}else if(item.getPurchaseStatus() != null && item.getPurchaseStatus() == AuditStateEnum.FILLINGOUT.getStatus()){
System.out.println("采购单状态是填写中不显示");
}else {
list.add(vo);
total = total + 1;
}
}
return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list);
return PageResult.iPageHandle(total, iPage.getCurrent(), iPage.getSize(), list);
}
/**
@ -339,6 +352,9 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
// 出库时需要判断库存数量是否大于出库数量,大于才允许出库;反之,提示备件库存数量不足
if(sparePart.getQuantity() >= sparePartAudit.getCount()){
sparePart.setQuantity(sparePart.getQuantity() - sparePartAudit.getCount());
if(model.getPurchaseStatus() == AuditStateEnum.CHECKPENDING.getStatus()){
model.setPurchaseStatus(AuditStateEnum.WAITDELIVER.getStatus()); //审核通过改成待发货
}
}else{
throw new OperateException("备件库存数量不足,请联系客服人员!");
}

View File

@ -100,4 +100,5 @@ public class SparePartStockAuditParam implements Serializable {
private String recipientPhone; //领用员工联系电话
private Integer recipientNumber; //领用数量
private Integer purchaseStatus; //配件领用状态0=待审核1=未通过2=待管理员审核3=待发货4=待收货5=已完成)
private String purchaseIdea; //采购意见
}

View File

@ -16,6 +16,7 @@ public class SparePartPurchaseListVo implements Serializable {
private Long id; // 主键id
private String receiptNumber; // 单据编号
private Integer receiptType; // 单据类型0=入库单1=出库单2=仓库调拨单)
private Long warehouseId; // 所属仓库
private String consignee; // 收货单位(人员)
private String phone; // 联系电话
@ -32,9 +33,10 @@ public class SparePartPurchaseListVo implements Serializable {
private List<SparePartAuditListVo> sparePartAuditList; //待入库的备件
private String warehouseName; // 所属仓库名
private Long outInWarehouseType; // 出入库类别0=采购入库1=库存调拨2=员工领料3=销售出库)
private String remark; // 备注
private String orderId; //订单编号
private Integer purchaseStatus; //配件状态0=待审核1=未通过2=待管理员审核3=待发货4=待收货5=已完成
private Integer purchaseStatus; //配件状态0=待审核1=未通过2=待管理员审核3=待发货4=待收货5=已完成6=填写中7=收货超期
private String shippingAddress; //收货地址
private String consigner; //发货人
private String consignerPhone; //发货人联系电话
@ -45,4 +47,6 @@ public class SparePartPurchaseListVo implements Serializable {
private String responsiblePersonPhone; //采购人/联系电话
private String createTimeStart;
private String createTimeEnd;
private String purchaseIdea; //采购意见
}

View File

@ -54,5 +54,7 @@ public class SparePartStockAudit implements Serializable {
private String recipient; //领用员工
private String recipientPhone; //领用员工联系电话
private Integer recipientNumber; //领用数量
private Integer purchaseStatus; //配件领用状态0=待审核1=未通过2=待管理员审核3=待发货4=待收货5=已完成)
private Integer purchaseStatus; //配件领用状态0=待审核1=未通过2=待管理员审核3=待发货4=待收货5=已完成6=填写中7=收货超期)
private String purchaseIdea; //采购意见
}

View File

@ -11,7 +11,7 @@ import java.util.Map;
*/
public enum AuditStateEnum {
//配件领用状态0=待审核1=未通过2=待管理员审核3=待发货4=待收货5=已完成
//配件领用状态0=待审核1=未通过2=待管理员审核3=待发货4=待收货5=已完成6=填写中7=收货超期
UNREVIEWED(0, "待审核"),
AUDITED(1, "已审核"),
CANCELED(2,"已取消"),
@ -20,8 +20,10 @@ public enum AuditStateEnum {
WAITDELIVER(3, "待发货"),
WAITFORRECEIVING(4, "待收货"),
DONE(5, "已完成"),
FILLINGOUT(6, "填写中"),
OVERDUE(7, "收货超期"),
//审核结果0=已通过1=未通过)
//审核结果0=已通过1=未通过)
NOTPASS(1,"未通过"),
ALREADYPASSED(0, "已通过"),