This commit is contained in:
cun-nan 2024-10-31 14:48:14 +08:00
parent 807e73cf02
commit 1b09dab46f
9 changed files with 343 additions and 295 deletions

View File

@ -1,37 +1,42 @@
<template>
<div class="app-container">
<el-card >
<div slot="header" class="clearfix">
<i class="el-icon-back" @click="goToAbout">返回 | </i>
<!-- <el-link icon="el-icon-edit" :underline="false" @click="goToAbout">编辑</el-link>-->
<span> 盘点详情</span>
</div>
<div class="card-change-1-search">
<!-- <div slot="header" class="clearfix">-->
<!-- <i class="el-icon-back" @click="goToAbout">返回 | </i>-->
<!-- <span> 盘点详情</span>-->
<!-- </div>-->
<div class="" style="height: 110px; display: flex; justify-content: space-between;">
<div style="height: 100%; display: flex; justify-content: space-between;">
<div style="height: 100%; width: 70%; display: flex; justify-content: space-between;">
<div style="height: 100%; width: 70%; display: flex; justify-content: space-between;align-items: center">
<div class="box">
<span style="font-size: 26px;color: #0DC291;font-weight: bold">{{ inventoryForm.productQuantity }}</span>
<span style="display: flex">
<div style="background-color: #0DC291;width: 10px;height: 10px;border-radius: 50%;margin-top: 6px;margin-right: 10px"></div>
商品数量</span>
<div
style="background-color: #0DC291;width: 10px;height: 10px;border-radius: 50%;margin-top: 6px;margin-right: 10px"></div>
商品种类</span>
</div>
<div class="box">
<span style="font-size: 26px;color: #00CAFF;font-weight: bold">{{inventoryForm.inventoryQuantity}}</span>
<span
style="font-size: 26px;color: #00CAFF;font-weight: bold">{{ inventoryForm.inventoryQuantity }}</span>
<span style="display: flex">
<div style="background-color: #00CAFF;width: 10px;height: 10px;border-radius: 50%;margin-top: 6px;margin-right: 10px"></div>
盘点数量</span>
<div
style="background-color: #00CAFF;width: 10px;height: 10px;border-radius: 50%;margin-top: 6px;margin-right: 10px"></div>
盘点正常商品量</span>
</div>
<div class="box">
<span style="font-size: 26px;color: #F44522;font-weight: bold" >{{inventoryForm.inventoryDiscrepancy}}</span>
<span
style="font-size: 26px;color: #F44522;font-weight: bold">{{ inventoryForm.inventoryDiscrepancy }}</span>
<span style="display: flex">
<div style="background-color: #F44522;width: 10px;height: 10px;border-radius: 50%;margin-top: 6px;margin-right: 10px"></div>
库存差异</span>
<div
style="background-color: #F44522;width: 10px;height: 10px;border-radius: 50%;margin-top: 6px;margin-right: 10px"></div>
盘点货损数量</span>
</div>
<div class="box">
<span style="font-size: 26px;color: #FA6400;font-weight: bold">{{ inventoryForm.profitLossAmount }}</span>
<span style="display: flex">
<div style="background-color: #FA6400;width: 10px;height: 10px;border-radius: 50%;margin-top: 6px;margin-right: 10px"></div>
盈亏总额
<div
style="background-color: #FA6400;width: 10px;height: 10px;border-radius: 50%;margin-top: 6px;margin-right: 10px"></div>
盈亏金额
</span>
</div>
</div>
@ -75,87 +80,93 @@
</div>
</div>
<div style="height: 100%; width: 30%; display: flex; align-items: center; justify-content: flex-end;">
<el-button type="primary" v-if="state=='await'" :disabled="saveFlag" @click="save()">保存</el-button>
<el-button type="success" v-if="state=='await'" :disabled="auditFlag" @click="audit()">生成差异单</el-button>
<el-button type="success" v-if="state=='ysh'" :disabled="storageFlag" @click="storage">退货处理库存</el-button>
<el-button type="warning" v-if="state !='await' || state=='ysh'" :disabled="voidFlag" @click="abolition()">作废</el-button>
<el-button type="warning" v-if="state !='await'" @click="exportExcel()">导出</el-button>
<el-button type="primary" @click="cancelPurchase" v-if="state=='qrts'">关闭</el-button>
<el-button @click="cancelPurchase" v-else>取消</el-button>
<el-button type="success" v-if="state=='await'" :disabled="saveFlag" @click="save()">保存</el-button>
<el-button type="primary" v-if="state=='await'" :disabled="auditFlag" @click="audit()">
保存并审核<!--生成差异单-->
</el-button>
<el-button type="danger" v-if="state=='ysh'" :disabled="voidFlag" @click="abolition()">作废</el-button>
<el-button type="success" v-if="state=='ysh'" @click="exportExcel()">导出</el-button>
<el-button type="primary" v-if="state=='ysh'" :disabled="storageFlag" @click="storage">退货处理库存
</el-button>
</div>
</div>
</el-card>
</div>
<el-card style="margin-top: 20px" >
<div class="card-change-1-1">
<el-row :gutter="10" class="mb8">
<el-col :span="1.5" style="text-align: right; float: right">
<el-button
v-if="!numberInput"
type="primary"
icon="el-icon-plus"
@click="commodityAdd"
>添加盘点</el-button>
>添加盘点商品
</el-button>
</el-col>
<!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
</el-row>
<el-table ref="tables"
<el-table ref="tables" border
v-loading="loading"
:data="detailsList"
:default-sort="defaultSort">
<el-table-column label="序号" align="center" prop="commodityName"/>
<el-table-column label="序号" align="center" type="index"/>
<el-table-column label="商品名称" align="center" prop="commodityName"/>
<el-table-column label="商品编码" align="center" prop="goodsNo"/>
<el-table-column label="品类名称" align="center" prop="cvsGoodName"/>
<el-table-column label="条形码" align="center" prop="goodsNo"/>
<el-table-column label="进货量" align="center" prop="purchase">
<template slot-scope="scope">
{{ scope.row.purchase ? scope.row.purchase : '--' }}
</template>
</el-table-column>
<el-table-column label="商品规格" align="center" prop="goodsSpecs"/>
<el-table-column label="单位" align="center" prop="unit"/>
<el-table-column label="销售量" align="center" prop="unit">
<el-table-column label="便利店销售" align="center" prop="goodsSales">
<el-table-column label="便利店销售量" align="center" prop="goodsSales">
<template slot-scope="scope">
{{ scope.row.goodsSales ? scope.row.goodsSales : '0' }}
</template>
</el-table-column>
<el-table-column label="积分兑换" align="center" prop="inventorySales">
<el-table-column label="积分兑换" align="center" prop="inventorySales">
<template slot-scope="scope">
{{ scope.row.inventorySales ? scope.row.inventorySales : '0' }}
</template>
</el-table-column>
<el-table-column label="兑换卷兑换" align="center" prop="inventorySales">
<el-table-column label="兑换券兑换量" align="center" prop="inventorySales">
<template slot-scope="scope">
{{ scope.row.exchangeSales ? scope.row.exchangeSales : '0' }}
</template>
</el-table-column>
</el-table-column>
<el-table-column label="当前进价" align="center" prop="purchasePrice"/>
<el-table-column label="库存数量" align="center" prop="stock"/>
<el-table-column label="成本价" align="center" prop="purchasePrice"/>
<el-table-column label="当前库存" align="center" prop="stock"/>
<el-table-column label="盘点数量" align="center" prop="unit">
<el-table-column label="正常商品" align="center" prop="purchasePrice">
<el-table-column label="盘点正常商品量" align="center" prop="purchasePrice">
<template slot-scope="scope">
<el-input-number :disabled="numberInput" v-model="scope.row.inventoryQuantity" @change="change(scope.row,2)" controls-position="right" :precision="0" :min="0" :max="100000000" :step="1" style="max-width: 100%"></el-input-number>
<el-input-number :disabled="numberInput" v-model="scope.row.inventoryQuantity" @change="change(scope.row,2)"
controls-position="right" :precision="0" :min="0" :max="100000000" :step="1"
style="max-width: 100%"></el-input-number>
</template>
</el-table-column>
<el-table-column label="货损量" align="center" prop="damageQuantity">
<el-table-column label="盘点货损量" align="center" prop="damageQuantity">
<template slot-scope="scope">
<el-input-number :disabled="numberInput" v-model="scope.row.damageQuantity" @change="change(scope.row,2)" controls-position="right" :precision="0" :min="0" :max="100000000" :step="1" style="max-width: 100%"></el-input-number>
<el-input-number :disabled="numberInput" v-model="scope.row.damageQuantity" @change="change(scope.row,2)"
controls-position="right" :precision="0" :min="0" :max="100000000" :step="1"
style="max-width: 100%"></el-input-number>
</template>
</el-table-column>
<el-table-column label="总盘点量" align="center" prop="inventoryQuantity">
<el-table-column label="总盘点量" align="center" prop="inventoryQuantity">
<template slot-scope="scope">
{{ scope.row.inventoryQuantity + scope.row.damageQuantity }}
</template>
</el-table-column>
</el-table-column>
<el-table-column label="库存差异" align="center" prop="inventoryDiscrepancy"/>
<el-table-column label="盈亏金额" align="center" prop="profitLossAmount"/>
@ -167,7 +178,8 @@
type="text"
icon="el-icon-edit"
@click="commodityDel(scope.row)"
>删除</el-button>
>删除
</el-button>
</template>
<!-- v-hasPermi="['']"-->
@ -181,45 +193,37 @@
<!-- :limit.sync="queryParams.pageSize"-->
<!-- @pagination="getList"-->
<!-- />-->
</el-card>
</div>
<el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body :close-on-click-modal="false">
<el-container>
<el-header style="">
<el-form ref="tankForm" :model="commodityForm" label-width="80px">
<el-row :gutter="24">
<el-col :span="6">
<el-form-item label="商品分类">
<el-form ref="tankForm" :model="commodityForm" label-width="20px" :inline="true">
<el-form-item label="">
<el-select
v-model="commodityForm.cvsGoodId"
placeholder="全部"
placeholder="请选择品类名称"
clearable
>
<el-option v-for="item in cvsGoodList" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="供应商" prop="supplierId">
<el-form-item label="" prop="supplierId">
<el-select
v-model="commodityForm.supplierId"
placeholder="全部"
placeholder="请选择供应商名称"
clearable
>
<el-option v-for="item in supplierList" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="详细信息">
<el-input v-model="commodityForm.remark" placeholder="商品名称,拼音码,条形码等信息" ></el-input>
<el-form-item label="">
<el-input v-model="commodityForm.remark" placeholder="请输入商品名称,拼音码,条形码等信息"></el-input>
</el-form-item>
<el-form-item style="float: right;margin-right: 0px">
<el-button type="primary" icon="el-icon-search" @click="inquire()">搜索</el-button>
</el-form-item>
</el-col>
<el-col :span="4">
<el-button type="primary" @click="inquire()">查询</el-button>
</el-col>
</el-row>
</el-form>
</el-header>
<el-main>
@ -235,8 +239,8 @@
</el-table-column>
<el-table-column label="商品名称" align="center" prop="name"/>
<el-table-column label="商品编码" align="center" prop="goodsNo"/>
<el-table-column label="类名称" prop="cvsGoodId" align="center">
<!-- <el-table-column label="商品编码" align="center" prop="goodsNo"/>-->
<el-table-column label="类名称" prop="cvsGoodId" align="center">
<template slot-scope="scope">
<span>{{ getName(cvsGoodList, scope.row.cvsGoodId) }}</span>
</template>
@ -247,15 +251,20 @@
<span>{{ getName(supplierList, scope.row.supplierId) }}</span>
</template>
</el-table-column>
<el-table-column label="商品规格" align="center" prop="goodsSpecs">
<template slot-scope="scope">
<div>{{scope.row.goodsSpecs || '-'}}</div>
</template>
</el-table-column>
<el-table-column label="单位" align="center" prop="unit"/>
<el-table-column label="当前库存" align="center" prop="stock"/>
</el-table>
</el-main>
</el-container>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="addCommodity"> </el-button>
<div slot="footer" class="dialog-footer" style="text-align: center">
<el-button @click="cancel"> </el-button>
<el-button type="primary" @click="addCommodity"> </el-button>
</div>
</el-dialog>
@ -266,19 +275,18 @@
import {getAuditPremApi} from "@/api/oilConfig/staff";
import {BigNumber} from "bignumber.js";
import {listLJGoods} from "@/api/convenienceStore/ljgoods";
import {getName,parseTime} from "../../../utils/fuint";
import {selectParentById, selectTree} from "@/api/convenienceStore/goods";
import {parseTime} from "../../../utils/fuint";
import {selectTree} from "@/api/convenienceStore/goods";
import {listSupplier} from "@/api/convenienceStore/supplier";
import {
getInventoryDetailsPageApi,
auditInventoryApi,
batchProcessingApi,
delDetailsApi,
editInventoryApi,
addInventoryApi,
batchProcessingApi,
auditInventoryApi,
storageInventoryApi,
abolitionInventoryApi,
exportExcelApi, getSalesByMtInventoryApi
exportExcelApi,
getInventoryDetailsPageApi,
getSalesByMtInventoryApi,
storageInventoryApi
} from "@/api/convenienceStore/inventory";
@ -325,7 +333,6 @@ export default {
inventoryId: this.$props.PinventoryId,
//
cvsGoodList: [],
//
@ -341,7 +348,7 @@ export default {
multipleSelection: [], //
//
title:'选择商品',
title: '添加盘点商品',
//
showSearch: true,
disableInput: false, //
@ -349,7 +356,7 @@ export default {
open: false,
//
total: 0,
numberInput: false,
//
queryParams: {
// supplierId: '',
@ -407,6 +414,10 @@ export default {
this.JudgmentButton();
},
methods: {
//
cancelPurchase() {
this.$router.back()
},
parseTime,
getDetailsList() {
let this_ = this
@ -458,9 +469,6 @@ export default {
});
},
//
inquire() {
@ -620,7 +628,6 @@ export default {
},
//
async JudgmentButton() {
let judgmentPermissions1 = await this.judgmentPermissions("盘点商品审核");
@ -789,7 +796,6 @@ export default {
}
/* .underlined-text {
/* padding-bottom: 10px; /* 通过增加下边距来调整文本与下划线的间距 */
/* text-decoration: underline; 添加下划线 */
@ -817,8 +823,9 @@ export default {
/* text-decoration: underline; */
/* vertical-align: middle; */
}
.box {
height: 100%;
height: 80%;
width: 212px;
margin-right: 10px;
background: #FFFFFF;

View File

@ -119,6 +119,7 @@
<el-table-column label="单位" align="center" prop="unit"/>
<el-table-column label="零售价" align="center" prop="retailPrice"/>
<el-table-column label="当前库存" align="center" prop="stock"/>
<el-table-column label="货损量" align="center" prop="cargoDamage"/>
<el-table-column label="当前成本价" align="center" prop="buyingPrice"/>
<el-table-column label="成本总金额" align="center" prop="costAmount"/>
<el-table-column label="状态" align="center" prop="status">

View File

@ -1,5 +1,6 @@
package com.fuint.business.convenienceSore.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fuint.business.convenienceSore.entity.MtInventoryDetails;
@ -20,7 +21,7 @@ import java.util.List;
* @author makejava
* @since 2023-10-28 14:45:43
*/
public interface MtInventoryDetailsMapper {
public interface MtInventoryDetailsMapper extends BaseMapper<MtInventoryDetails> {
/**
* 通过ID查询单条数据

View File

@ -132,11 +132,14 @@
mg.goods_no goodsNo,
mg.cvs_good_id cvsGoodId,
mg.unit unit,
mg.goods_specs goodsSpecs,
mg.supplier_id supplierId,
mg.id goodsId,
md.stock stock
md.stock stock,
cg.name cvsGoodName
from mt_inventory_details md
left join mt_goods mg ON md.goods_id = mg.id
LEFT JOIN cvs_goods cg on mg.cvs_good_id = cg.id
<where>
inventory_id = #{mtInventoryDetails.inventoryId}
<if test="mtInventoryDetails.id != null">

View File

@ -67,4 +67,11 @@ public interface MtInventoryDetailsService {
void export(HttpServletResponse response, MtInventoryDetails mtInventoryDetails);
/**
* 根据商品id和店铺id查询总货损量
* @param goodsId
* @param storeId
* @return
*/
Integer getDamageQuantity(Integer goodsId,Integer storeId);
}

View File

@ -2,6 +2,7 @@ package com.fuint.business.convenienceSore.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.EasyExcel;
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.fuint.business.convenienceSore.entity.MtInventoryDetails;
@ -250,4 +251,19 @@ public class MtInventoryDetailsServiceImpl implements MtInventoryDetailsService
}
}
@Override
public Integer getDamageQuantity(Integer goodsId, Integer storeId) {
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("goods_id", goodsId);
queryWrapper.eq("store_id", storeId);
List<MtInventoryDetails> list = mtInventoryDetailsDao.selectList(queryWrapper);
Integer damageQuantity = 0;
for (MtInventoryDetails mtInventoryDetails : list) {
if (ObjectUtil.isNotEmpty(mtInventoryDetails.getDamageQuantity())){
damageQuantity += mtInventoryDetails.getDamageQuantity();
}
}
return damageQuantity;
}
}

View File

@ -11,6 +11,7 @@ import com.fuint.business.convenienceSore.entity.StockStatistic;
import com.fuint.business.convenienceSore.entity.StockTrack;
import com.fuint.business.convenienceSore.mapper.StockStatisticMapper;
import com.fuint.business.convenienceSore.service.LJGoodsService;
import com.fuint.business.convenienceSore.service.MtInventoryDetailsService;
import com.fuint.business.convenienceSore.service.StockStatisticService;
import com.fuint.business.convenienceSore.service.StockTrackService;
import com.fuint.business.convenienceSore.vo.StockStatisticVo;
@ -33,6 +34,9 @@ public class StockStatisticServiceImpl extends ServiceImpl<StockStatisticMapper,
@Autowired
@Lazy
private StockTrackService stockTrackService;
@Autowired
@Lazy
private MtInventoryDetailsService inventoryDetailsService;
/**
* 根据条件分页查询库存统计信息
@ -45,6 +49,9 @@ public class StockStatisticServiceImpl extends ServiceImpl<StockStatisticMapper,
Integer storeId = nowAccountInfo.getStoreId();
stockStatisticVo.setStoreId(storeId);
IPage<StockStatisticVo> stockStatisticVoIPage = baseMapper.selectStockList(page, stockStatisticVo);
for (StockStatisticVo record : stockStatisticVoIPage.getRecords()) {
record.setCargoDamage(inventoryDetailsService.getDamageQuantity(record.getGoodsId(),storeId));
}
return stockStatisticVoIPage;
}

View File

@ -7,11 +7,13 @@ import lombok.Data;
public class MtInventoryDetailsVO extends MtInventoryDetails {
private String commodityName; // 商品名称·
private String unit; // 商品名称·
private String goodsNo; // 商品名称·
private Integer supplierId; // 供应商
private Integer cvsGoodId; // 分类
private Integer stock; // 分类
private String goodsSpecs; // 商品规格·
private String unit; // 单位·
private String goodsNo; // 条形码·
private Integer supplierId; // 供应商id
private Integer cvsGoodId; // 分类id
private String cvsGoodName; // 分类名称
private Integer stock; // 库存
/**
* 业务单号
*/

View File

@ -2,6 +2,7 @@ package com.fuint.business.convenienceSore.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fuint.framework.entity.BaseEntity;
import lombok.Data;
@ -52,4 +53,7 @@ public class StockStatisticVo extends BaseEntity {
private String status;
// 操作人
private String realName;
// 货损量
@TableField(exist = false)
private Integer cargoDamage;
}