feat():采购协同确认到货

master
jiyufei 2 months ago
parent 9e33e985c4
commit e99c3c4e9f

@ -49,33 +49,47 @@ public interface YysMaterialProcurementOrderService extends IService<YysMaterial
* @return
*/
List<YysMaterialProcurementOrderEntity> queryList(YysMaterialProcurementOrderPagination queryBody);
/**
* -App
*
* @param queryNo
* @return
* @param request
*/
Void noGoods(YysMaterialProcurementOrderRequest queryNo);
void finish(YysMaterialProcurementOrderRequest request);
/**
* -App
*
* @param queryDelay
* @return
* @param request
*/
List<YysMaterialProcurementOrderEntity> delayGoods(YysMaterialProcurementOrderRequest queryDelay);
void delay(YysMaterialProcurementOrderRequest request);
/**
* -App
*
* @param querySend
* @return
* @param request
*/
List<YysMaterialProcurementOrderEntity> sendGoods(YysMaterialProcurementOrderRequest querySend);
String shipments(YysMaterialProcurementOrderRequest request);
/**
* -App
*
* @param queryTc
* @param request
*/
String toProd(YysMaterialProcurementOrderRequest request);
/**
*
*
* @param orderNumber
*/
void takeOrder(String orderNumber);
/**
*
*
* @param request
* @return
*/
List<YysMaterialProcurementOrderEntity> operation(YysMaterialProcurementOrderRequest queryTc);
String confirmQuantity(YysMaterialProcurementOrderRequest request);
}

@ -1,50 +1,39 @@
package jnpf.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import jnpf.entity.*;
import jnpf.mapper.YysMaterialProcurementOrderMapper;
import jnpf.service.*;
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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jnpf.base.UserInfo;
import jnpf.base.model.ColumnDataModel;
import jnpf.database.model.superQuery.SuperJsonModel;
import jnpf.entity.YysMaterialProcurementOrderEntity;
import jnpf.mapper.YysMaterialProcurementOrderMapper;
import jnpf.model.QueryModel;
import jnpf.model.yysmaterialprocurementorder.*;
import jnpf.permission.entity.UserEntity;
import jnpf.service.YysMaterialProcurementItemService;
import jnpf.service.YysMaterialProcurementOrderService;
import jnpf.util.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import cn.hutool.core.util.ObjectUtil;
import jnpf.util.GeneraterSwapUtil;
import javax.annotation.Resource;
import java.lang.reflect.Field;
import com.baomidou.mybatisplus.annotation.TableField;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicInteger;
import jnpf.model.QueryModel;
import java.util.stream.Collectors;
import jnpf.base.model.ColumnDataModel;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import jnpf.database.model.superQuery.SuperJsonModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import jnpf.util.*;
import java.util.*;
import jnpf.base.UserInfo;
import jnpf.permission.entity.UserEntity;
import javax.annotation.Resource;
/**
* YysMaterialProcurementOrder
* V3.5
@ -258,6 +247,7 @@ public class YysMaterialProcurementOrderServiceImpl extends ServiceImpl<YysMater
List<String> finalAllRuleIDlist = allRuleIDlist;
yysMaterialProcurementOrderQueryWrapper.lambda().and(t -> t.in(YysMaterialProcurementOrderEntity::getId, finalAllRuleIDlist));
}
yysMaterialProcurementOrderQueryWrapper.lambda().ne(YysMaterialProcurementOrderEntity::getOrderStatus, ProcurementOrderStatusEnum.TO_PRODUCTION.getCode());
//假删除标志
yysMaterialProcurementOrderQueryWrapper.lambda().isNull(YysMaterialProcurementOrderEntity::getDeleteMark);
@ -388,6 +378,7 @@ public class YysMaterialProcurementOrderServiceImpl extends ServiceImpl<YysMater
entity.setOrderNumber("PO" + currentDate + number);
entity.setCreatorTime(DateUtil.getNowDate());
entity.setCreatorUserId(userProvider.get().getUserId());
entity.setOrderStatus(ProcurementOrderStatusEnum.NO_ORDERS_TAKEN.getCode());
return entity;
}).collect(Collectors.toList());
boolean result = this.saveBatch(collect);
@ -412,29 +403,153 @@ public class YysMaterialProcurementOrderServiceImpl extends ServiceImpl<YysMater
wrapper.eq(YysMaterialProcurementOrderEntity::getOrderNumber, queryBody.getOrderNumber());
}
wrapper.eq(YysMaterialProcurementOrderEntity::getOrderStatus, queryBody.getOrderStatus());
wrapper.ne(YysMaterialProcurementOrderEntity::getOrderStatus, ProcurementOrderStatusEnum.TO_PRODUCTION.getCode());
wrapper.isNull(YysMaterialProcurementOrderEntity::getDeleteMark);
return this.list(wrapper);
}
public Void noGoods(YysMaterialProcurementOrderRequest queryNo) {
log.info("点击缺货结单-app");
@Override
public void finish(YysMaterialProcurementOrderRequest request) {
log.info("app-缺货结单,采购订单信息:{}", request);
if (ObjectUtil.isNull(request)) {
return;
}
LambdaQueryWrapper<YysMaterialProcurementOrderEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(YysMaterialProcurementOrderEntity::getOrderNumber, request.getOrderNumber());
YysMaterialProcurementOrderEntity entity = this.getOne(wrapper);
entity.setOrderStatus(ProcurementOrderStatusEnum.OUT_OF_STOCK_STATEMENTS.getCode());
this.updateById(entity);
}
return null;
@Override
public void delay(YysMaterialProcurementOrderRequest request) {
log.info("app-延期交货,采购订单信息:{}", request);
if (ObjectUtil.isNull(request)) {
return;
}
LambdaQueryWrapper<YysMaterialProcurementOrderEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(YysMaterialProcurementOrderEntity::getOrderNumber, request.getOrderNumber());
YysMaterialProcurementOrderEntity entity = this.getOne(wrapper);
if (ObjectUtil.isNull(entity)) {
return;
}
entity.setOrderStatus(ProcurementOrderStatusEnum.PARTIAL_SHIPMENT.getCode());
entity.setDelayedDeliveryDate(request.getExpectedSendTime());
entity.setDelayReason(request.getExtensionReason());
this.updateById(entity);
}
@Override
public List<YysMaterialProcurementOrderEntity> delayGoods(YysMaterialProcurementOrderRequest queryDelay) {
return null;
public String shipments(YysMaterialProcurementOrderRequest request) {
log.info("app-发货,采购订单信息:{}", request);
if (ObjectUtil.isNull(request) || ObjectUtil.isNull(request.getOrderNumber())) {
return "发货失败,订单号为空";
}
LambdaQueryWrapper<YysMaterialProcurementOrderEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(YysMaterialProcurementOrderEntity::getOrderNumber, request.getOrderNumber());
YysMaterialProcurementOrderEntity entity = this.getOne(wrapper);
if (ObjectUtil.isNull(entity)) {
return "发货失败,订单不存在";
}
BigDecimal totalSendQuantity = entity.getTotalSendQuantity() != null ? entity.getTotalSendQuantity() : BigDecimal.ZERO;
BigDecimal newTotalSendQuantity = totalSendQuantity.add(request.getSendNumber());
int flag = 0;
if (newTotalSendQuantity.compareTo(entity.getOrderQuantity()) == 0) {
entity.setOrderStatus(ProcurementOrderStatusEnum.ALL_SHIPPED.getCode());
flag = 1;
} else {
entity.setOrderStatus(ProcurementOrderStatusEnum.PARTIAL_SHIPMENT.getCode());
}
entity.setTotalSendQuantity(newTotalSendQuantity);
boolean result = this.updateById(entity);
if (result) {
//部分发货
if (flag == 0) {
CompletableFuture.runAsync(() -> {
String mainId = RandomUtil.uuId();
entity.setId(mainId);
entity.setOrderStatus(ProcurementOrderStatusEnum.SHIPPED.getCode());
entity.setBatchDeliveryDate(request.getSendTime());
entity.setBatchShipmentQuantity(request.getSendNumber());
//获取采购订单号最新编码号
int newOrderNum = this.getNewOrderNum(entity.getOrderNumber());
entity.setOrderNumber(entity.getOrderNumber() + "-" + newOrderNum);
this.save(entity);
});
}
return "发货成功";
}
return "发货失败";
}
@Override
public List<YysMaterialProcurementOrderEntity> sendGoods(YysMaterialProcurementOrderRequest querySend) {
return null;
public String toProd(YysMaterialProcurementOrderRequest request) {
log.info("app-投产,采购订单信息:{}", request);
if (ObjectUtil.isNull(request)) {
return "填写信息有误";
}
LambdaQueryWrapper<YysMaterialProcurementOrderEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(YysMaterialProcurementOrderEntity::getOrderNumber, request.getOrderNumber());
YysMaterialProcurementOrderEntity entity = this.getOne(wrapper);
if (ObjectUtil.isNull(entity)) {
return "投产失败,订单不存在";
}
entity.setProductionDate(request.getProductionTime());
if (ObjectUtil.isNull(entity.getTotalProductionQuantity())) {
entity.setTotalProductionQuantity(request.getProductionNumber());
} else {
entity.setTotalProductionQuantity(request.getProductionNumber().add(entity.getTotalProductionQuantity()));
}
boolean result = this.updateById(entity);
if (result) {
CompletableFuture.runAsync(() -> {
//添加投产记录一条 列表中不展示
String mainId = RandomUtil.uuId();
entity.setId(mainId);
entity.setTotalProductionQuantity(request.getProductionNumber());
entity.setOrderStatus(ProcurementOrderStatusEnum.TO_PRODUCTION.getCode());
//获取采购订单号最新编码号
int newOrderNum = this.getNewOrderNum(entity.getOrderNumber());
entity.setOrderNumber(entity.getOrderNumber() + "-" + newOrderNum);
this.save(entity);
});
return "投产成功";
}
return "投产失败";
}
@Override
public void takeOrder(String orderNumber) {
log.info("app-接单,采购订单号:{}", orderNumber);
LambdaQueryWrapper<YysMaterialProcurementOrderEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(YysMaterialProcurementOrderEntity::getOrderNumber, orderNumber);
YysMaterialProcurementOrderEntity entity = this.getOne(wrapper);
if (ObjectUtil.isNull(entity)) {
return;
}
entity.setOrderStatus(ProcurementOrderStatusEnum.ORDERS_TAKEN.getCode());
this.updateById(entity);
}
@Override
public List<YysMaterialProcurementOrderEntity> operation(YysMaterialProcurementOrderRequest queryTc) {
return null;
public String confirmQuantity(YysMaterialProcurementOrderRequest request) {
log.info("确认到货,采购订单号:{}", request.getOrderNumber());
if (ObjectUtil.isNull(request)) {
return "填写信息有误";
}
LambdaQueryWrapper<YysMaterialProcurementOrderEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(YysMaterialProcurementOrderEntity::getOrderNumber, request.getOrderNumber());
YysMaterialProcurementOrderEntity entity = this.getOne(wrapper);
if (ObjectUtil.isNull(entity)) {
return "数据不存在";
}
entity.setConfirmQuantityReceived(request.getConfirmQuantity());
entity.setOrderStatus(ProcurementOrderStatusEnum.ARRIVED.getCode());
boolean result = this.updateById(entity);
if (result) {
return "确认到货成功";
}
return "确认到货失败";
}
private int getNewNum() {
@ -458,4 +573,15 @@ public class YysMaterialProcurementOrderServiceImpl extends ServiceImpl<YysMater
String number = max.getOrderNumber().replace("PO", "").replace(currentDate, "");
return Integer.parseInt(number) + 1;
}
private int getNewOrderNum(String orderNumber) {
LambdaQueryWrapper<YysMaterialProcurementOrderEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.like(YysMaterialProcurementOrderEntity::getOrderNumber, orderNumber);
wrapper.isNull(YysMaterialProcurementOrderEntity::getDeleteMark);
List<YysMaterialProcurementOrderEntity> list = this.list(wrapper);
if (CollectionUtils.isEmpty(list) || list.size() == 1) {
return 1;
}
return list.size();
}
}

@ -14,6 +14,7 @@ import jnpf.util.*;
import jnpf.model.yysmaterialprocurementorder.*;
import lombok.extern.slf4j.Slf4j;
import oracle.jdbc.proxy.annotation.Post;
import org.apache.ibatis.type.NStringTypeHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@ -404,27 +405,57 @@ public class YysMaterialProcurementOrderController {
}
return ActionResult.fail(result);
}
@Operation(summary = "点击投产-App")
@PostMapping("/operation")
public ActionResult operation(@RequestBody YysMaterialProcurementOrderRequest queryTc) {
return ActionResult.success(yysMaterialProcurementOrderService.operation(queryTc));
@Operation(summary = "投产-App")
@PostMapping("/toProd")
public ActionResult toProd(@RequestBody YysMaterialProcurementOrderRequest request) {
String result = yysMaterialProcurementOrderService.toProd(request);
if (result.contains("成功")) {
return ActionResult.success(result);
}
return ActionResult.fail(result);
}
@Operation(summary = "点击发货-App")
@PostMapping("/sendGoods")
public ActionResult sendGoods(@RequestBody YysMaterialProcurementOrderRequest querySend) {
return ActionResult.success(yysMaterialProcurementOrderService.sendGoods(querySend));
@Operation(summary = "发货-App")
@PostMapping("/shipments")
public ActionResult shipments(@RequestBody YysMaterialProcurementOrderRequest request) {
String result = yysMaterialProcurementOrderService.shipments(request);
if (result.contains("成功")) {
return ActionResult.success(result);
}
return ActionResult.fail(result);
}
@Operation(summary = "点击延期发货-App")
@PostMapping("/delayGoods")
public ActionResult delayGoods(@RequestBody YysMaterialProcurementOrderRequest queryDelay) {
return ActionResult.success(yysMaterialProcurementOrderService.delayGoods(queryDelay));
@PostMapping("/delay")
public ActionResult delay(@RequestBody YysMaterialProcurementOrderRequest request) {
yysMaterialProcurementOrderService.delay(request);
return ActionResult.success();
}
@Operation(summary = "缺货结单-App")
@PostMapping("/noGoods")
public ActionResult noGoods(@RequestBody YysMaterialProcurementOrderRequest queryNo) {
return ActionResult.success(yysMaterialProcurementOrderService.noGoods(queryNo));
@PostMapping("/finish")
public ActionResult finish(@RequestBody YysMaterialProcurementOrderRequest request) {
yysMaterialProcurementOrderService.finish(request);
return ActionResult.success();
}
@Operation(summary = "接单-App")
@GetMapping("/takeOrder/{orderNumber}")
public ActionResult takeOrder(@PathVariable String orderNumber) {
yysMaterialProcurementOrderService.takeOrder(orderNumber);
return ActionResult.success();
}
@Operation(summary = "确认到货")
@PostMapping("/confirmQuantity")
public ActionResult confirmQuantity(@RequestBody YysMaterialProcurementOrderRequest request) {
String result = yysMaterialProcurementOrderService.confirmQuantity(request);
if (result.contains("成功")) {
return ActionResult.success(result);
}
return ActionResult.fail(result);
}
@Operation(summary = "采购协同列表-App")
@PostMapping("/list")

@ -45,6 +45,8 @@ public class YysMaterialProcurementOrderEntity {
private BigDecimal totalProductionQuantity;
@TableField(value = "TOTAL_SEND_QUANTITY" , updateStrategy = FieldStrategy.IGNORED)
private BigDecimal totalSendQuantity;
@TableField(value = "PRODUCTION_DATE" , updateStrategy = FieldStrategy.IGNORED)
private Date productionDate;
@TableField(value = "REQUEST_DELIVERY_DATE" , updateStrategy = FieldStrategy.IGNORED)
private Date requestDeliveryDate;
@TableField(value = "DELAYED_DELIVERY_DATE" , updateStrategy = FieldStrategy.IGNORED)

@ -0,0 +1,54 @@
package jnpf.model.yysmaterialprocurementorder;
import lombok.Getter;
@Getter
public enum ProcurementOrderStatusEnum {
/**
*
*/
NO_ORDERS_TAKEN("1", "未接单"),
/**
*
*/
ORDERS_TAKEN("2", "已接单"),
/**
*
*/
OUT_OF_STOCK_STATEMENTS("3", "缺货结单"),
/**
*
*/
PARTIAL_SHIPMENT("4", "部分发货"),
/**
*
*/
SHIPPED("6", "已发货"),
/**
*
*/
ARRIVED("7", "已到货"),
/**
*
*/
ALL_SHIPPED("5", "全部发货"),
/**
* ()
*/
TO_PRODUCTION("8", "投产(部分投产)");
private final String code;
private final String msg;
ProcurementOrderStatusEnum(String code, String msg) {
this.code = code;
this.msg = msg;
}
}

@ -1,8 +1,6 @@
package jnpf.model.yysmaterialprocurementorder;
import cn.hutool.core.date.DateTime;
import lombok.Data;
import net.sf.jsqlparser.expression.DateTimeLiteralExpression;
import java.math.BigDecimal;
import java.util.Date;
@ -13,14 +11,36 @@ import java.util.Date;
*/
@Data
public class YysMaterialProcurementOrderRequest {
private String id;
private Date tcTime;
private BigDecimal tcNumber;
private DateTime sendTime;
/**
*
*/
private String orderNumber;
/**
*
*/
private Date productionTime;
/**
*
*/
private BigDecimal productionNumber;
/**
*
*/
private Date sendTime;
/**
*
*/
private BigDecimal sendNumber;
private Date requiredTime;
private Date expectedTime;
private String reason;
/**
*
*/
private Date expectedSendTime;
/**
*
*/
private String extensionReason;
/**
*
*/
private BigDecimal confirmQuantity;
}

@ -0,0 +1,54 @@
<template>
<el-dialog title="确认到货" :visible.sync="showDialog" width="30%" @close="handleDialogClose">
<el-form ref="form" :model="form" label-width="120px">
<el-form-item label="本次发货数量">
<el-input v-model="form.batchShipmentQuantity" disabled></el-input>
</el-form-item>
<el-form-item label="确认到货数量">
<el-input v-model="form.confirmQuantity" placeholder="请输入确认到货数量"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="showDialog = false"> </el-button>
<el-button type="primary" @click="handleSubmit"> </el-button>
</span>
</el-dialog>
</template>
<script>
export default {
props: {
showDialog: {
type: Boolean,
default: false,
},
selectedRows: {
type: Array,
default: () => []
},
onSubmit: {
type: Function,
default: () => { },
},
},
data() {
return {
form: {
confirmQuantity: '',
},
};
},
methods: {
handleDialogClose() {
this.form.confirmQuantity = ''; //
this.$emit('update:showDialog', false); // showDialog
},
handleSubmit() {
this.onSubmit({
confirmQuantity: this.form.confirmQuantity,
});
this.handleDialogClose(); //
},
},
};
</script>

@ -136,6 +136,8 @@
<template slot-scope="scope">
<el-button type="text" @click="addOrUpdateHandle(scope.row)" v-has="'btn_edit'">
</el-button>
<el-button type="text" v-show="scope.row.orderStatus == '已发货'" @click="showDialog = true" v-has="'btn_edit'">
</el-button>
<el-button type="text" class="JNPF-table-delBtn" v-has="'btn_remove'" @click="handleDel(scope.row.id)">
</el-button>
<el-button type="text" v-has="'btn_detail'" @click="goDetail(scope.row.id)">
@ -154,6 +156,7 @@
<Detail v-if="detailVisible" ref="Detail" @refresh="detailVisible = false" />
<ToFormDetail v-if="toFormDetailVisible" ref="toFormDetail" @close="toFormDetailVisible = false" />
<SuperQuery v-if="superQueryVisible" ref="SuperQuery" :columnOptions="superQueryJson" @superQuery="superQuery" />
<DialogComponent :showDialog.sync="showDialog" @update:showDialog="showDialog = $event" :onSubmit="handleSubmit" />
</div>
</template>
@ -173,9 +176,10 @@ import columnList from "./columnList";
import { thousandsFormat } from "@/components/Generator/utils/index";
import SuperQuery from "@/components/SuperQuery";
import superQueryJson from "./superQueryJson";
import DialogComponent from "@/views/yys/yysmaterialprocurementorder/DialogComponent.vue";
export default {
components: {
DialogComponent,
JNPFForm,
Detail,
ExportBox,
@ -193,7 +197,7 @@ export default {
mergeList: [],
exportList: [],
columnList,
showDialog: false,
showAll: false,
superQueryVisible: false,
superQueryJson,
@ -252,6 +256,13 @@ export default {
this.queryData = JSON.parse(JSON.stringify(this.query));
},
methods: {
confirmQuantity(row, isDetail) {
let id = row ? row.id : "";
this.auditVisible = true;
this.$nextTick(() => {
this.$refs.Audit.init(id, isDetail, this.list);
});
},
toDetail(defaultValue, modelId) {
if (!defaultValue) return;
getConfigData(modelId).then(res => {
@ -528,7 +539,31 @@ export default {
colseFlow(isrRefresh) {
this.flowVisible = false;
if (isrRefresh) this.reset();
}
},
handleSubmit(rows) {
console.log(rows,"selectedRowsselectedRows");
if (rows.confirmQuantity == null || rows.confirmQuantity == '') {
this.$message.error('请填写确认到货数量!');
return;
}
let _query = {
orderNumber: this.da,
confirmQuantity: rows.confirmQuantity,
};
request({
url: `/api/example/YysMaterialProcurementOrder/confirmQuantity`,
method: 'post',
data: _query
}).then(res => {
this.$message({
message: res.msg,
type: 'success',
duration: 1000,
})
this.initData()
})
},
}
};
</script>

Loading…
Cancel
Save