继续对销售出库单进行完善与处理
一、列表显示状态
目前先给出库表单两种状态,未审核与审核通过状态,前端通过下面调整
{
title:'状态',
align:"center",
dataIndex: 'status',
customRender:function (text) {
if(text==1){
return "未审核";
}else if(text==2){
return "审核通过";
}else{
return text;
}
}
},
二、对按钮显示进行处理,已经审核的表单只显示详情
<span slot="action" slot-scope="text, record">
<a @click="handleDetail(record)">详情</a>
<a-divider type="vertical" />
<a v-if="record.status != 2" @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" />
<a v-if="record.status != 2" @click="handleApprove(record)">审核</a>
<a-divider type="vertical" />
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a v-if="record.status != 2">删除</a>
</a-popconfirm>
</span>
三、对批量删除进行处理,有审核的单据不能进行删除,对NbcioListMixin里的下面函数修改如下
batchDel: function () {
if(!this.url.deleteBatch){
this.$message.error("请设置url.deleteBatch属性!")
return
}
if (this.selectedRowKeys.length <= 0) {
this.$message.warning('请选择一条记录!');
return;
} else {
var ids = "";
for (var a = 0; a < this.selectedRowKeys.length; a++) {
ids += this.selectedRowKeys[a] + ",";
if(this.selectionRows[a].hasOwnProperty('status') && this.selectionRows[a].status === 2) {
this.$message.warning(`第${a+1}行单据已经审核,不能删除!`)
return
}
}
四、因为审核单据界面与编辑单据界面使用相同的窗口,所以需要做一些逻辑处理
1、首先ErpSaleOutModal文件进行调整如下
审核与编辑分开处理,同时增加两个变量okText和approve,增加一个handleApprove函数
<template>
<j-modal v-if = "approve"
:title="title"
:width="1200"
:okText="okText"
:visible="visible"
:maskClosable="false"
switchFullscreen
@ok="handleApprove"
@cancel="handleCancel">
<erp-sale-out-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"/>
</j-modal>
<j-modal v-else
:title="title"
:width="1200"
:visible="visible"
:maskClosable="false"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel">
<erp-sale-out-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"/>
</j-modal>
</template>
<script>
import ErpSaleOutForm from './ErpSaleOutForm'
export default {
name: 'ErpSaleOutModal',
components: {
ErpSaleOutForm
},
data() {
return {
title:'',
width:800,
visible: false,
disableSubmit: false,
okText: "确定",
approve: false,//审核
}
},
methods:{
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.handleOk();
},
handleApprove () {
this.$refs.realForm.handleApprove();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>
<style scoped>
</style>
2、在ErpSaleOutForm增加审核的url如下:
url: {
add: "/sale/erpSaleOut/add",
edit: "/sale/erpSaleOut/edit",
approvePass:"/sale/erpSaleOut/approvePass",
3、NbcioListMixin里的handleApprove加入下面代码
handleApprove:function(record){
if(record.status === 2) {
this.$message.warning("单据已经审核,不能再次审核!")
return
}
this.$refs.modalForm.approve=true;
this.$refs.modalForm.edit(record);
this.$refs.modalForm.title="审核详情";
this.$refs.modalForm.okText="审核通过"
this.$refs.modalForm.disableSubmit = true;
},
同时对增加,新建处理需要设置this.$refs.modalForm.approve=false;
4、同时在NbcioTableModelMixin下面增加下面代码
/** 审核通过按钮点击事件 */
handleApprove() {
let url = this.url.approvePass, method = 'post'
console.log("handleApprove this.model.id=",this.model.id)
this.confirmLoading = true
httpAction(url, this.model.id, method).then((res) => {
if (res.success) {
this.$message.success(res.message)
this.$emit('ok')
this.close()
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.confirmLoading = false
})
},
五、后端调用审核通过代码
/**
* 审核
*
* @param id
* @return
* @throws Exception
*/
@AutoLog(value = "销售出库单-审核通过")
@ApiOperation(value="销售出库单-审核通过", notes="销售出库单-审核通过")
@PostMapping(value = "/approvePass")
public Result<?> approvePass(@RequestBody String id) throws Exception {
return erpSaleOutService.approvePass(id);
}
@Override
@Transactional(rollbackFor = Exception.class)
public Result<?> approvePass(String id) throws Exception {
ErpSaleOut erpSaleOut = erpSaleOutMapper.selectById(id);
if (erpSaleOut == null) {
return Result.error("销售出库单不存在!");
}
if (erpSaleOut.getStatus() == 2 ) {
return Result.error("销售出库单已审核通过,不能再次审核!");
}
SysUser loginUser = iErpThirdService.getLoginUser();
LambdaUpdateWrapper<ErpSaleOut> updateOrderWrapper = Wrappers.lambdaUpdate(ErpSaleOut.class)
.set(ErpSaleOut::getApproveBy, loginUser.getUsername())
.set(ErpSaleOut::getApproveTime, LocalDateTime.now())
.eq(ErpSaleOut::getId, erpSaleOut.getId());
erpSaleOut.setStatus(2); //审核通过标志 2代表通过
if(erpSaleOutMapper.update(erpSaleOut, updateOrderWrapper) != 1) {
return Result.error("销售出库单信息已过期,请刷新重试!");
}
Wrapper<ErpSaleOutDetail> queryDetailWrapper = Wrappers.lambdaQuery(ErpSaleOutDetail.class)
.eq(ErpSaleOutDetail::getSheetId, erpSaleOut.getId())
.orderByAsc(ErpSaleOutDetail::getOrderNo);
List<ErpSaleOutDetail> details = erpSaleOutDetailService.list(queryDetailWrapper);
for (ErpSaleOutDetail detail : details) {
ErpGoodsStockVo erpGoodsStockVo = new ErpGoodsStockVo();
erpGoodsStockVo.setScId(erpSaleOut.getScId());
erpGoodsStockVo.setGoodsId(detail.getGoodsId());
erpGoodsStockVo.setStockNum(detail.getOrderNum());
erpGoodsStockVo.setTaxAmount(NumberUtil.mul(detail.getTaxPrice(), detail.getOrderNum()));
erpGoodsStockVo.setUnTaxAmount(NumberUtil.mul(NumberUtil.calcUnTaxPrice(detail.getTaxPrice(), detail.getTaxRate()), detail.getOrderNum()));
erpGoodsStockVo.setTaxPrice(detail.getTaxPrice());
erpGoodsStockVo.setUnTaxPrice(NumberUtil.calcUnTaxPrice(detail.getTaxPrice(), detail.getTaxRate()));
erpGoodsStockVo.setBizCode(erpSaleOut.getCode());
erpGoodsStockVo.setBizDetailId(detail.getId());
erpGoodsStockVo.setBizId(erpSaleOut.getId());
erpGoodsStockVo.setBizType(GoodsStockType.SALE.getCode());
erpGoodsStockService.outStock(erpGoodsStockVo);
}
return Result.OK("审核通过完成");
}
@Override
@Transactional(rollbackFor = Exception.class)
public void outStock(ErpGoodsStockVo erpGoodsStockVo) throws Exception {
Wrapper<ErpGoodsStock> queryWrapper = Wrappers.lambdaQuery(ErpGoodsStock.class)
.eq(ErpGoodsStock::getGoodsId, erpGoodsStockVo.getGoodsId()).eq(ErpGoodsStock::getScId, erpGoodsStockVo.getScId());
ErpGoodsStock outerpGoodsStock = erpGoodsStockMapper.selectOne(queryWrapper);
ErpGoodsStockLog erpGoodsStockLog = new ErpGoodsStockLog();
if(outerpGoodsStock == null) {
//第一次出库,新增记录
outerpGoodsStock = new ErpGoodsStock();
outerpGoodsStock.setScId(erpGoodsStockVo.getScId());
outerpGoodsStock.setGoodsId(erpGoodsStockVo.getGoodsId());
outerpGoodsStock.setStockNum(0-erpGoodsStockVo.getStockNum());
outerpGoodsStock.setTaxPrice(erpGoodsStockVo.getTaxPrice());
outerpGoodsStock.setTaxAmount(NumberUtil.sub(BigDecimal.ZERO, erpGoodsStockVo.getTaxAmount()));
outerpGoodsStock.setUnTaxPrice(erpGoodsStockVo.getUnTaxPrice());
outerpGoodsStock.setUnTaxAmount(NumberUtil.sub(BigDecimal.ZERO, erpGoodsStockVo.getUnTaxAmount()));
erpGoodsStockMapper.insert(outerpGoodsStock);
erpGoodsStockLog.setOriStockNum(0);
erpGoodsStockLog.setOriUnTaxPrice(BigDecimal.ZERO);
erpGoodsStockLog.setOriTaxPrice(BigDecimal.ZERO);
}
else {//已有库存数量金额更新
LambdaUpdateWrapper<ErpGoodsStock> updateWrapper = Wrappers.lambdaUpdate(ErpGoodsStock.class)
.eq(ErpGoodsStock::getScId, erpGoodsStockVo.getScId())
.eq(ErpGoodsStock::getGoodsId, erpGoodsStockVo.getGoodsId());
erpGoodsStockLog.setOriStockNum(outerpGoodsStock.getStockNum());
erpGoodsStockLog.setOriUnTaxPrice(outerpGoodsStock.getUnTaxPrice());
erpGoodsStockLog.setOriTaxPrice(outerpGoodsStock.getTaxPrice());
outerpGoodsStock.setScId(erpGoodsStockVo.getScId());
outerpGoodsStock.setGoodsId(erpGoodsStockVo.getGoodsId());
outerpGoodsStock.setStockNum(outerpGoodsStock.getStockNum() - erpGoodsStockVo.getStockNum());
if(outerpGoodsStock.getStockNum() == 0) {
outerpGoodsStock.setTaxPrice(NumberUtil.div(NumberUtil.add(erpGoodsStockVo.getTaxPrice(),outerpGoodsStock.getTaxPrice()),2));
outerpGoodsStock.setUnTaxPrice(NumberUtil.div(NumberUtil.add(erpGoodsStockVo.getUnTaxPrice(),outerpGoodsStock.getUnTaxPrice()),2));
outerpGoodsStock.setTaxAmount(BigDecimal.ZERO);
outerpGoodsStock.setUnTaxAmount(BigDecimal.ZERO);
}
else {
outerpGoodsStock.setTaxAmount(NumberUtil.sub(erpGoodsStockVo.getTaxAmount(),outerpGoodsStock.getTaxAmount()));
outerpGoodsStock.setUnTaxAmount(NumberUtil.sub(erpGoodsStockVo.getUnTaxAmount(),outerpGoodsStock.getUnTaxAmount()));
outerpGoodsStock.setTaxPrice(NumberUtil.div(outerpGoodsStock.getTaxAmount(), outerpGoodsStock.getStockNum()));
outerpGoodsStock.setUnTaxPrice(NumberUtil.div(outerpGoodsStock.getUnTaxAmount(), outerpGoodsStock.getStockNum()));
}
if(erpGoodsStockMapper.update(outerpGoodsStock, updateWrapper) != 1) {
throw new Exception("出库更新信息已过期,请刷新重试!");
}
}
erpGoodsStockLog.setGoodsId(erpGoodsStockVo.getGoodsId());
erpGoodsStockLog.setScId(erpGoodsStockVo.getScId());
erpGoodsStockLog.setStockNum(erpGoodsStockVo.getStockNum());
erpGoodsStockLog.setTaxAmount(erpGoodsStockVo.getTaxAmount());
erpGoodsStockLog.setUnTaxAmount(erpGoodsStockVo.getUnTaxAmount());
erpGoodsStockLog.setCurStockNum(outerpGoodsStock.getStockNum());
erpGoodsStockLog.setStockNum(outerpGoodsStock.getStockNum());
erpGoodsStockLog.setCurTaxPrice(outerpGoodsStock.getTaxPrice());
erpGoodsStockLog.setCurUnTaxPrice(outerpGoodsStock.getUnTaxPrice());
erpGoodsStockLog.setBizCode(erpGoodsStockVo.getBizCode());
erpGoodsStockLog.setBizDetailId(erpGoodsStockVo.getBizDetailId());
erpGoodsStockLog.setBizId(erpGoodsStockVo.getBizId());
erpGoodsStockLog.setBizType(erpGoodsStockVo.getBizType());
erpGoodsStockLogService.save(erpGoodsStockLog);
}
六、效果图: