liupopo 2 years ago
parent
commit
ddbe9e567e
  1. 87
      docs/databases/table_create_report-inventory.sql
  2. 14
      supervise-customer-ui/src/api/supervise/gdinventorylog.js
  3. 2
      supervise-customer-ui/src/router/modules/codemenu.js
  4. 248
      supervise-customer-ui/src/views/daydataupload/gdinventory/index.vue
  5. 17573
      supervise-flowable-ui/package-lock.json
  6. 10
      supervise-flowable-ui/src/api/login.js
  7. 28
      supervise-flowable-ui/src/router/index.js
  8. 961
      warehousing-system/docs/sheji/warehouse数据库设计文档_2.0.0.docx
  9. 3
      yxt-supervise-cyf/docs/databases/data_modify.sql
  10. 18
      yxt_supervise/supervise-customer/supervise-customer-api/src/main/java/com/yxt/supervise/customer/api/gdinventoryok/GdInventoryOk.java
  11. 21
      yxt_supervise/supervise-customer/supervise-customer-biz/src/main/java/com/yxt/supervise/customer/biz/gdinventorylog/GdInventoryLogRest.java
  12. 24
      yxt_supervise/supervise-customer/supervise-customer-biz/src/main/java/com/yxt/supervise/customer/biz/gdinventorylog/GdInventoryLogService.java
  13. 86
      yxt_supervise/supervise-customer/supervise-customer-biz/src/main/java/com/yxt/supervise/customer/biz/gdinventoryok/GdInventoryOkService.java
  14. 2
      yxt_supervise/supervise-customer/supervise-customer-biz/src/main/resources/logback-spring.xml

87
docs/databases/table_create_report-inventory.sql

@ -0,0 +1,87 @@
DROP TABLE IF EXISTS `report_inventory_day_gather`;
CREATE TABLE `report_inventory_day_gather` (
`id` BIGINT(32) NOT NULL AUTO_INCREMENT COMMENT 'ID,唯一编号',
`createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`remarks` VARCHAR(100) DEFAULT NULL COMMENT '备注说明',
`orderDate` VARCHAR(100) DEFAULT NULL COMMENT '单据日期',
`serialNumber` VARCHAR(100) DEFAULT NULL COMMENT '编号',
`reportTime` VARCHAR(100) DEFAULT NULL COMMENT '上报时间',
`storeType` VARCHAR(100) DEFAULT NULL COMMENT '仓库类型',
`storeNumber` int(11) DEFAULT 1 COMMENT '仓库数量',
`productCountNumber` int(11) DEFAULT 1 COMMENT '品种数量',
`productAmount` DOUBLE(12,2) DEFAULT 0 COMMENT '货值',
`countAmount` DOUBLE(12,2) DEFAULT 0 COMMENT '合计货值',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB COMMENT='库存汇总表-库存汇总日报表';
DROP TABLE IF EXISTS `report_inventory_day_store`;
CREATE TABLE `report_inventory_day_store` (
`id` BIGINT(32) NOT NULL AUTO_INCREMENT COMMENT 'ID,唯一编号',
`createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`remarks` VARCHAR(100) DEFAULT NULL COMMENT '备注说明',
`orderDate` VARCHAR(100) DEFAULT NULL COMMENT '单据日期',
`serialNumber` VARCHAR(100) DEFAULT NULL COMMENT '编号',
`reportTime` VARCHAR(100) DEFAULT NULL COMMENT '上报时间',
`warehouseType` int(11) DEFAULT NULL COMMENT '仓库类型',
`storeCode` VARCHAR(100) DEFAULT NULL COMMENT '门店编号',
`storeCodeName` VARCHAR(100) DEFAULT NULL COMMENT '[门店编号]门店名称',
`productCountNumber` int(11) DEFAULT 1 COMMENT '品种数量',
`productAmount` DOUBLE(12,2) DEFAULT 0 COMMENT '货值',
`countAmount` double(12,2) DEFAULT NULL COMMENT '合计货值',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB COMMENT='库存汇总表-仓库库存明细表';
DROP TABLE IF EXISTS `report_inventory_day_tobacco_store`;
CREATE TABLE `report_inventory_day_tobacco_store` (
`id` BIGINT(32) NOT NULL AUTO_INCREMENT COMMENT 'ID,唯一编号',
`createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`remarks` VARCHAR(100) DEFAULT NULL COMMENT '备注说明',
`orderDate` VARCHAR(100) DEFAULT NULL COMMENT '单据日期',
`serialNumber` VARCHAR(100) DEFAULT NULL COMMENT '编号',
`reportTime` VARCHAR(100) DEFAULT NULL COMMENT '上报时间',
`warehouseType` int(11) DEFAULT NULL COMMENT '仓库类型',
`storeCode` VARCHAR(100) DEFAULT NULL COMMENT '门店编号',
`storeCodeName` VARCHAR(100) DEFAULT NULL COMMENT '[门店编号]门店名称',
`productCountNumber` int(11) DEFAULT 1 COMMENT '品种数量',
`productAmount` DOUBLE(12,2) DEFAULT 0 COMMENT '货值',
`countAmount` double(12,2) DEFAULT NULL COMMENT '合计货值',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB COMMENT='库存汇总表-烟草仓库库存明细表';
DROP TABLE IF EXISTS `report_inventory_day_product`;
CREATE TABLE `report_inventory_day_product` (
`id` BIGINT(32) NOT NULL AUTO_INCREMENT COMMENT 'ID,唯一编号',
`createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间',
`remarks` VARCHAR(100) DEFAULT NULL COMMENT '备注说明',
`orderDate` VARCHAR(100) DEFAULT NULL COMMENT '单据日期',
`serialNumber` VARCHAR(100) DEFAULT NULL COMMENT '编号',
`productNumber` VARCHAR(100) DEFAULT NULL COMMENT '商品数量',
`reportTime` VARCHAR(100) DEFAULT NULL COMMENT '上报时间',
`prodCode` varchar(100) DEFAULT NULL COMMENT '商品编码',
`prodBarCode` varchar(100) DEFAULT NULL COMMENT '商品条码',
`prodName` varchar(100) DEFAULT NULL COMMENT '商品名称',
`prodNum` int(11) DEFAULT NULL COMMENT '商品数量',
`prodValue` double(12,2) DEFAULT NULL COMMENT '商品货值',
`typeCode` varchar(100) DEFAULT NULL COMMENT '类别编号',
`typeName` varchar(100) DEFAULT NULL COMMENT '类别名称',
`typeOne` varchar(100) DEFAULT NULL COMMENT '一级类别名称',
`typeTwo` varchar(100) DEFAULT NULL COMMENT '二级类别名称',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB COMMENT='库存汇总表-商品库存';

14
supervise-customer-ui/src/api/supervise/gdinventorylog.js

@ -5,7 +5,7 @@ export default {
// 查询分页列表
listPage: function(params) {
return request({
url: '/supervise/v1/gdinventorylog/listPage',
url: '/customer/v1/gdinventorylog/listPage',
method: 'post',
data: params
})
@ -13,7 +13,7 @@ export default {
// 保存新增记录
saveOrUpdate: function(params) {
return request({
url: '/supervise/v1/gdinventorylog/save',
url: '/customer/v1/gdinventorylog/save',
method: 'post',
data: params
})
@ -21,7 +21,7 @@ export default {
// 通过sid删除一条或多条记录
delBySids: function(params) {
return request({
url: '/supervise/v1/gdinventorylog/delBySids',
url: '/customer/v1/gdinventorylog/delBySids',
method: 'delete',
data: params
})
@ -29,13 +29,13 @@ export default {
// 通过sid查询一条记录
fetchBySid: function(sid) {
return request({
url: '/supervise/v1/gdinventorylog/fetchDetailsBySid/' + sid
url: '/customer/v1/gdinventorylog/fetchDetailsBySid/' + sid
})
},
// 提交
doSubmit: function(params) {
return request({
url: '/supervise/v1/gdinventorylog/doSubmit',
url: '/customer/v1/gdinventorylog/doSubmit',
method: 'post',
data: params
})
@ -43,7 +43,7 @@ export default {
// 导入
importExcel: function(params) {
return request({
url: '/supervise/v1/gdinventorylog/importExcel',
url: '/customer/v1/gdinventorylog/importExcel',
method: 'post',
data: params
})
@ -51,7 +51,7 @@ export default {
// 导出
exportExcel: function(params) {
return request({
url: '/supervise/v1/gdinventorylog/exportExcel',
url: '/customer/v1/gdinventorylog/exportExcel',
method: 'post',
data: params
})

2
supervise-customer-ui/src/router/modules/codemenu.js

@ -336,7 +336,7 @@ const codemenu = [{
children: [{
path: '/daydataupload/gdinventory',
component: () => import('@/views/daydataupload/gdinventory/index.vue'),
name: 'DaydatauploadGdinventory',
name: 'DaydatauploadGdinventoryLog',
meta: {
title: '库存信息上传',
noCache: true

248
supervise-customer-ui/src/views/daydataupload/gdinventory/index.vue

@ -1,63 +1,148 @@
<template>
<div class="app-container">
<button-bar ref="btnbar" view-title="采购订单列表" :btndisabled="btndisabled" @btnhandle="btnHandle" />
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>导入库存信息查询</span>
<el-button style="float: right; padding: 3px 0" type="text" @click="resetCache">缓存数据重置(监管商品仓店索引供应商索引)</el-button>
<button-bar ref="btnbar" view-title="库存信息" :btndisabled="btndisabled" @btnhandle="btnHandle" />
<div class="main-content">
<div class="searchcon">
<el-button size="small" class="searchbtn" @click="clicksearchShow">{{ searchxianshitit }}</el-button>
<div v-show="isSearchShow" class="search">
<el-form :inline="true" :model="queryParams" class="tab-header">
<el-form-item label="数据日期">
<el-date-picker v-model="queryParams.params.dataDateStart" type="date" clearable value-format="yyyy-MM-dd" placeholder="选择数据开始日期" />
<span style="padding: 0 8px"></span>
<el-date-picker v-model="queryParams.params.dataDateEnd" type="date" clearable value-format="yyyy-MM-dd" placeholder="选择数据结束日期" />
</el-form-item>
</el-form>
<div class="btn" style="text-align: center;">
<el-button type="primary" size="small" icon="el-icon-search" @click="dosearch">查询</el-button>
<el-button type="primary" size="small" icon="el-icon-refresh" @click="resetQuery">重置</el-button>
</div>
</div>
</div>
<div>
<el-upload
ref="upload"
class="upload-demo"
:action="updateAction"
:on-change="handleChange"
:on-progress="handleProgress"
:on-preview="handlePreview"
:on-remove="handleRemove"
:on-success="handleSuccess"
:file-list="fileList"
:auto-upload="false"
:multiple="false"
:limit="1"
>
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>
<div slot="tip" class="el-upload__tip">上传 库存信息查询.xlsx文件</div>
</el-upload>
<!-- Start 项目列表头部 -->
<div class="listtop">
<div class="tit">库存信息导入日志列表</div>
<pageye v-show="dataList.length > 0" :total="queryParams.total" :page.sync="queryParams.current" :limit.sync="queryParams.size" class="pagination" @pagination="loadList" />
</div>
<div>
<h3>文件上传结果</h3>
<el-card class="box-card">
<div>{{ uploadResultMesssage }}</div>
</el-card>
<!-- End 项目列表头部 -->
<!-- Start 项目列表 -->
<div class="">
<el-table v-loading="tableLoading" :data="dataList" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="indexMethod" align="center" />
<el-table-column prop="orderDate" label="数据日期" align="center" width="200" />
<el-table-column prop="createTime" label="导入时间" align="center" width="200" />
<el-table-column prop="allNum" label="总记录数" align="center" width="200" />
<el-table-column prop="validNum" label="普通商品数" align="center" width="200" />
<el-table-column prop="errRowNum" label="烟草商品数" align="center" width="200" />
<el-table-column label="操作" wid align="center">
<template slot-scope="scope">
<el-button type="text" @click="toRelevancy(scope.row)">下载库存日报表</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div>
<h3>库存汇总数据</h3>
<el-card class="box-card">
<div>{{ hzResultMesssage }}</div>
<div>
<el-button :disabled="!hzFilePath" size="small" type="primary" @click="doDownloadHz">下载库存汇总文件</el-button>
<!-- <el-button :disabled="!ychzFilePath" size="small" type="primary" @click="doDownloadHzYc">下载烟草汇总文件</el-button> -->
</div>
</el-card>
<!-- End 项目列表 -->
<div class="pages">
<div class="tit" />
<!-- 翻页 -->
<pagination
v-show="dataList.length > 0"
:total="queryParams.total"
:page.sync="queryParams.current"
:limit.sync="queryParams.size"
class="pagination"
@pagination="loadList"
/>
</div>
</el-card>
</div>
<el-dialog title="上传<汇融银行_库存信息查询.xlsx>" :visible.sync="dialogVisible" width="60%" :before-close="dialogClose">
<el-card class="box-card">
<div>
<el-upload
ref="upload"
class="upload-demo"
:action="updateAction"
:on-change="handleChange"
:on-progress="handleProgress"
:on-preview="handlePreview"
:on-remove="handleRemove"
:on-success="handleSuccess"
:file-list="fileList"
:auto-upload="false"
:multiple="false"
:limit="1"
>
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>
<div slot="tip" class="el-upload__tip">上传 汇融银行_库存信息查询.xlsx文件</div>
</el-upload>
</div>
<div>
<h3>文件上传结果</h3>
<el-card class="box-card">
<div>{{ uploadResultMesssage }}</div>
</el-card>
</div>
<div>
<h3>库存汇总数据</h3>
<el-card class="box-card">
<div>{{ hzResultMesssage }}</div>
<div>
<el-button :disabled="!hzFilePath" size="small" type="primary" @click="doDownloadHz">下载库存汇总文件</el-button>
<!-- <el-button :disabled="!ychzFilePath" size="small" type="primary" @click="doDownloadHzYc">下载烟草汇总文件</el-button> -->
</div>
</el-card>
</div>
</el-card>
</el-dialog>
</div>
</template>
<script>
import {
kchz,
resetAllCache
} from '@/api/kucun/kucun'
import ButtonBar from '@/components/ButtonBar'
import Pagination from '@/components/pagination'
import pageye from '@/components/pagination/pageye'
import req from '@/api/supervise/gdinventorylog'
export default {
name: 'KucunKcxxcxIndex',
// components: { },
name: 'DaydatauploadGdinventoryLog',
components: {
ButtonBar,
Pagination,
pageye
},
data() {
return {
btndisabled: false,
updateAction: process.env.VUE_APP_BASE_API + '/kucun/uploadGdData',
viewState: 1, // 1 2 3 4
isSearchShow: false,
searchxianshitit: '显示查询条件',
queryParams: {
current: 1,
size: 10,
total: 0,
params: {
dataDateStart: '',
dataDateEnd: ''
}
},
tableLoading: false,
dataList: [],
btnList: [
{
type: 'primary',
size: 'small',
icon: 'upload',
btnKey: 'showUploadXlsx',
btnLabel: '上传库存信息'
},
{
type: 'info',
size: 'small',
icon: 'cross',
btnKey: 'doClose',
btnLabel: '关闭'
}],
dialogVisible: false,
updateAction: '/api/customer' + '/v1/gdinventoryok/uploadGdData',
name: '库存数据导入',
fileList: [],
uploadResultMesssage: '',
@ -71,29 +156,73 @@
this.$refs['btnbar'].setButtonList(this.btnList)
},
created() {
//
this.init()
//
// this.getList()
this.loadList()
},
methods: {
//
clicksearchShow() {
this.isSearchShow = !this.isSearchShow
if (this.isSearchShow) {
this.searchxianshitit = '隐藏查询条件'
} else {
this.searchxianshitit = '显示查询条件'
}
},
btnHandle(btnKey) {
switch (btnKey) {
case 'toUploadXlsx':
this.toUploadXlsx()
case 'showUploadXlsx':
this.showUploadXlsx()
break
case 'filing':
this.filing()
break
case 'doDel':
this.doDel()
case 'doClose':
this.doClose()
break
default:
break
}
},
init() {},
getList() {},
dosearch() {
this.queryParams.current = 1
this.loadList()
},
resetQuery() {
this.queryParams = {
current: 1,
size: 10,
total: 0,
params: {
dataDateStart: '',
dataDateEnd: ''
}
}
this.loadList()
},
//
indexMethod(index) {
var pagestart = (this.queryParams.current - 1) * this.queryParams.size
var pageindex = index + 1 + pagestart
return pageindex
},
loadList() {
req.listPage(this.queryParams).then(res => {
this.queryParams.total = res.data.total
this.dataList = res.data.records
}).catch(e => {
console.log('GdinventoryLog-loadList-ee:', e)
})
},
doClose() {
this.$store.dispatch('tagsView/delView', this.$route)
this.$router.go(-1)
},
showUploadXlsx() {
this.dialogVisible = true
},
dialogClose() {
this.currentLog = {}
this.fileList = []
this.filecandown = true
this.dialogVisible = false
},
//
handleReturn() {
this.$router.go(-1)
@ -214,4 +343,3 @@
overflow-x: hidden;
}
</style>

17573
supervise-flowable-ui/package-lock.json

File diff suppressed because it is too large

10
supervise-flowable-ui/src/api/login.js

@ -1,17 +1,19 @@
import request from '@/utils/request'
// 登录方法
export function login(username, password, code, uuid) {
export function login(userName, password, code, uuid) {
const data = {
username,
userName,
password,
code,
uuid
}
return request({
url: '/login',
// url: '/login',
url: '/portal/v1/sysuser/login',
method: 'post',
data: data
data: data,
headers: { 'Content-Type': 'application/json' }
})
}
// 获取用户详细信息

28
supervise-flowable-ui/src/router/index.js

@ -75,19 +75,21 @@ export const constantRoutes = [{
icon: 'user'
}
}]
},{
path: '/tool',
component: Layout,
hidden: true,
children: [
{
path: 'build/index',
component: (resolve) => require(['@/views/tool/build/index'], resolve),
name: 'FormBuild',
meta: { title: '表单配置', icon: '' }
}
]
}]
},
// {
// path: '/tool',
// component: Layout,
// hidden: true,
// children: [
// {
// path: 'build/index',
// component: (resolve) => require(['@/views/tool/build/index'], resolve),
// name: 'FormBuild',
// meta: { title: '表单配置', icon: '' }
// }
// ]
// },
]
export default new Router({
mode: 'history', // 去掉url中的#

961
warehousing-system/docs/sheji/warehouse数据库设计文档_2.0.0.docx

@ -0,0 +1,961 @@
数据库表结构文档
数据库名:warehouse2
文档版本:1.0.0
文档描述:数据库设计文档
公共字段
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
id
int
19
0
N
Y
id
2
sid
Sid
3
lockVersion
版本锁
4
createTime
创建时间
5
modifyTime
修改时间
6
isEnable
是否可用:1可用,0不可用
7
state
状态
8
isDelete
是否删除:0未删除,1已删除
9
remarks
备注
10
createBySid
创建人sid
11
updateBySid
修改人sid
表in_storehouse_main 货物入库质押申请/批准单
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
no
varchar
50
编号
2
applicationDate
date
50
制单日期
3
creatorSid
varchar
64
制单人Sid
4
creatorName
varchar
50
制单人姓名
5
custerSid
varchar
64
客户Sid(企业)
6
custerName
varchar
100
客户名称(企业)
7
storeHouseSid
varchar
64
仓库Sid
8
storeHouseName
varchar
100
仓库名称
9
auditorSid
varchar
64
审核人Sid
10
auditorName
varchar
50
审核人姓名
11
state
varchar
50
审核状态
12
approvedDate
varchar
50
审核日期
13
approvedRemark
varchar
50
审核备注
表in_storehouse_listing 货物入库质押申请/批准单明细表
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
custerSid
varchar
64
客户Sid(企业)
2
custerName
varchar
100
客户名称(企业)
3
storeHouseSid
varchar
64
仓库Sid
4
storeHouseName
varchar
100
仓库名称
5
proName
varchar
50
质物名称
6
proModel
varchar
50
规格(型号)
proUnit
varchar
50
规格单位
7
manufacturer
varchar
50
生成厂家(产地)
8
num
varchar
10
数量
9
weight
varchar
50
重量
10
confirmedPrice
decime
50
2
质权人确认的单价
11
calculatedValue
decime
50
2
核算的价值
12
locationNumber
varchar
10
货位号
13
mainSid
varchar
50
申请单的sid
表out_storehouse_main 质物解除质押出库申请/批准单
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
creatorSid
varchar
64
制单人Sid
2
creatorName
varchar
50
制单人姓名
3
custerSid
varchar
64
客户Sid(企业)
4
custerName
varchar
100
客户名称(企业)
5
storeHouseSid
varchar
64
仓库Sid
6
storeHouseName
varchar
100
仓库名称
7
auditorSid
varchar
64
审核人Sid
8
auditorName
varchar
50
审核人姓名
9
no
varchar
50
编号
10
applicationDate
date
50
制单日期
11
state
varchar
50
审核状态
12
approvedDate
varchar
50
审核日期
13
approvedRemark
varchar
50
审核备注
表out_storehouse_listing 质物解除质押出库申请/批准单明细表
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
custerSid
varchar
64
客户Sid(企业)
2
custerName
varchar
100
客户名称(企业)
3
storeHouseSid
varchar
64
仓库Sid
4
storeHouseName
varchar
100
仓库名称
5
proName
varchar
50
质物名称
6
proModel
varchar
50
规格(型号)
proUnit
varchar
50
规格单位
7
manufacturer
varchar
50
生成厂家(产地)
8
estimateNum
varchar
10
预计数量
9
estimateWeight
varchar
50
预计重量
10
estimateConfirmedPrice
decime
50
2
预计质权人确认的单价
11
estimateCalculatedValue
decime
50
2
预计核算的价值
12
realityNum
varchar
10
实际数量
13
realityWeight
varchar
50
实际重量
14
realityConfirmedPrice
decime
50
2
实际质权人确认的单价
15
realityCalculatedValue
decime
50
2
实际核算的价值
16
locationNumber
varchar
10
货位号
17
mainSid
varchar
50
申请单的sid
表stock 质物库存表
编号
名称
数据类型
长度
小数位
允许空值
主键
默认值
说明
1
proName
varchar
50
质物名称
2
proModel
varchar
50
规格(型号)
3
manufacturer
varchar
50
生成厂家(产地)
4
num
varchar
10
数量
5
weight
varchar
50
重量
6
confirmedPrice
decime
50
2
质权人确认的单价
7
calculatedValue
decime
50
2
核算的价值
8
locationNumber
varchar
10
货位号
9
custerName
varchar
50
客户名称(企业)
proUnit
varchar
50
规格单位
custerSid
varchar
64
客户Sid(企业)
custerName
varchar
100
客户名称(企业)
storeHouseSid
varchar
64
仓库Sid
storeHouseName
varchar
100
仓库名称
locationNumber
varchar
10
货位号
备注:台账的数据是实时最新的。
问题:
同一个出质人两次入库单的同一种商品的单价、核算的价值不一致如何处理。(台账中同一个商品出现的单价不一致的情况)
同一个出质人两次出库单的同一种商品的预计质权人确认的单价、预计核算的价值、实际质权人确认的单价、实际核算的价值不一致如何处理。(台账中同一个商品出现的价值不一致的情况)
出库的商品与入库的商品是不是只按照同一个客户下的同一商品名称做对应。
4、出现下述情况如何处理:
康师傅矿泉水1000瓶。500瓶在A货位,500瓶在B货位。
填写的单子需要按照如下方式填写。
质物名称
规格
生产厂家
数量
重量
质权人确认的单价
核算的价值
货位号
备注
康师傅矿泉水
500ML
康师傅
1000
500
1000
1000
A、B
质物名称
规格
生产厂家
数量
重量
质权人确认的单价
核算的价值
货位号
备注
康师傅矿泉水
500ML
康师傅
500
250
500
500
A
康师傅矿泉水
500ML
康师傅
500
250
500
500
B
入库接口格式
{
"no": "202305160001",
"custerName": "国大36524",
"applicationDate": "20230516",
"listing": [
{
"proName": "康师傅矿泉水",
"proModel": "500ml",
"manufacturer": "康师傅",
"num": "1000",
"weight": "250公斤",
"locationNumber": "A货位",
"calculatedValue": "1000",
"confirmedPrice": "1000"
},
{
"proName": "康师傅矿泉水",
"proModel": "500ml",
"manufacturer": "康师傅",
"num": "1000",
"weight": "250公斤",
"locationNumber": "B货位",
"calculatedValue": "1000",
"confirmedPrice": "1000"
}
]
}
5、关于包装、标记字段如何处理。
关于质押物的有效期、质押期限字段。
重量的单位。
出库接口格式
{
"no": "202305160001",
"custerName": "国大36524",
"applicationDate": "20230516",
"listing": [
{
"proName": "康师傅矿泉水",
"proModel": "500ml",
"manufacturer": "康师傅",
"estimateNum": "1000",
"estimateweight": "250公斤",
"locationNumber": "A货位",
"estimatecalculatedValue": "1000",
"estimateconfirmedPrice": "1000",
"realityCalculatedValue": "1000",
"realityConfirmedPrice": "1000",
"realityWeight": "250公斤",
"realityNum": "1000"
},
{
"proName": "康师傅矿泉水",
"proModel": "500ml",
"manufacturer": "康师傅",
"estimateNum": "1000",
"estimateweight": "250公斤",
"locationNumber": "A货位",
"estimatecalculatedValue": "1000",
"estimateconfirmedPrice": "1000",
"realityCalculatedValue": "1000",
"realityConfirmedPrice": "1000",
"realityWeight": "250公斤",
"realityNum": "1000"
}
]
}
8、Apifox中的接口

3
yxt-supervise-cyf/docs/databases/data_modify.sql

@ -0,0 +1,3 @@
insert into app_version(appName,versionCode,versionName,downloadUrl,versionInfo,fileName)
values ('醇油坊',1000,'1.0.0.0','http://cyf.yyundong.com/apks/cyf-1000.apk','初始版本。','cyf-1000.apk');

18
yxt_supervise/supervise-customer/supervise-customer-api/src/main/java/com/yxt/supervise/customer/api/gdinventoryok/GdInventoryOk.java

@ -15,12 +15,22 @@ import lombok.Data;
@ApiModel(value = "国大库存数据", description = "国大库存数据")
@TableName("gd_inventory_ok")
public class GdInventoryOk extends EntityWithId {
// 企业组织机构代码证 仓库编号 仓库名称 类别编号 类别名称 一级类别名称 二级类别名称 商品编码 商品条码 商品名称 仓库类型 商品数量 商品货值 供应商 数据日期
@ApiModelProperty("企业组织机构代码证")
private String orgCode;//企业组织机构代码证
@ApiModelProperty("仓库/门店编号")
private String warehouseCode;//仓库/门店编号
@ApiModelProperty("仓库/门店名称")
private String warehouseName;//仓库/门店名称
@ApiModelProperty("类别编号")
private String typeCode;//类别编号
@ApiModelProperty("类别名称")
private String typeName;//类别名称
@ApiModelProperty("一级类别名称")
private String typeOne;//一级类别名称
@ApiModelProperty("二级类别名称")
private String typeTwo;//二级类别名称
@ApiModelProperty("商品编码")
private String prodCode;//商品编码
@ApiModelProperty("商品条码")
@ -37,13 +47,5 @@ public class GdInventoryOk extends EntityWithId {
private String suppliderName;//供应商
@ApiModelProperty("数据日期")
private String dataDate;//数据日期
@ApiModelProperty("类别编号")
private String typeCode;//类别编号
@ApiModelProperty("类别名称")
private String typeName;//类别名称
@ApiModelProperty("一级类别名称")
private String typeOne;//一级类别名称
@ApiModelProperty("二级类别名称")
private String typeTwo;//二级类别名称
}

21
yxt_supervise/supervise-customer/supervise-customer-biz/src/main/java/com/yxt/supervise/customer/biz/gdinventorylog/GdInventoryLogRest.java

@ -1,10 +1,16 @@
package com.yxt.supervise.customer.biz.gdinventorylog;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import com.yxt.supervise.customer.api.gdinstoragegd.*;
import com.yxt.supervise.customer.api.gdinventorylog.GdInventoryLogQuery;
import com.yxt.supervise.customer.api.gdinventoryok.GdInventoryLog;
import com.yxt.supervise.customer.api.gdsales.GdSales;
import com.yxt.supervise.customer.api.gdsales.GdSalesQuery;
import com.yxt.supervise.customer.api.gdsales.GdSalesVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@ -22,8 +28,19 @@ import java.util.List;
* @author wangpengfei
* @date 2023/3/29 14:00
*/
@Api(tags = "导入记录")
@Api(tags = "库存信息导入日志的记录")
@RestController
@RequestMapping("v1/gdinventorylog")
public class GdInventoryLogRest {
public class GdInventoryLogRest {
@Autowired
private GdInventoryLogService gdInventoryLogService;
@ApiOperation("根据条件分页查询数据的列表")
@PostMapping("/listPage")
public ResultBean<IPage<GdInventoryLog>> listPage(@RequestBody PagerQuery<GdInventoryLogQuery> pq) {
ResultBean rb = ResultBean.fireFail();
IPage<GdInventoryLog> pv = gdInventoryLogService.listPage(pq);
return rb.success().setData(pv);
}
}

24
yxt_supervise/supervise-customer/supervise-customer-biz/src/main/java/com/yxt/supervise/customer/biz/gdinventorylog/GdInventoryLogService.java

@ -1,7 +1,13 @@
package com.yxt.supervise.customer.biz.gdinventorylog;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yxt.common.base.utils.PagerUtil;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.supervise.customer.api.gdinstoragelog.GdInstorageLog;
import com.yxt.supervise.customer.api.gdinventorylog.GdInventoryLogQuery;
import com.yxt.supervise.customer.api.gdinventoryok.GdInventoryLog;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -12,12 +18,26 @@ import org.springframework.stereotype.Service;
*/
@Slf4j
@Service
public class GdInventoryLogService extends ServiceImpl<GdInventoryLogMapper, GdInventoryLog> {
public GdInstorageLog getLogByOrderDate(String orderDate) {
//GdRukuQuery query = pq.getParams();
return baseMapper.getLogByOrderDate(orderDate);
}
public IPage<GdInventoryLog> listPage(PagerQuery<GdInventoryLogQuery> pq) {
GdInventoryLogQuery params = pq.getParams();
QueryWrapper<GdInventoryLog> qw = new QueryWrapper<>();
if (StrUtil.isNotBlank(params.getDataDateStart())) {
qw.ge("orderDate", params.getDataDateStart());
}
if (StrUtil.isNotBlank(params.getDataDateEnd())) {
qw.le("orderDate", params.getDataDateEnd());
}
qw.orderByDesc("orderDate","createTime");
return baseMapper.getLogByOrderDate(orderDate);
IPage<GdInventoryLog> iPage = PagerUtil.queryToPage(pq);
IPage<GdInventoryLog> page = baseMapper.selectPage(iPage, qw);
return page;
}
}

86
yxt_supervise/supervise-customer/supervise-customer-biz/src/main/java/com/yxt/supervise/customer/biz/gdinventoryok/GdInventoryOkService.java

@ -1,6 +1,7 @@
package com.yxt.supervise.customer.biz.gdinventoryok;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
@ -8,6 +9,11 @@ import cn.hutool.json.JSONUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import cn.hutool.poi.excel.sax.handler.RowHandler;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.builder.ExcelReaderBuilder;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.read.metadata.holder.ReadRowHolder;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.common.base.config.component.FileUploadComponent;
@ -24,12 +30,15 @@ import com.yxt.supervise.customer.api.gdsales.GdSales;
import com.yxt.supervise.customer.api.gdsales.GdSalesExcelVo;
import com.yxt.supervise.customer.api.gdsales.GdSalesQuery;
import com.yxt.supervise.customer.api.gdsales.GdSalesVo;
import com.yxt.supervise.customer.api.purchaserequisition.PurchaseRequisition;
import com.yxt.supervise.customer.api.purchaserequisitionpro.PurchaseRequisitionPro;
import com.yxt.supervise.customer.biz.gdinventorylog.GdInventoryLogService;
import com.yxt.supervise.customer.biz.gdinventorylogerr.GdInventoryLogErrService;
import com.yxt.supervise.customer.biz.gdinventoryyc.GdInventoryYcService;
import com.yxt.supervise.customer.biz.gdrescategoryprod.GdRescategoryProdService;
import com.yxt.supervise.customer.biz.storeindex.StoreIndexService;
import com.yxt.supervise.customer.biz.storeinfo.StoreInfoService;
import com.yxt.supervise.customer.tools.StrTool;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.CellStyle;
import org.springframework.beans.factory.annotation.Autowired;
@ -38,6 +47,7 @@ import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.math.BigDecimal;
import java.util.*;
/**
@ -59,8 +69,6 @@ public class GdInventoryOkService extends MybatisBaseService<GdInventoryOkMapper
@Autowired
private GdInventoryYcService gdInventoryYcService;
@Autowired
private GdInventoryOkService gdInventoryOkService;
@Autowired
private GdRescategoryProdService gdRescategoryProdService;
@Autowired
private StoreIndexService storeIndexService;
@ -68,13 +76,15 @@ public class GdInventoryOkService extends MybatisBaseService<GdInventoryOkMapper
private StoreInfoService storeInfoService;
@Autowired
private GdInventoryLogErrService gdInventoryLogErrService;
public void clearData() {
baseMapper.clearData();
}
public PagerVo<GdInventoryOkVo> listPageVo(PagerQuery<GdInventoryOkQuery> pq) {
GdInventoryOkQuery query = pq.getParams();
QueryWrapper<GdInventoryOk> qw = new QueryWrapper<>();
if(query!=null) {
if (query != null) {
if (StringUtils.isNotBlank(query.getWarehouseCode())) {
qw.eq("warehouseCode", query.getWarehouseCode());
}
@ -104,10 +114,11 @@ public class GdInventoryOkService extends MybatisBaseService<GdInventoryOkMapper
PagerVo<GdInventoryOkVo> p = PagerUtil.pageToVo(pagging, null);
return p;
}
public List<GdInventoryOkExcelVo> exportExcel(PagerQuery<GdInventoryOkQuery> pq) {
GdInventoryOkQuery query = pq.getParams();
QueryWrapper<GdInventoryOk> qw = new QueryWrapper<>();
if(query!=null) {
if (query != null) {
if (StringUtils.isNotBlank(query.getWarehouseCode())) {
qw.eq("warehouseCode", query.getWarehouseCode());
}
@ -135,6 +146,7 @@ public class GdInventoryOkService extends MybatisBaseService<GdInventoryOkMapper
List<GdInventoryOkExcelVo> pagging = baseMapper.exportExcel(qw);
return pagging;
}
public GdInventoryLog uploadAndResetData(MultipartFile file) {
ResultBean rb = ResultBean.fireFail();
@ -144,18 +156,74 @@ public class GdInventoryOkService extends MybatisBaseService<GdInventoryOkMapper
long millis = System.currentTimeMillis();
baseMapper.clearData();
gdInventoryYcService.clearData();
// gdInventoryYcService.clearData();
GdInventoryLog gdlog = new GdInventoryLog(fp);
ExcelUtil.read07BySax(fp, -1, createRowHandler(gdlog));
ExcelReaderBuilder read = EasyExcel.read(fp, GdInventoryOk.class, createReadListener(gdlog));
read.sheet().doRead();
// System.out.println("用时:" + (System.currentTimeMillis() - millis));
gdlog.setDurations(System.currentTimeMillis() - millis);
gdInventoryLogService.save(gdlog);
return gdlog;
}
private ReadListener<GdInventoryOk> createReadListener(GdInventoryLog gdlog) {
return new ReadListener<GdInventoryOk>() {
private int x = 0, y = 0, z = 0;
private String odate = null;
private static final int BATCH_COUNT = 900;
private List<GdInventoryOk> toInsertList = new ArrayList<>();
private boolean checkYcProd(String typeCode) {
if (StrUtil.isBlank(typeCode))
return false;
if (typeCode.length() < 4)
return false;
String subCode = typeCode.substring(0, 4);
return "0811".equals(subCode) || "0813".equals(subCode) || "0815".equals(subCode);
}
@Override
public void invoke(GdInventoryOk obj, AnalysisContext analysisContext) {
if (StringUtils.isNotBlank(obj.getWarehouseCode())) {
x++;
if (StrUtil.isBlank(odate)) {
odate = obj.getDataDate();
gdlog.setOrderDate(odate);
}
if(checkYcProd(obj.getTypeCode())){
y++;
}else{
z++;
}
toInsertList.add(obj);
// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
if (toInsertList.size() >= BATCH_COUNT) {
GdInventoryOkService.this.saveBatch(toInsertList);
// 存储完成清理 list
toInsertList.clear();;
}
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
if (toInsertList != null && !toInsertList.isEmpty()) {
GdInventoryOkService.this.saveBatch(toInsertList);
}
gdlog.setAllNum(x);
gdlog.setValidNum(z);
gdlog.setErrRowNum(y);
}
};
}
private RowHandler createRowHandler(GdInventoryLog gdlog) {
return new RowHandler() {
private static final int BATCH_COUNT = 900;
private List<GdInventoryOk> toInsertList = new ArrayList<>();
private List<GdInventoryYc> toInsertListYc = new ArrayList<>();
private List<GdInventoryLogErr> errList = new ArrayList<>();
@ -240,7 +308,7 @@ public class GdInventoryOkService extends MybatisBaseService<GdInventoryOkMapper
}
if (990 == num) {
gdInventoryOkService.saveBatch(toInsertList);
GdInventoryOkService.this.saveBatch(toInsertList);
num = 0;
toInsertList.clear();
} else {
@ -283,7 +351,7 @@ public class GdInventoryOkService extends MybatisBaseService<GdInventoryOkMapper
@Override
public void doAfterAllAnalysed() {
if (toInsertList != null && !toInsertList.isEmpty()) {
gdInventoryOkService.saveBatch(toInsertList);
GdInventoryOkService.this.saveBatch(toInsertList);
}
if (toInsertListYc != null && !toInsertListYc.isEmpty()) {
gdInventoryYcService.saveBatch(toInsertListYc);

2
yxt_supervise/supervise-customer/supervise-customer-biz/src/main/resources/logback-spring.xml

@ -42,7 +42,7 @@
</encoder>
</appender>
<root level="INFO">
<root level="debug">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILEOUT" />
</root>

Loading…
Cancel
Save