Ver código fonte

费项计算

qzyReal 2 anos atrás
pai
commit
03abaaeb68
34 arquivos alterados com 1017 adições e 888 exclusões
  1. 10 1
      app-ui/pages/wx/pay.vue
  2. 1 1
      app-ui/utils/request.js
  3. 2 2
      sp-admin/sa-frame/menu-list-sp.js
  4. 4 3
      sp-admin/sa-view/tb-business/tb-car-disincle-add.html
  5. 2 2
      sp-admin/sa-view/tb-business/tb-car-disincle-edit.html
  6. 343 352
      sp-admin/sa-view/tb-fee-statistics/month-statistcs-list.html
  7. 24 24
      sp-admin/sa-view/tb-fee-statistics/tb-fee-details-list.html
  8. 11 10
      sp-admin/sa-view/tb-fee-statistics/tb-fee-statistics-list.html
  9. 289 286
      sp-admin/sa-view/tb-fee-statistics/year-statistcs-list.html
  10. 1 1
      sp-admin/sa-view/tb-item-type/tb-item-edit.html
  11. 2 0
      sp-server/src/main/java/com/pj/api/jh/service/JhService.java
  12. 54 23
      sp-server/src/main/java/com/pj/api/open/service/OpenService.java
  13. 1 0
      sp-server/src/main/java/com/pj/api/wx/bo/PriceBO.java
  14. 1 1
      sp-server/src/main/java/com/pj/api/wx/service/WxService.java
  15. 6 0
      sp-server/src/main/java/com/pj/project/relation_goods_type/RelationGoodsTypeService.java
  16. 2 1
      sp-server/src/main/java/com/pj/project/sync/SyncService.java
  17. 4 0
      sp-server/src/main/java/com/pj/project/tb_business/TbBusiness.java
  18. 0 17
      sp-server/src/main/java/com/pj/project/tb_business/TbBusinessController.java
  19. 47 70
      sp-server/src/main/java/com/pj/project/tb_business/TbBusinessService.java
  20. 18 4
      sp-server/src/main/java/com/pj/project/tb_business_item/TbBusinessItemService.java
  21. 4 0
      sp-server/src/main/java/com/pj/project/tb_fee_details/TbFeeDetails.java
  22. 1 1
      sp-server/src/main/java/com/pj/project/tb_fee_details/TbFeeDetailsService.java
  23. 36 0
      sp-server/src/main/java/com/pj/project/tb_fee_item/TbFeeItemController.java
  24. 4 0
      sp-server/src/main/java/com/pj/project/tb_fee_statistics/TbFeeStatistics.java
  25. 6 5
      sp-server/src/main/java/com/pj/project/tb_fee_statistics/TbFeeStatisticsMapper.xml
  26. 2 1
      sp-server/src/main/java/com/pj/project/tb_fee_statistics/TbFeeStatisticsService.java
  27. 2 0
      sp-server/src/main/java/com/pj/project/tb_invoice_order/TbInvoiceOrderController.java
  28. 2 2
      sp-server/src/main/java/com/pj/project/tb_item/TbItem.java
  29. 36 17
      sp-server/src/main/java/com/pj/project/tb_item/TbItemService.java
  30. 58 58
      sp-server/src/main/java/com/pj/project/tb_item_fac/TbItemFac.java
  31. 25 0
      sp-server/src/main/java/com/pj/project/tb_item_fac/TbItemFacService.java
  32. 7 0
      sp-server/src/main/java/com/pj/project/tb_item_type/TbItemType.java
  33. 11 6
      sp-server/src/main/java/com/pj/project/tb_item_type/TbItemTypeService.java
  34. 1 0
      sp-server/src/main/java/com/pj/project/tb_order/TbOrder.java

+ 10 - 1
app-ui/pages/wx/pay.vue

@@ -130,6 +130,7 @@
 				item: {
 					itemsPrice: 0,
 					businessId: '',
+					calculateId:'',
 					list: []
 				},
 				payTypeList: [{
@@ -231,7 +232,8 @@
 					c: JSON.stringify(cars.map(obj => {
 						return {
 							id: obj.id,
-							p: obj.price
+							p: obj.price,
+							uniqExpenseId:obj.uniqExpenseId
 						}
 					})),
 					money: this.total,
@@ -246,6 +248,7 @@
 				}
 				p.desc = con + '-' + carNos;
 				p.businessType = tradeType;
+				p.calculateId=this.item.calculateId;
 				this.$common.showLoading('正在请求...');
 				let that = this;
 				that.$api.getPrePay(that.$common.removeNull(p)).then(resp => {
@@ -311,6 +314,11 @@
 					carId: carId,
 					state: this.state
 				}).then(resp => {
+					let code=resp.code;
+					if(code!==200){
+						this.$common.toast('系统异常');
+						return;
+					}
 					let data = resp.data;
 					let cars=data.carList;
 					this.cars = cars;
@@ -324,6 +332,7 @@
 					Object.assign(this.item, {
 						itemsPrice: data.itemsPrice,
 						businessId: data.businessId,
+						calculateId:data.calculateId,
 						list: list
 					})
 					this.businessAble = list.filter(obj => obj.pay == 1).length == list.length;

+ 1 - 1
app-ui/utils/request.js

@@ -1,4 +1,4 @@
-const server = 'http://192.168.88.25:8099/pro';
+const server = 'http://127.0.0.1:8099/pro';
 // const server = 'https://pco.aseanbusiness.cn/pro';
 
 

+ 2 - 2
sp-admin/sa-frame/menu-list-sp.js

@@ -483,7 +483,7 @@ window.menuList.unshift({
 				]
 			}, {
 				id: 'tb-item-type-list',
-				name: '收费项管理',
+				name: '业务类型管理',
 				url: 'sa-view/tb-item-type/tb-item-type-list.html',
 				childList: [{
 						id: 'tb-item-type-add',
@@ -511,7 +511,7 @@ window.menuList.unshift({
 
 			{
 				id: 'tb-item-re-list',
-				name: '明细管理',
+				name: '车型管理',
 				url: 'sa-view/tb-item-type/tb-item-list.html',
 				childList: [{
 						id: 'tb-item-manager-add',

+ 4 - 3
sp-admin/sa-view/tb-business/tb-car-disincle-add.html

@@ -82,7 +82,7 @@
 											<div class="c-item" v-if="goods.needCustomer">
 												<label class="c-label"><span style="color: red;">*</span>客户:</label>
 												<el-select 
-													v-model="m.customerId" placeholder="请选择">
+													v-model="m.customerId" placeholder="请选择" filterable>
 													<el-option v-for="item in customerList" :key="item.id"
 														:label="item.name" :value="item.id">
 													</el-option>
@@ -570,7 +570,8 @@
 							goodsId: this.m.goodsId
 						}, function(resp) {
 							let list = resp.data;
-							this.itemTypeList = list;
+							this.itemTypeList = list.filter(type=>type.status==1);
+							console.log(this.itemTypeList);
 							this.filterTypeList = JSON.parse(JSON.stringify(this.itemTypeList));
 							this.filterItems();
 						}.bind(this))
@@ -590,7 +591,7 @@
 					getCustomerList() {
 						sa.ajax('/TbCostomer/getList', {
 							pageNo: 1,
-							pageSize: 30,
+							pageSize: 200,
 							sortType: 20,
 							judgeStatus: 2
 						}, function(res) {

+ 2 - 2
sp-admin/sa-view/tb-business/tb-car-disincle-edit.html

@@ -72,7 +72,7 @@
 												<label class="c-label"><span style="color: red;">*</span>客户:</label>
 												<el-select
 													:disabled="currentCustomerId!='1'"
-													v-model="m.customerId" placeholder="请选择">
+													v-model="m.customerId" placeholder="请选择" filterable>
 													<el-option v-for="item in customerList" :key="item.id"
 														:label="item.name" :value="item.id">
 													</el-option>
@@ -605,7 +605,7 @@
 					getCustomerList() {
 						sa.ajax('/TbCostomer/getList', {
 							pageNo: 1,
-							pageSize: 30,
+							pageSize: 200,
 							sortType: 20,
 							judgeStatus: 2
 						}, function(res) {

+ 343 - 352
sp-admin/sa-view/tb-fee-statistics/month-statistcs-list.html

@@ -1,365 +1,356 @@
 <!DOCTYPE html>
 <html>
-<head>
-    <title>日统计表-列表</title>
-    <meta charset="utf-8">
-    <meta name="viewport"
-          content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"/>
-    <!-- 所有的 css & js 资源 -->
-    <link rel="stylesheet" href="../../static/kj/element-ui/theme-chalk/index.css">
-    <link rel="stylesheet" href="../../static/sa.css">
-    <script src="../../static/kj/vue.min.js"></script>
-    <script src="../../static/kj/element-ui/index.js"></script>
-    <script src="../../static/kj/httpVueLoader.js"></script>
-    <script src="../../static/kj/jquery.min.js"></script>
-    <script src="../../static/kj/layer/layer.js"></script>
-    <script src="../../static/sa.js"></script>
-</head>
-<body>
-<div class="vue-box" style="display: none;" :style="'display: block;'">
-    <div class="c-panel">
-        <!-- ------------- 检索参数 ------------- -->
-        <div class="c-title">检索参数</div>
-        <el-form ref="form" :model='p' @submit.native.prevent>
-            <div class="c-item">
-                <label class="c-label">收费项目:</label>
-                <el-select v-model="p.feeType" placeholder="请选择" filterable>
-                    <el-option label="-全部-" value=""></el-option>
-                    <el-option label="核酸检测" value="1"></el-option>
-                    <el-option label="消杀作业" value="2"></el-option>
-                    <el-option label="装卸作业" value="3"></el-option>
-                    <el-option label="停车业务" value="4"></el-option>
-                    <el-option label="过磅费" value="5"></el-option>
-                    <el-option label="入场管理费" value="6"></el-option>
-                    <el-option label="充电打冷作业" value="7"></el-option>
-                </el-select>
-            </div>
-            <!--					<div class="c-item">-->
-            <!--						<label class="c-label">日期:</label>-->
-            <!--						<el-date-picker type="month" value-format="yyyy-MM" v-model="p.month"></el-date-picker>-->
-            <!--					</div>-->
-            <div class="c-item">
-                <label class="c-label">日期范围:</label>
-                <el-date-picker size="mini" v-model="selectMonth" type="monthrange" unlink-panels="false"
-                                range-separator="至" start-placeholder="开始月份" end-placeholder="结束月份"
-                                format="yyyy 年 MM 月" value-format="yyyy-MM">
-                </el-date-picker>
-            </div>
-            <el-button type="primary" icon="el-icon-search" @click="p.pageNo = 1; f5()">查询</el-button>
-
-            <br/>
-        </el-form>
-        <!-- ------------- 快捷按钮 ------------- -->
-        <div class="fast-btn">
-            <el-button size="mini" type="info" @click="sa.f5()">刷新</el-button>
-            <!--					<el-button type="warning"  @click="exportFn()">导出(月统计)</el-button>-->
-            <el-button class="c-btn" type="warning" icon="el-icon" @click="exportStats()">导出</el-button>
-            <el-button class="c-btn" type="success" icon="el-icon" @click="print()">打印</el-button>
-
-        </div>
-        <!-- ------------- 数据列表 ------------- -->
-        <el-table class="data-table" ref="data-table" :data="dataList" show-summary :summary-method="getSumRol">
-            <sa-td name="收费项目" prop="feeType" type="enum"
-                   :jv="{1: '核酸检测',2: '消杀作业', 3: '装卸作业', 4: '停车业务', 5: '过磅费', 6: '入场管理费', 7: '充电打冷作业'}"></sa-td>
-            <sa-td name="月份" prop="month"></sa-td>
-            <sa-td name="数量" prop="num"></sa-td>
-            <!--					<sa-td name="含税收入(元)" prop="statisticsMoney"></sa-td>-->
-            <el-table-column label="含税收入(元)">
-                <template slot-scope="s">
-                    <span>{{Number(s.row.taxMoney).toFixed(2)}}</span>
-                </template>
-            </el-table-column>
-            <el-table-column label="税率(%)">
-                <template slot-scope="s">
-                    <span>{{s.row.taxRate * 100}}</span>
-                </template>
-            </el-table-column>
-            <!--					<sa-td name="税款(元)" prop="taxes" ></sa-td>-->
-            <el-table-column label="税款(元)">
-                <template slot-scope="s">
-                    <span>{{Number(s.row.taxes).toFixed(2)}}</span>
-                </template>
-            </el-table-column>
-            <!--					<sa-td name="不含税收入(元)" prop="noTaxMoney" ></sa-td>-->
-            <el-table-column label="不含税收入(元)">
-                <template slot-scope="s">
-                    <span>{{Number(s.row.noTaxMoney).toFixed(2)}}</span>
-                </template>
-            </el-table-column>
-            <!--					<el-table-column label="操作" fixed="right"  width="240px">-->
-            <!--						<template slot-scope="s">-->
-            <!--							<el-button class="c-btn" type="success" icon="el-icon-view" @click="get(s.row)">查看</el-button>-->
-            <!--							<el-button class="c-btn" type="primary" icon="el-icon-edit" @click="update(s.row)">修改</el-button>-->
-            <!--							<el-button class="c-btn" type="danger" icon="el-icon-delete" @click="del(s.row)">删除</el-button>-->
-            <!--						</template>-->
-            <!--					</el-table-column>-->
-        </el-table>
-        <!-- ------------- 分页 ------------- -->
-        <sa-item type="page" :curr.sync="p.pageNo" :size.sync="p.pageSize" :total="dataCount" @change="f5()"></sa-item>
-    </div>
-    <el-dialog title="提示" :visible.sync="emodel.visible" width="38%">
-        <!-- 日期选择器 -->
-        <div class="c-item">
-            <label class="c-label">月份:</label>
-            <el-date-picker type="month" value-format="yyyy-MM" v-model="emodel.form.exportMonth"
-                            placeholder="选择月份"></el-date-picker>
-        </div>
-        <span slot="footer" class="dialog-footer">
+	<head>
+		<title>日统计表-列表</title>
+		<meta charset="utf-8">
+		<meta name="viewport"
+			content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+		<!-- 所有的 css & js 资源 -->
+		<link rel="stylesheet" href="../../static/kj/element-ui/theme-chalk/index.css">
+		<link rel="stylesheet" href="../../static/sa.css">
+		<script src="../../static/kj/vue.min.js"></script>
+		<script src="../../static/kj/element-ui/index.js"></script>
+		<script src="../../static/kj/httpVueLoader.js"></script>
+		<script src="../../static/kj/jquery.min.js"></script>
+		<script src="../../static/kj/layer/layer.js"></script>
+		<script src="../../static/sa.js"></script>
+	</head>
+	<body>
+		<div class="vue-box" style="display: none;" :style="'display: block;'">
+			<div class="c-panel">
+				<!-- ------------- 检索参数 ------------- -->
+				<div class="c-title">检索参数</div>
+				<el-form ref="form" :model='p' @submit.native.prevent>
+					<div class="c-item">
+						<label class="c-label">收费项目:</label>
+						<el-select v-model="p.feeType" placeholder="请选择" filterable>
+							<el-option label="-全部-" value=""></el-option>
+							<el-option v-for="(item,index) in feeItemList" :label="item.name" :value="item.id"
+								:key="index">
+							</el-option>
+						</el-select>
+					</div>
+					<div class="c-item">
+						<label class="c-label">日期范围:</label>
+						<el-date-picker size="mini" v-model="selectMonth" type="monthrange" unlink-panels="false"
+							range-separator="至" start-placeholder="开始月份" end-placeholder="结束月份" format="yyyy 年 MM 月"
+							value-format="yyyy-MM">
+						</el-date-picker>
+					</div>
+					<el-button type="primary" icon="el-icon-search" @click="p.pageNo = 1; f5()">查询</el-button>
+					<el-button class="c-btn" type="warning" icon="el-icon" @click="exportStats()">导出</el-button>
+					<el-button class="c-btn" type="success" icon="el-icon" @click="print()">打印</el-button>
+					<br />
+				</el-form>
+				<!-- ------------- 数据列表 ------------- -->
+				<el-table class="data-table" ref="data-table" :data="dataList" show-summary :summary-method="getSumRol">
+					<sa-td name="收费项目" prop="feeTypeName"></sa-td>
+					<sa-td name="月份" prop="month"></sa-td>
+					<sa-td name="数量" prop="num"></sa-td>
+					<!--					<sa-td name="含税收入(元)" prop="statisticsMoney"></sa-td>-->
+					<el-table-column label="含税收入(元)">
+						<template slot-scope="s">
+							<span>{{Number(s.row.taxMoney).toFixed(2)}}</span>
+						</template>
+					</el-table-column>
+					<el-table-column label="税率(%)">
+						<template slot-scope="s">
+							<span>{{s.row.taxRate * 100}}</span>
+						</template>
+					</el-table-column>
+					<!--					<sa-td name="税款(元)" prop="taxes" ></sa-td>-->
+					<el-table-column label="税款(元)">
+						<template slot-scope="s">
+							<span>{{Number(s.row.taxes).toFixed(2)}}</span>
+						</template>
+					</el-table-column>
+					<!--					<sa-td name="不含税收入(元)" prop="noTaxMoney" ></sa-td>-->
+					<el-table-column label="不含税收入(元)">
+						<template slot-scope="s">
+							<span>{{Number(s.row.noTaxMoney).toFixed(2)}}</span>
+						</template>
+					</el-table-column>
+				</el-table>
+				<!-- ------------- 分页 ------------- -->
+				<sa-item type="page" :curr.sync="p.pageNo" :size.sync="p.pageSize" :total="dataCount" @change="f5()">
+				</sa-item>
+			</div>
+			<el-dialog title="提示" :visible.sync="emodel.visible" width="38%">
+				<!-- 日期选择器 -->
+				<div class="c-item">
+					<label class="c-label">月份:</label>
+					<el-date-picker type="month" value-format="yyyy-MM" v-model="emodel.form.exportMonth"
+						placeholder="选择月份"></el-date-picker>
+				</div>
+				<span slot="footer" class="dialog-footer">
 					<el-button @click="emodel.visible = false">取 消</el-button>
 					<el-button type="primary" @click="sureExport">确 定</el-button>
 				</span>
-    </el-dialog>
-</div>
-<script>
-    var app = new Vue({
-        components: {
-            "sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue'),
-            "sa-td": httpVueLoader('../../sa-frame/com/sa-td.vue'),
-        },
-        el: '.vue-box',
-        data: {
-            p: { // 查询参数
-                id: '',		// 主键
-                feeType: '',		// 收费类型(1=核酸检测,2=消杀作业,3=装卸作业,4=停车费,5=过磅费,6=入场管理费)
-                itemTypeId: '',		// 业务类型id
-                itemTypeName: '',		// 业务类型
-                year: '',		// 年份
-                month: '',		// 月份
-                day: '',		// 天
-                dayTime: '',		// 日期
-                num: '',		// 数量
-                taxMoney: '',		// 税款
-                taxRate: '',		// 税率
-                noTaxMoney: '',		// 不含税款
-                payType: '',		// 支付方式(1=微信支付)
-                isMonth: 1,
-                pageNo: 1,		// 当前页
-                pageSize: 10,	// 页大小
-                sortType: 0		// 排序方式
-            },
-            dataCount: 0,
-            dataList: [], // 数据集合
-            selectMonth: [],
-            selectMonthRange: {
-                beginMonth: '', //查询开始时间
-                endMonth: '', //查询结束时间
-            },
-            emodel: {
-                visible: false,
-                form: {
-                    exportMonth: '', //导出月份
-                }
-            },
-            tableSum: {
-                taxMoneySum: 0,
-                taxesSum: 0,
-                noTaxMoneySum: 0,
-            },
-        },
-        methods: {
-            getSumRol(param) {
-                console.log("执行了getSumRol")
-                const columns = param.columns;
-                const sums = [];
-                columns.forEach((column, index) => {
-                    if (index === 0) {
-                        sums[index] = "合计";
-                        return;
-                    }
-                    //根据当前列绑定的字段名进行判断,根据字段名决定展示什么内容
-                    switch (column.label) {
-                        //金额;
-                        case "含税收入(元)":
-                            //在这里你就可以根据需要对数据进行一些处理(保留小数位数,加上单位等)
-                            sums[index] = this.tableSum.taxMoneySum;
-                            break;
-                        //人数
-                        case "税款(元)":
-                            sums[index] = this.tableSum.taxesSum;
-                            break;
-                        //件数;
-                        case "不含税收入(元)":
-                            sums[index] = this.tableSum.noTaxMoneySum;
-                            break;
-                        //不需要计算合计的列就展示‘--’
-                        default:
-                            sums[index] = "";
-                            break;
-                    }
-                });
-                return sums;
-            },
-            calcuSum() {
-                var taxMoneySum = 0;
-                var taxesSum = 0;
-                var noTaxMoneySum = 0;
-                var len = this.dataList.length;
-                for (var i = 0; i < len; i++) {
-                    taxMoneySum = (taxMoneySum * 100 + this.dataList[i].taxMoney * 100) / 100;
-                    taxesSum = (taxesSum * 100 + this.dataList[i].taxes * 100) / 100;
-                    noTaxMoneySum = (noTaxMoneySum * 100 + this.dataList[i].noTaxMoney * 100) / 100;
-                }
-                this.tableSum.taxMoneySum = Number(taxMoneySum).toFixed(2);
-                this.tableSum.taxesSum = Number(taxesSum).toFixed(2);
-                this.tableSum.noTaxMoneySum = Number(noTaxMoneySum).toFixed(2);
+			</el-dialog>
+		</div>
+		<script>
+			var app = new Vue({
+				components: {
+					"sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue'),
+					"sa-td": httpVueLoader('../../sa-frame/com/sa-td.vue'),
+				},
+				el: '.vue-box',
+				data: {
+					p: { // 查询参数
+						id: '', // 主键
+						feeType: '', // 收费类型(1=核酸检测,2=消杀作业,3=装卸作业,4=停车费,5=过磅费,6=入场管理费)
+						itemTypeId: '', // 业务类型id
+						itemTypeName: '', // 业务类型
+						year: '', // 年份
+						month: '', // 月份
+						day: '', // 天
+						dayTime: '', // 日期
+						num: '', // 数量
+						taxMoney: '', // 税款
+						taxRate: '', // 税率
+						noTaxMoney: '', // 不含税款
+						payType: '', // 支付方式(1=微信支付)
+						isMonth: 1,
+						pageNo: 1, // 当前页
+						pageSize: 10, // 页大小
+						sortType: 0 // 排序方式
+					},
+					dataCount: 0,
+					dataList: [], // 数据集合
+					selectMonth: [],
+					selectMonthRange: {
+						beginMonth: '', //查询开始时间
+						endMonth: '', //查询结束时间
+					},
+					emodel: {
+						visible: false,
+						form: {
+							exportMonth: '', //导出月份
+						}
+					},
+					feeItemList: [],
+					tableSum: {
+						taxMoneySum: 0,
+						taxesSum: 0,
+						noTaxMoneySum: 0,
+					},
+				},
+				methods: {
+					getFeeItemList() {
+						sa.ajax('/TbFeeItem/getList', function(res) {
+							this.feeItemList = res.data;
+						}.bind(this));
+					},
+					getSumRol(param) {
+						const columns = param.columns;
+						const sums = [];
+						columns.forEach((column, index) => {
+							if (index === 0) {
+								sums[index] = "合计";
+								return;
+							}
+							//根据当前列绑定的字段名进行判断,根据字段名决定展示什么内容
+							switch (column.label) {
+								//金额;
+								case "含税收入(元)":
+									//在这里你就可以根据需要对数据进行一些处理(保留小数位数,加上单位等)
+									sums[index] = this.tableSum.taxMoneySum;
+									break;
+									//人数
+								case "税款(元)":
+									sums[index] = this.tableSum.taxesSum;
+									break;
+									//件数;
+								case "不含税收入(元)":
+									sums[index] = this.tableSum.noTaxMoneySum;
+									break;
+									//不需要计算合计的列就展示‘--’
+								default:
+									sums[index] = "";
+									break;
+							}
+						});
+						return sums;
+					},
+					calcuSum() {
+						var taxMoneySum = 0;
+						var taxesSum = 0;
+						var noTaxMoneySum = 0;
+						var len = this.dataList.length;
+						for (var i = 0; i < len; i++) {
+							taxMoneySum = (taxMoneySum * 100 + this.dataList[i].taxMoney * 100) / 100;
+							taxesSum = (taxesSum * 100 + this.dataList[i].taxes * 100) / 100;
+							noTaxMoneySum = (noTaxMoneySum * 100 + this.dataList[i].noTaxMoney * 100) / 100;
+						}
+						this.tableSum.taxMoneySum = Number(taxMoneySum).toFixed(2);
+						this.tableSum.taxesSum = Number(taxesSum).toFixed(2);
+						this.tableSum.noTaxMoneySum = Number(noTaxMoneySum).toFixed(2);
 
-            },
-            getTotalMoney() {
-                if (this.selectMonth != null && this.selectMonth.length != 0) {
-                    this.selectMonthRange.beginMonth = this.selectMonth[0];
-                    this.selectMonthRange.endMonth = this.selectMonth[1];
-                }
-                sa.ajax('/TbFeeStatistics/getSum?beginMonth=' + this.selectMonthRange.beginMonth + "&endMonth=" + this.selectMonthRange.endMonth,
-                    sa.removeNull(this.p), function (res) {
-                        this.tableSum.taxMoneySum = res.data.taxMoneySum;
-                        this.tableSum.taxesSum = res.data.taxesSum;
-                        this.tableSum.noTaxMoneySum = res.data.noTaxMoneySum;
-                    }.bind(this));
-            },
-            print: function () {
-                if (this.selectMonth != null && this.selectMonth.length != 0) {
-                    this.selectMonthRange.beginMonth = this.selectMonth[0];
-                    this.selectMonthRange.endMonth = this.selectMonth[1];
-                }
+					},
+					getTotalMoney() {
+						if (this.selectMonth != null && this.selectMonth.length != 0) {
+							this.selectMonthRange.beginMonth = this.selectMonth[0];
+							this.selectMonthRange.endMonth = this.selectMonth[1];
+						}
+						sa.ajax('/TbFeeStatistics/getSum?beginMonth=' + this.selectMonthRange.beginMonth + "&endMonth=" +
+							this.selectMonthRange.endMonth,
+							sa.removeNull(this.p),
+							function(res) {
+								this.tableSum.taxMoneySum = res.data.taxMoneySum;
+								this.tableSum.taxesSum = res.data.taxesSum;
+								this.tableSum.noTaxMoneySum = res.data.noTaxMoneySum;
+							}.bind(this));
+					},
+					print: function() {
+						if (this.selectMonth != null && this.selectMonth.length != 0) {
+							this.selectMonthRange.beginMonth = this.selectMonth[0];
+							this.selectMonthRange.endMonth = this.selectMonth[1];
+						}
 
-                var beginMonth = this.selectMonthRange.beginMonth;
-                var endMonth = this.selectMonthRange.endMonth;
-                var feeType = this.p.feeType;
-                var str = '';
-                if (beginMonth === '' && endMonth === '') {
-                    str += '所有月份';
-                } else {
-                    str += beginMonth + "至" + endMonth
-                }
-                if (feeType === '') {
-                    str += "、所有收费项目";
-                } else {
-                    var feeTypeName = '';
-                    if (feeType == 1) {
-                        feeTypeName = "核酸检测";
-                    } else if (feeType == 2) {
-                        feeTypeName = "消杀作业";
-                    } else if (feeType == 3) {
-                        feeTypeName = "装卸作业";
-                    } else if (feeType == 4) {
-                        feeTypeName = "停车费";
-                    } else if (feeType == 5) {
-                        feeTypeName = "过磅费";
-                    } else if (feeType == 6) {
-                        feeTypeName = "入场管理费";
-                    } else if (feeType == 7) {
-                        feeTypeName = "充电打冷作业";
-                    }
-                    str += "、收费项目为" + feeTypeName;
-                }
+						var beginMonth = this.selectMonthRange.beginMonth;
+						var endMonth = this.selectMonthRange.endMonth;
+						var feeType = this.p.feeType;
+						var str = '';
+						if (beginMonth === '' && endMonth === '') {
+							str += '所有月份';
+						} else {
+							str += beginMonth + "至" + endMonth
+						}
+						if (feeType === '') {
+							str += "、所有收费项目";
+						} else {
+							var feeTypeName = '';
+							if (feeType == 1) {
+								feeTypeName = "核酸检测";
+							} else if (feeType == 2) {
+								feeTypeName = "消杀作业";
+							} else if (feeType == 3) {
+								feeTypeName = "装卸作业";
+							} else if (feeType == 4) {
+								feeTypeName = "停车费";
+							} else if (feeType == 5) {
+								feeTypeName = "过磅费";
+							} else if (feeType == 6) {
+								feeTypeName = "入场管理费";
+							} else if (feeType == 7) {
+								feeTypeName = "充电打冷作业";
+							}
+							str += "、收费项目为" + feeTypeName;
+						}
 
-                this.$confirm('确定打印' + str + '的数据?', '提示', {
-                    confirmButtonText: '确定',
-                    cancelButtonText: '取消',
-                    type: 'warning'
-                }).then(() => {
-                    sa.showIframe('打印月报表', 'monthStatsPrint.html?beginMonth=' + beginMonth + "&endMonth=" + endMonth + "&feeType=" + feeType + "&isMonth=1", '1000px', '100%');
-                }).catch(() => {
+						this.$confirm('确定打印' + str + '的数据?', '提示', {
+							confirmButtonText: '确定',
+							cancelButtonText: '取消',
+							type: 'warning'
+						}).then(() => {
+							sa.showIframe('打印月报表', 'monthStatsPrint.html?beginMonth=' + beginMonth +
+								"&endMonth=" + endMonth + "&feeType=" + feeType + "&isMonth=1", '1000px',
+								'100%');
+						}).catch(() => {
 
-                });
-            },
-            exportStats() {
-                if (this.selectMonth != null && this.selectMonth.length != 0) {
-                    this.selectMonthRange.beginMonth = this.selectMonth[0];
-                    this.selectMonthRange.endMonth = this.selectMonth[1];
-                }
+						});
+					},
+					exportStats() {
+						if (this.selectMonth != null && this.selectMonth.length != 0) {
+							this.selectMonthRange.beginMonth = this.selectMonth[0];
+							this.selectMonthRange.endMonth = this.selectMonth[1];
+						}
 
-                var beginMonth = this.selectMonthRange.beginMonth;
-                var endMonth = this.selectMonthRange.endMonth;
-                var feeType = this.p.feeType;
-                var str = '';
-                if (beginMonth === '' && endMonth === '') {
-                    str += '所有月份';
-                } else {
-                    str += beginMonth + "至" + endMonth
-                }
-                if (feeType === '') {
-                    str += "、所有收费项目";
-                } else {
-                    var feeTypeName = '';
-                    if (feeType == 1) {
-                        feeTypeName = "核酸检测";
-                    } else if (feeType == 2) {
-                        feeTypeName = "消杀作业";
-                    } else if (feeType == 3) {
-                        feeTypeName = "装卸作业";
-                    } else if (feeType == 4) {
-                        feeTypeName = "停车费";
-                    } else if (feeType == 5) {
-                        feeTypeName = "过磅费";
-                    } else if (feeType == 6) {
-                        feeTypeName = "入场管理费";
-                    } else if (feeType == 7) {
-                        feeTypeName = "充电打冷作业";
-                    }
-                    str += "、收费项目为" + feeTypeName;
-                }
-                this.$confirm('确定导出' + str + '的数据?', '提示', {
-                    confirmButtonText: '确定',
-                    cancelButtonText: '取消',
-                    type: 'warning'
-                }).then(() => {
-                    sa.ajax('/TbFeeStatistics/export/stats?beginMonth=' + beginMonth + '&endMonth=' + endMonth
-                        , sa.removeNull(this.p), function (resp) {
-                            window.open(resp.data);
-                        }.bind(this));
-                }).catch(() => {
+						var beginMonth = this.selectMonthRange.beginMonth;
+						var endMonth = this.selectMonthRange.endMonth;
+						var feeType = this.p.feeType;
+						var str = '';
+						if (beginMonth === '' && endMonth === '') {
+							str += '所有月份';
+						} else {
+							str += beginMonth + "至" + endMonth
+						}
+						if (feeType === '') {
+							str += "、所有收费项目";
+						} else {
+							var feeTypeName = '';
+							if (feeType == 1) {
+								feeTypeName = "核酸检测";
+							} else if (feeType == 2) {
+								feeTypeName = "消杀作业";
+							} else if (feeType == 3) {
+								feeTypeName = "装卸作业";
+							} else if (feeType == 4) {
+								feeTypeName = "停车费";
+							} else if (feeType == 5) {
+								feeTypeName = "过磅费";
+							} else if (feeType == 6) {
+								feeTypeName = "入场管理费";
+							} else if (feeType == 7) {
+								feeTypeName = "充电打冷作业";
+							}
+							str += "、收费项目为" + feeTypeName;
+						}
+						this.$confirm('确定导出' + str + '的数据?', '提示', {
+							confirmButtonText: '确定',
+							cancelButtonText: '取消',
+							type: 'warning'
+						}).then(() => {
+							sa.ajax('/TbFeeStatistics/export/stats?beginMonth=' + beginMonth + '&endMonth=' +
+								endMonth, sa.removeNull(this.p),
+								function(resp) {
+									window.open(resp.data);
+								}.bind(this));
+						}).catch(() => {
 
-                });
-            },
-            exportFn() {
-                Object.assign(this.emodel, {
-                    visible: true,
-                })
-            },
-            sureExport() {
-                if (this.emodel.form.exportMonth == '') {
-                    sa.msg("请选择月份");
-                    return;
-                }
-                sa.ajax('/TbFeeStatistics/export/monthStatistics', this.emodel.form, function (resp) {
-                    window.open(resp.data);
-                    this.emodel.visible = false;
-                }.bind(this));
-            },
-            // 刷新
-            f5: function () {
-                if (this.selectMonth != null && this.selectMonth.length != 0) {
-                    this.selectMonthRange.beginMonth = this.selectMonth[0];
-                    this.selectMonthRange.endMonth = this.selectMonth[1];
-                }
-                sa.ajax('/TbFeeStatistics/getMonth?beginMonth=' + this.selectMonthRange.beginMonth + "&endMonth=" + this.selectMonthRange.endMonth,
-                    sa.removeNull(this.p), function (res) {
-                        this.dataList = res.data; // 数据
-                        this.dataCount = res.dataCount; // 数据总数
-                        sa.f5TableHeight();		// 刷新表格高度
+						});
+					},
+					exportFn() {
+						Object.assign(this.emodel, {
+							visible: true,
+						})
+					},
+					sureExport() {
+						if (this.emodel.form.exportMonth == '') {
+							sa.msg("请选择月份");
+							return;
+						}
+						sa.ajax('/TbFeeStatistics/export/monthStatistics', this.emodel.form, function(resp) {
+							window.open(resp.data);
+							this.emodel.visible = false;
+						}.bind(this));
+					},
+					// 刷新
+					f5: function() {
+						if (this.selectMonth != null && this.selectMonth.length != 0) {
+							this.selectMonthRange.beginMonth = this.selectMonth[0];
+							this.selectMonthRange.endMonth = this.selectMonth[1];
+						}
+						sa.ajax('/TbFeeStatistics/getMonth?beginMonth=' + this.selectMonthRange.beginMonth +
+							"&endMonth=" + this.selectMonthRange.endMonth,
+							sa.removeNull(this.p),
+							function(res) {
+								this.dataList = res.data; // 数据
+								this.dataCount = res.dataCount; // 数据总数
+								sa.f5TableHeight(); // 刷新表格高度
 
-                    }.bind(this));
-                this.getTotalMoney();
-            },
-            // 查看
-            get: function (data) {
-                sa.showIframe('数据详情', 'month-statistcs-info.html?id=' + data.id, '1050px', '90%');
-            },
-            // 查看 - 根据选中的
-            getBySelect: function (data) {
-                var selection = this.$refs['data-table'].selection;
-                if (selection.length == 0) {
-                    return sa.msg('请选择一条数据')
-                }
-                this.get(selection[0]);
-            },
-        },
-        created: function () {
-            this.f5();
-            sa.onInputEnter();
-        }
-    })
-</script>
-</body>
+							}.bind(this));
+						this.getTotalMoney();
+					},
+					// 查看
+					get: function(data) {
+						sa.showIframe('数据详情', 'month-statistcs-info.html?id=' + data.id, '1050px', '90%');
+					},
+					// 查看 - 根据选中的
+					getBySelect: function(data) {
+						var selection = this.$refs['data-table'].selection;
+						if (selection.length == 0) {
+							return sa.msg('请选择一条数据')
+						}
+						this.get(selection[0]);
+					},
+				},
+				created: function() {
+					this.getFeeItemList();
+					this.f5();
+					sa.onInputEnter();
+				}
+			})
+		</script>
+	</body>
 </html>

+ 24 - 24
sp-admin/sa-view/tb-fee-statistics/tb-fee-details-list.html

@@ -16,12 +16,13 @@
 		<script src="../../static/sa.js"></script>
 	</head>
 	<style>
-		@page{
-		
-		      size: portrait; /* 纵向 */
-		       margin:1.5cm 2.5cm 1.5cm 2.5cm; * 边距 上右下左 */
-		
-		    }
+		@page {
+
+			size: portrait;
+			/* 纵向 */
+			margin: 1.5cm 2.5cm 1.5cm 2.5cm;
+			* 边距 上右下左 */
+		}
 
 		.keyButton.el-button {
 			width: 100%;
@@ -67,13 +68,8 @@
 					<div class="c-item">
 						<label class="c-label">收费项目:</label>
 						<el-select v-model="p.feeType" placeholder="请选择" filterable>
-							<el-option label="核酸检测" value="1"></el-option>
-							<el-option label="消杀作业" value="2"></el-option>
-							<el-option label="装卸作业" value="3"></el-option>
-							<el-option label="停车业务" value="4"></el-option>
-							<el-option label="过磅费" value="5"></el-option>
-							<el-option label="入场管理费" value="6"></el-option>
-							<el-option label="充电打冷作业" value="7"></el-option>
+							<el-option v-for="(item,index) in feeItemList" :label="item.name" :value="item.id" :key="index">
+							</el-option>
 						</el-select>
 					</div>
 					<div class="c-item">
@@ -127,8 +123,7 @@
 				<el-table class="data-table" ref="data-table" :data="dataList" show-summary :summary-method="getSumRol"
 					style="margin-top: 10px;">
 					<sa-td type="selection"></sa-td>
-					<sa-td name="收费项目" prop="feeType" type="enum"
-						:jv="{1: '核酸检测',2: '消杀作业', 3: '装卸作业', 4: '停车业务', 5: '过磅费', 6: '入场管理费', 7: '充电打冷作业'}"></sa-td>
+					<sa-td name="收费项目" prop="feeTypeName"></sa-td>
 					<sa-td name="业务类型" prop="itemTypeName"></sa-td>
 					<sa-td name="车型" prop="itemName"></sa-td>
 					<sa-td name="车牌号" prop="carNo" width="90px"></sa-td>
@@ -194,13 +189,9 @@
 				<div class="c-item">
 					<label class="c-label">收费项目:</label>
 					<el-select v-model="emodel.form.feeType" placeholder="请选择" filterable>
-						<el-option label="核酸检测" value="1"></el-option>
-						<el-option label="消杀作业" value="2"></el-option>
-						<el-option label="装卸作业" value="3"></el-option>
-						<el-option label="停车费" value="4"></el-option>
-						<el-option label="过磅费" value="5"></el-option>
-						<el-option label="入场管理费" value="6"> </el-option>
-						<el-option label="充电打冷作业" value="7"> </el-option>
+						<el-option v-for="(item,index) in feeItemList" :label="item.name" :value="item.id" :key="index">
+						</el-option>
+
 					</el-select>
 				</div>
 				<div class="c-item">
@@ -255,6 +246,7 @@
 					dataList: [], // 数据集合
 					itemTypeList: [],
 					selectTime: [],
+					feeItemList: [],
 					selectTimeRange: {
 						beginTime: '', //查询开始时间
 						endTime: '', //查询结束时间
@@ -278,6 +270,11 @@
 					},
 				},
 				methods: {
+					getFeeItemList() {
+						sa.ajax('/TbFeeItem/getList', function(res) {
+							this.feeItemList = res.data;
+						}.bind(this));
+					},
 					getSumRol(param) {
 
 						const columns = param.columns;
@@ -489,7 +486,7 @@
 						let ids = sa.getArrayField(selection, 'id');
 						var str = '';
 						if (selection.length > 0) {
-							this.p.ids=ids.join(',');
+							this.p.ids = ids.join(',');
 							str = '所选项目';
 						} else {
 							if (this.selectTime != null && this.selectTime.length != 0) {
@@ -537,6 +534,8 @@
 								str += '车型为:' + itemName;
 							}
 						}
+						this.p.beginTime = beginTime;
+						this.p.endTime = endTime;
 						this.$confirm('确定导出' + str + '的数据?', '提示', {
 							confirmButtonText: '确定',
 							cancelButtonText: '取消',
@@ -544,7 +543,7 @@
 						}).then(() => {
 							sa.ajax('/TbFeeDetails/export/details', sa.removeNull(this.p),
 								function(resp) {
-									window.open(resp.data);
+									window.location.href = resp.data
 								}.bind(this));
 						}).catch(() => {
 
@@ -593,6 +592,7 @@
 
 				},
 				created: function() {
+					this.getFeeItemList();
 					this.f5();
 					this.getItemTypeList();
 					sa.onInputEnter();

+ 11 - 10
sp-admin/sa-view/tb-fee-statistics/tb-fee-statistics-list.html

@@ -25,13 +25,9 @@
 						<label class="c-label">收费项目:</label>
 						<el-select v-model="p.feeType" placeholder="请选择" filterable>
 							<el-option label="-全部-" value=""></el-option>
-							<el-option label="核酸检测" value="1"></el-option>
-							<el-option label="消杀作业" value="2"></el-option>
-							<el-option label="装卸作业" value="3"></el-option>
-							<el-option label="停车业务" value="4"></el-option>
-							<el-option label="过磅费" value="5"></el-option>
-							<el-option label="入场管理费" value="6"></el-option>
-							<el-option label="充电打冷作业" value="7"></el-option>
+							<el-option v-for="(item,index) in feeItemList" :label="item.name" :value="item.id"
+								:key="index">
+							</el-option>
 						</el-select>
 					</div>
 
@@ -55,9 +51,7 @@
 				<!-- ------------- 数据列表 ------------- -->
 				<el-table class="data-table" ref="data-table" :data="dataList" show-summary :summary-method="getSumRol">
 					<!--					<sa-td type="selection"></sa-td>-->
-					<sa-td name="收费项目" prop="feeType" type="enum"
-						:jv="{1: '核酸检测',2: '消杀作业', 3: '装卸作业', 4: '停车业务', 5: '过磅费', 6: '入场管理费', 7: '充电打冷作业'}"></sa-td>
-					<!--					<sa-td name="业务类型" prop="itemTypeName" ></sa-td>-->
+					<sa-td name="收费项目" prop="feeTypeName"></sa-td>
 					<sa-td name="日期" type="date" prop="dayTime"></sa-td>
 					<sa-td name="数量" prop="num"></sa-td>
 					<!--					<sa-td name="含税收入(元)" prop="taxMoney" ></sa-td>-->
@@ -138,6 +132,7 @@
 						beginDay: '', //查询开始时间
 						endDay: '', //查询结束时间
 					},
+					feeItemList: [],
 					tableSum: {
 						taxMoneySum: 0,
 						taxesSum: 0,
@@ -145,6 +140,11 @@
 					},
 				},
 				methods: {
+					getFeeItemList() {
+						sa.ajax('/TbFeeItem/getList', function(res) {
+							this.feeItemList = res.data;
+						}.bind(this));
+					},
 					judgeFn(data) {
 						sa.showIframe('统计审核', 'tb-fee-details-info.html?id=' + data.id, '600px', '60%');
 					},
@@ -340,6 +340,7 @@
 
 				},
 				created: function() {
+					this.getFeeItemList();
 					this.f5();
 					sa.onInputEnter();
 				}

+ 289 - 286
sp-admin/sa-view/tb-fee-statistics/year-statistcs-list.html

@@ -1,293 +1,296 @@
 <!DOCTYPE html>
 <html>
-<head>
-    <title>月统计表-列表</title>
-    <meta charset="utf-8">
-    <meta name="viewport"
-          content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"/>
-    <!-- 所有的 css & js 资源 -->
-    <link rel="stylesheet" href="https://unpkg.com/element-ui@2.13.0/lib/theme-chalk/index.css">
-    <link rel="stylesheet" href="../../static/sa.css">
-    <script src="https://unpkg.com/vue@2.6.10/dist/vue.js"></script>
-    <script src="https://unpkg.com/element-ui@2.13.0/lib/index.js"></script>
-    <script src="https://unpkg.com/http-vue-loader@1.4.2/src/httpVueLoader.js"></script>
-    <script src="https://unpkg.com/jquery@3.4.1/dist/jquery.js"></script>
-    <script src="https://www.layuicdn.com/layer-v3.1.1/layer.js"></script>
-    <script src="../../static/sa.js"></script>
-</head>
-<body>
-<div class="vue-box" style="display: none;" :style="'display: block;'">
-    <div class="c-panel">
-        <!-- ------------- 检索参数 ------------- -->
-        <div class="c-title">检索参数</div>
-        <el-form ref="form" :model='p' @submit.native.prevent>
-            <div class="c-item">
-                <label class="c-label">收费类型:</label>
-                <el-select v-model="p.feeType" placeholder="请选择" filterable>
-                    <el-option label="-全部-" value=""></el-option>
-                    <el-option label="核酸检测" value="1"></el-option>
-                    <el-option label="消杀作业" value="2"></el-option>
-                    <el-option label="装卸作业" value="3"></el-option>
-                    <el-option label="停车业务" value="4"></el-option>
-                    <el-option label="过磅费" value="5"></el-option>
-                    <el-option label="入场管理费" value="6"></el-option>
-                    <el-option label="充电打冷作业" value="7"></el-option>
-                </el-select>
-            </div>
-            <div class="c-item">
-                <label class="c-label">日期:</label>
-                <el-date-picker type="year" value-format="yyyy" v-model="p.year"></el-date-picker>
-            </div>
-            <el-button type="primary" icon="el-icon-search" @click="p.pageNo = 1; f5()">查询</el-button>
-            <br/>
-        </el-form>
-        <!-- ------------- 快捷按钮 ------------- -->
-        <div class="fast-btn">
-            <el-button size="mini" type="info" @click="sa.f5()">刷新</el-button>
-            <el-button class="c-btn" type="warning" icon="el-icon" @click="exportStats()">导出</el-button>
-            <el-button class="c-btn" type="success" icon="el-icon" @click="print()">打印</el-button>
-        </div>
-        <!-- ------------- 数据列表 ------------- -->
-        <el-table class="data-table" ref="data-table" :data="dataList" show-summary :summary-method="getSumRol">
-            <sa-td name="收费项目" prop="feeType" type="enum"
-                   :jv="{1: '核酸检测',2: '消杀作业', 3: '装卸作业', 4: '停车业务', 5: '过磅费', 6: '入场管理费', 7: '充电打冷作业'}"></sa-td>
-            <sa-td name="年份" prop="year"></sa-td>
-            <sa-td name="数量" prop="num"></sa-td>
-            <!--					<sa-td name="含税收入(元)" prop="statisticsMoney"></sa-td>-->
-            <el-table-column label="含税收入(元)">
-                <template slot-scope="s">
-                    <span>{{Number(s.row.taxMoney).toFixed(2)}}</span>
-                </template>
-            </el-table-column>
-            <el-table-column label="税率(%)">
-                <template slot-scope="s">
-                    <span>{{s.row.taxRate * 100}}</span>
-                </template>
-            </el-table-column>
-            <!--					<sa-td name="税款(元)" prop="taxes" ></sa-td>-->
-            <el-table-column label="税款(元)">
-                <template slot-scope="s">
-                    <span>{{Number(s.row.taxes).toFixed(2)}}</span>
-                </template>
-            </el-table-column>
-            <!--					<sa-td name="不含税收入(元)" prop="noTaxMoney" ></sa-td>-->
-            <el-table-column label="不含税收入(元)">
-                <template slot-scope="s">
-                    <span>{{Number(s.row.noTaxMoney).toFixed(2)}}</span>
-                </template>
-            </el-table-column>
-            <!--					<el-table-column label="操作" fixed="right"  width="240px">-->
-            <!--						<template slot-scope="s">-->
-            <!--							<el-button class="c-btn" type="success" icon="el-icon-view" @click="get(s.row)">查看</el-button>-->
-            <!--							<el-button class="c-btn" type="primary" icon="el-icon-edit" @click="update(s.row)">修改</el-button>-->
-            <!--							<el-button class="c-btn" type="danger" icon="el-icon-delete" @click="del(s.row)">删除</el-button>-->
-            <!--						</template>-->
-            <!--					</el-table-column>-->
-        </el-table>
-        <!-- ------------- 分页 ------------- -->
-        <sa-item type="page" :curr.sync="p.pageNo" :size.sync="p.pageSize" :total="dataCount" @change="f5()"></sa-item>
-    </div>
-</div>
-<script>
-    var app = new Vue({
-        components: {
-            "sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue'),
-            "sa-td": httpVueLoader('../../sa-frame/com/sa-td.vue'),
-        },
-        el: '.vue-box',
-        data: {
-            p: { // 查询参数
-                id: '',		// 主键
-                feeType: '',		// 收费类型(1=核酸检测,2=消杀作业,3=装卸作业,4=停车费,5=过磅费,6=入场管理费)
-                itemTypeId: '',		// 业务类型id
-                itemTypeName: '',		// 业务类型
-                year: '',		// 年份
-                month: '',		// 月份
-                day: '',		// 天
-                dayTime: '',		// 日期
-                num: '',		// 数量
-                taxMoney: '',		// 税款
-                taxRate: '',		// 税率
-                noTaxMoney: '',		// 不含税款
-                payType: '',		// 支付方式(1=微信支付)
-                isYear: 1,
-                pageNo: 1,		// 当前页
-                pageSize: 10,	// 页大小
-                sortType: 0		// 排序方式
-            },
-            dataCount: 0,
-            dataList: [], // 数据集合
-            tableSum: {
-                taxMoneySum: 0,
-                taxesSum: 0,
-                noTaxMoneySum: 0,
-            },
-        },
-        methods: {
-            getSumRol(param) {
-                console.log("执行了getSumRol")
-                const columns = param.columns;
-                const sums = [];
-                columns.forEach((column, index) => {
-                    if (index === 0) {
-                        sums[index] = "合计";
-                        return;
-                    }
-                    //根据当前列绑定的字段名进行判断,根据字段名决定展示什么内容
-                    switch (column.label) {
-                        //金额;
-                        case "含税收入(元)":
-                            //在这里你就可以根据需要对数据进行一些处理(保留小数位数,加上单位等)
-                            sums[index] = this.tableSum.taxMoneySum;
-                            break;
-                        //人数
-                        case "税款(元)":
-                            sums[index] = this.tableSum.taxesSum;
-                            break;
-                        //件数;
-                        case "不含税收入(元)":
-                            sums[index] = this.tableSum.noTaxMoneySum;
-                            break;
-                        //不需要计算合计的列就展示‘--’
-                        default:
-                            sums[index] = "";
-                            break;
-                    }
-                });
-                return sums;
-            },
-            calcuSum() {
-                var taxMoneySum = 0;
-                var taxesSum = 0;
-                var noTaxMoneySum = 0;
-                var len = this.dataList.length;
-                for (var i = 0; i < len; i++) {
-                    taxMoneySum = (taxMoneySum * 100 + this.dataList[i].taxMoney * 100) / 100;
-                    taxesSum = (taxesSum * 100 + this.dataList[i].taxes * 100) / 100;
-                    noTaxMoneySum = (noTaxMoneySum * 100 + this.dataList[i].noTaxMoney * 100) / 100;
-                }
-                this.tableSum.taxMoneySum = Number(taxMoneySum).toFixed(2);
-                this.tableSum.taxesSum = Number(taxesSum).toFixed(2);
-                this.tableSum.noTaxMoneySum = Number(noTaxMoneySum).toFixed(2);
+	<head>
+		<title>月统计表-列表</title>
+		<meta charset="utf-8">
+		<meta name="viewport"
+			content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
+		<!-- 所有的 css & js 资源 -->
+		<link rel="stylesheet" href="https://unpkg.com/element-ui@2.13.0/lib/theme-chalk/index.css">
+		<link rel="stylesheet" href="../../static/sa.css">
+		<script src="https://unpkg.com/vue@2.6.10/dist/vue.js"></script>
+		<script src="https://unpkg.com/element-ui@2.13.0/lib/index.js"></script>
+		<script src="https://unpkg.com/http-vue-loader@1.4.2/src/httpVueLoader.js"></script>
+		<script src="https://unpkg.com/jquery@3.4.1/dist/jquery.js"></script>
+		<script src="https://www.layuicdn.com/layer-v3.1.1/layer.js"></script>
+		<script src="../../static/sa.js"></script>
+	</head>
+	<body>
+		<div class="vue-box" style="display: none;" :style="'display: block;'">
+			<div class="c-panel">
+				<!-- ------------- 检索参数 ------------- -->
+				<div class="c-title">检索参数</div>
+				<el-form ref="form" :model='p' @submit.native.prevent>
+					<div class="c-item">
+						<label class="c-label">收费类型:</label>
+						<el-select v-model="p.feeType" placeholder="请选择" filterable>
+							<el-option label="-全部-" value=""></el-option>
+							<el-option v-for="(item,index) in feeItemList" :label="item.name" :value="item.id"
+								:key="index">
+							</el-option>
+						</el-select>
+					</div>
+					<div class="c-item">
+						<label class="c-label">日期:</label>
+						<el-date-picker type="year" value-format="yyyy" v-model="p.year"></el-date-picker>
+					</div>
+					<el-button type="primary" icon="el-icon-search" @click="p.pageNo = 1; f5()">查询</el-button>
+					<br />
+				</el-form>
+				<!-- ------------- 快捷按钮 ------------- -->
+				<div class="fast-btn">
+					<el-button size="mini" type="info" @click="sa.f5()">刷新</el-button>
+					<el-button class="c-btn" type="warning" icon="el-icon" @click="exportStats()">导出</el-button>
+					<el-button class="c-btn" type="success" icon="el-icon" @click="print()">打印</el-button>
+				</div>
+				<!-- ------------- 数据列表 ------------- -->
+				<el-table class="data-table" ref="data-table" :data="dataList" show-summary :summary-method="getSumRol">
+					<sa-td name="收费项目" prop="feeTypeName"></sa-td>
+					<sa-td name="年份" prop="year"></sa-td>
+					<sa-td name="数量" prop="num"></sa-td>
+					<!--					<sa-td name="含税收入(元)" prop="statisticsMoney"></sa-td>-->
+					<el-table-column label="含税收入(元)">
+						<template slot-scope="s">
+							<span>{{Number(s.row.taxMoney).toFixed(2)}}</span>
+						</template>
+					</el-table-column>
+					<el-table-column label="税率(%)">
+						<template slot-scope="s">
+							<span>{{s.row.taxRate * 100}}</span>
+						</template>
+					</el-table-column>
+					<!--					<sa-td name="税款(元)" prop="taxes" ></sa-td>-->
+					<el-table-column label="税款(元)">
+						<template slot-scope="s">
+							<span>{{Number(s.row.taxes).toFixed(2)}}</span>
+						</template>
+					</el-table-column>
+					<!--					<sa-td name="不含税收入(元)" prop="noTaxMoney" ></sa-td>-->
+					<el-table-column label="不含税收入(元)">
+						<template slot-scope="s">
+							<span>{{Number(s.row.noTaxMoney).toFixed(2)}}</span>
+						</template>
+					</el-table-column>
+					<!--					<el-table-column label="操作" fixed="right"  width="240px">-->
+					<!--						<template slot-scope="s">-->
+					<!--							<el-button class="c-btn" type="success" icon="el-icon-view" @click="get(s.row)">查看</el-button>-->
+					<!--							<el-button class="c-btn" type="primary" icon="el-icon-edit" @click="update(s.row)">修改</el-button>-->
+					<!--							<el-button class="c-btn" type="danger" icon="el-icon-delete" @click="del(s.row)">删除</el-button>-->
+					<!--						</template>-->
+					<!--					</el-table-column>-->
+				</el-table>
+				<!-- ------------- 分页 ------------- -->
+				<sa-item type="page" :curr.sync="p.pageNo" :size.sync="p.pageSize" :total="dataCount" @change="f5()">
+				</sa-item>
+			</div>
+		</div>
+		<script>
+			var app = new Vue({
+				components: {
+					"sa-item": httpVueLoader('../../sa-frame/com/sa-item.vue'),
+					"sa-td": httpVueLoader('../../sa-frame/com/sa-td.vue'),
+				},
+				el: '.vue-box',
+				data: {
+					p: { // 查询参数
+						id: '', // 主键
+						feeType: '', // 收费类型(1=核酸检测,2=消杀作业,3=装卸作业,4=停车费,5=过磅费,6=入场管理费)
+						itemTypeId: '', // 业务类型id
+						itemTypeName: '', // 业务类型
+						year: '', // 年份
+						month: '', // 月份
+						day: '', // 天
+						dayTime: '', // 日期
+						num: '', // 数量
+						taxMoney: '', // 税款
+						taxRate: '', // 税率
+						noTaxMoney: '', // 不含税款
+						payType: '', // 支付方式(1=微信支付)
+						isYear: 1,
+						pageNo: 1, // 当前页
+						pageSize: 10, // 页大小
+						sortType: 0 // 排序方式
+					},
+					dataCount: 0,
+					dataList: [], // 数据集合
+					feeItemList:[],
+					tableSum: {
+						taxMoneySum: 0,
+						taxesSum: 0,
+						noTaxMoneySum: 0,
+					},
+				},
+				methods: {
+					getFeeItemList() {
+						sa.ajax('/TbFeeItem/getList', function(res) {
+							this.feeItemList = res.data;
+						}.bind(this));
+					},
+					getSumRol(param) {
+						const columns = param.columns;
+						const sums = [];
+						columns.forEach((column, index) => {
+							if (index === 0) {
+								sums[index] = "合计";
+								return;
+							}
+							//根据当前列绑定的字段名进行判断,根据字段名决定展示什么内容
+							switch (column.label) {
+								//金额;
+								case "含税收入(元)":
+									//在这里你就可以根据需要对数据进行一些处理(保留小数位数,加上单位等)
+									sums[index] = this.tableSum.taxMoneySum;
+									break;
+									//人数
+								case "税款(元)":
+									sums[index] = this.tableSum.taxesSum;
+									break;
+									//件数;
+								case "不含税收入(元)":
+									sums[index] = this.tableSum.noTaxMoneySum;
+									break;
+									//不需要计算合计的列就展示‘--’
+								default:
+									sums[index] = "";
+									break;
+							}
+						});
+						return sums;
+					},
+					calcuSum() {
+						var taxMoneySum = 0;
+						var taxesSum = 0;
+						var noTaxMoneySum = 0;
+						var len = this.dataList.length;
+						for (var i = 0; i < len; i++) {
+							taxMoneySum = (taxMoneySum * 100 + this.dataList[i].taxMoney * 100) / 100;
+							taxesSum = (taxesSum * 100 + this.dataList[i].taxes * 100) / 100;
+							noTaxMoneySum = (noTaxMoneySum * 100 + this.dataList[i].noTaxMoney * 100) / 100;
+						}
+						this.tableSum.taxMoneySum = Number(taxMoneySum).toFixed(2);
+						this.tableSum.taxesSum = Number(taxesSum).toFixed(2);
+						this.tableSum.noTaxMoneySum = Number(noTaxMoneySum).toFixed(2);
 
-            },
-            getTotalMoney() {
-                sa.ajax('/TbFeeStatistics/getSum', sa.removeNull(this.p), function (res) {
-                    this.tableSum.taxMoneySum = res.data.taxMoneySum;
-                    this.tableSum.taxesSum = res.data.taxesSum;
-                    this.tableSum.noTaxMoneySum = res.data.noTaxMoneySum;
-                }.bind(this));
-            },
-            print: function () {
-                var year = this.p.year;
-                var feeType = this.p.feeType;
-                var str = '';
-                if (year === '') {
-                    str += '所有年份';
-                } else {
-                    str += year + '年'
-                }
-                if (feeType === '') {
-                    str += "、所有收费项目";
-                } else {
-                    var feeTypeName = '';
-                    if (feeType == 1) {
-                        feeTypeName = "核酸检测";
-                    } else if (feeType == 2) {
-                        feeTypeName = "消杀作业";
-                    } else if (feeType == 3) {
-                        feeTypeName = "装卸作业";
-                    } else if (feeType == 4) {
-                        feeTypeName = "停车费";
-                    } else if (feeType == 5) {
-                        feeTypeName = "过磅费";
-                    } else if (feeType == 6) {
-                        feeTypeName = "入场管理费";
-                    } else if (feeType == 7) {
-                        feeTypeName = "充电打冷作业";
-                    }
-                    str += "、收费项目为" + feeTypeName;
-                }
+					},
+					getTotalMoney() {
+						sa.ajax('/TbFeeStatistics/getSum', sa.removeNull(this.p), function(res) {
+							this.tableSum.taxMoneySum = res.data.taxMoneySum;
+							this.tableSum.taxesSum = res.data.taxesSum;
+							this.tableSum.noTaxMoneySum = res.data.noTaxMoneySum;
+						}.bind(this));
+					},
+					print: function() {
+						var year = this.p.year;
+						var feeType = this.p.feeType;
+						var str = '';
+						if (year === '') {
+							str += '所有年份';
+						} else {
+							str += year + '年'
+						}
+						if (feeType === '') {
+							str += "、所有收费项目";
+						} else {
+							var feeTypeName = '';
+							if (feeType == 1) {
+								feeTypeName = "核酸检测";
+							} else if (feeType == 2) {
+								feeTypeName = "消杀作业";
+							} else if (feeType == 3) {
+								feeTypeName = "装卸作业";
+							} else if (feeType == 4) {
+								feeTypeName = "停车费";
+							} else if (feeType == 5) {
+								feeTypeName = "过磅费";
+							} else if (feeType == 6) {
+								feeTypeName = "入场管理费";
+							} else if (feeType == 7) {
+								feeTypeName = "充电打冷作业";
+							}
+							str += "、收费项目为" + feeTypeName;
+						}
 
-                this.$confirm('确定打印' + str + '的数据?', '提示', {
-                    confirmButtonText: '确定',
-                    cancelButtonText: '取消',
-                    type: 'warning'
-                }).then(() => {
-                    sa.showIframe('打印年报表', 'yearStatsPrint.html?year=' + year + "&feeType=" + feeType + "&isYear=1", '1000px', '100%');
-                }).catch(() => {
+						this.$confirm('确定打印' + str + '的数据?', '提示', {
+							confirmButtonText: '确定',
+							cancelButtonText: '取消',
+							type: 'warning'
+						}).then(() => {
+							sa.showIframe('打印年报表', 'yearStatsPrint.html?year=' + year + "&feeType=" +
+								feeType + "&isYear=1", '1000px', '100%');
+						}).catch(() => {
 
-                });
-            },
-            exportStats() {
-                var year = this.p.year;
-                var feeType = this.p.feeType;
-                var str = '';
-                if (year === '') {
-                    str += '所有年份';
-                } else {
-                    str += year + '年'
-                }
-                if (feeType === '') {
-                    str += "、所有收费项目";
-                } else {
-                    var feeTypeName = '';
-                    if (feeType == 1) {
-                        feeTypeName = "核酸检测";
-                    } else if (feeType == 2) {
-                        feeTypeName = "消杀作业";
-                    } else if (feeType == 3) {
-                        feeTypeName = "装卸作业";
-                    } else if (feeType == 4) {
-                        feeTypeName = "停车费";
-                    } else if (feeType == 5) {
-                        feeTypeName = "过磅费";
-                    } else if (feeType == 6) {
-                        feeTypeName = "入场管理费";
-                    } else if (feeType == 7) {
-                        feeTypeName = "充电打冷作业";
-                    }
-                    str += "、收费项目为" + feeTypeName;
-                }
-                this.$confirm('确定导出' + str + '的数据?', '提示', {
-                    confirmButtonText: '确定',
-                    cancelButtonText: '取消',
-                    type: 'warning'
-                }).then(() => {
-                    sa.ajax('/TbFeeStatistics/export/stats', sa.removeNull(this.p), function (resp) {
-                        window.open(resp.data);
-                    }.bind(this));
-                }).catch(() => {
+						});
+					},
+					exportStats() {
+						var year = this.p.year;
+						var feeType = this.p.feeType;
+						var str = '';
+						if (year === '') {
+							str += '所有年份';
+						} else {
+							str += year + '年'
+						}
+						if (feeType === '') {
+							str += "、所有收费项目";
+						} else {
+							var feeTypeName = '';
+							if (feeType == 1) {
+								feeTypeName = "核酸检测";
+							} else if (feeType == 2) {
+								feeTypeName = "消杀作业";
+							} else if (feeType == 3) {
+								feeTypeName = "装卸作业";
+							} else if (feeType == 4) {
+								feeTypeName = "停车费";
+							} else if (feeType == 5) {
+								feeTypeName = "过磅费";
+							} else if (feeType == 6) {
+								feeTypeName = "入场管理费";
+							} else if (feeType == 7) {
+								feeTypeName = "充电打冷作业";
+							}
+							str += "、收费项目为" + feeTypeName;
+						}
+						this.$confirm('确定导出' + str + '的数据?', '提示', {
+							confirmButtonText: '确定',
+							cancelButtonText: '取消',
+							type: 'warning'
+						}).then(() => {
+							sa.ajax('/TbFeeStatistics/export/stats', sa.removeNull(this.p), function(resp) {
+								window.open(resp.data);
+							}.bind(this));
+						}).catch(() => {
 
-                });
-            },
-            // 刷新
-            f5: function () {
-                sa.ajax('/TbFeeStatistics/getYear', sa.removeNull(this.p), function (res) {
-                    this.dataList = res.data; // 数据
-                    this.dataCount = res.dataCount; // 数据总数
-                    sa.f5TableHeight();		// 刷新表格高度
-                }.bind(this));
-                this.getTotalMoney();
-            },
-            // 查看
-            get: function (data) {
-                sa.showIframe('数据详情', 'year-statistcs-info.html?id=' + data.id, '1050px', '90%');
-            },
-            // 查看 - 根据选中的
-            getBySelect: function (data) {
-                var selection = this.$refs['data-table'].selection;
-                if (selection.length == 0) {
-                    return sa.msg('请选择一条数据')
-                }
-                this.get(selection[0]);
-            },
-        },
-        created: function () {
-            this.f5();
-            sa.onInputEnter();
-        }
-    })
-</script>
-</body>
+						});
+					},
+					// 刷新
+					f5: function() {
+						sa.ajax('/TbFeeStatistics/getYear', sa.removeNull(this.p), function(res) {
+							this.dataList = res.data; // 数据
+							this.dataCount = res.dataCount; // 数据总数
+							sa.f5TableHeight(); // 刷新表格高度
+						}.bind(this));
+						this.getTotalMoney();
+					},
+					// 查看
+					get: function(data) {
+						sa.showIframe('数据详情', 'year-statistcs-info.html?id=' + data.id, '1050px', '90%');
+					},
+					// 查看 - 根据选中的
+					getBySelect: function(data) {
+						var selection = this.$refs['data-table'].selection;
+						if (selection.length == 0) {
+							return sa.msg('请选择一条数据')
+						}
+						this.get(selection[0]);
+					},
+				},
+				created: function() {
+					this.getFeeItemList();
+					this.f5();
+					sa.onInputEnter();
+				}
+			})
+		</script>
+	</body>
 </html>

+ 1 - 1
sp-admin/sa-view/tb-item-type/tb-item-edit.html

@@ -48,7 +48,7 @@
                     </el-select>
                 </div>
                 <div class="c-item">
-                    <label class="c-label">统计类:</label>
+                    <label class="c-label">统计类:</label>
                     <el-select v-model="m.payType">
                         <el-option v-for="item in payTypeList" :key="item.id" :value="item.id"
                                    :label="item.name">

+ 2 - 0
sp-server/src/main/java/com/pj/api/jh/service/JhService.java

@@ -77,6 +77,7 @@ public class JhService {
             throw new BusinessException("金额不正确");
         }
         String openid = request.getParameter("openid");
+        String calculateId = request.getParameter("calculateId");
         String desc = handlerDesc(request.getParameter("desc"));
         String businessId = request.getParameter("b");
         String c = request.getParameter("c");
@@ -129,6 +130,7 @@ public class JhService {
             object.set("outTradeNo", out_trade_no);
             TbOrder tbOrder = new TbOrder();
             tbOrder.setAttach(attchStr)
+                    .setCalculateId(calculateId)
                     .setOpenid(openid)
                     .setOrderTime(new Date())
                     .setOutTradeNo(out_trade_no).setPrice(money);

+ 54 - 23
sp-server/src/main/java/com/pj/api/open/service/OpenService.java

@@ -14,12 +14,17 @@ import com.pj.constants.business.GoodsEnum;
 import com.pj.constants.business.PayEnum;
 import com.pj.current.config.PartConfig;
 import com.pj.current.task.TaskService;
+import com.pj.project.sync.SyncService;
+import com.pj.project.sync.request.item.IOrderItem;
+import com.pj.project.sync.response.IOrderPriceRes;
 import com.pj.project.tb_account.AutomaticPay;
 import com.pj.project.tb_business.TbBusiness;
 import com.pj.project.tb_business.TbBusinessService;
 
 import com.pj.project.tb_business_car.TbBusinessCar;
 import com.pj.project.tb_business_car.TbBusinessCarService;
+import com.pj.project.tb_business_item.TbBusinessItem;
+import com.pj.project.tb_business_item.TbBusinessItemService;
 import com.pj.project.tb_car.TbCar;
 import com.pj.project.tb_car.TbCarService;
 import com.pj.project.tb_deduction_bind.TbDeductionBindService;
@@ -39,6 +44,7 @@ import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -73,6 +79,11 @@ public class OpenService {
     @Resource
     private TbMildCarService tbMildCarService;
 
+    @Resource
+    private TbBusinessItemService tbBusinessItemService;
+    @Resource
+    private SyncService syncService;
+
     public ResultJson checkCarNumber(CheckCarNumberBO checkCarNumberBO) {
         String carNo = checkCarNumberBO.getCarNumber();
         int inOrOut = checkCarNumberBO.getInOrOut();
@@ -140,6 +151,7 @@ public class OpenService {
     }
 
     final TimedCache<String, String> IMAGE_CACHE = CacheUtil.newTimedCache(30 * 60 * 1000);
+    final TimedCache<String, BigDecimal> BUSINESS_MONEY_CACHE = CacheUtil.newTimedCache(5000);
 
     private ResultJson handlerOut(String carNo, String channel, String image) {
         carNo = carNo.toUpperCase();
@@ -190,17 +202,19 @@ public class OpenService {
         BigDecimal yueCarMoney = new BigDecimal(0);
         BigDecimal chinaCarMoney = new BigDecimal(0);
         List<TbBusiness> businessList = tbBusinessService.findOtherBusinessByCarId(businessCarId);
-        int payPart=tbBusinessCar.getPay();
-        businessList=businessList.stream().filter(tbBusiness -> tbBusiness.getPayStatus()!= PayEnum.PayStatusEnum.HAS_PAY_CONFIRM.getCode()).collect(Collectors.toList());
+        int payPart = tbBusinessCar.getPay();
+        businessList = businessList.stream().filter(tbBusiness -> tbBusiness.getPayStatus() != PayEnum.PayStatusEnum.HAS_PAY_CONFIRM.getCode()).collect(Collectors.toList());
         if (businessList.isEmpty()) {//无业务车辆===>计算停车费
             //如果已经支付过,则从支付时间算起,重新计算停车费
-            double dif = tbBusinessService.calculationPartMoney(tbBusinessCar.getRealInTime(), now,tbBusinessCar.getCarSize()).doubleValue();
-            if (dif > 0&&payPart==0) {
+            IOrderPriceRes res = tbBusinessService.getPartMoney(tbBusinessCar.getRealInTime(), now, tbBusinessCar.getCarSize(), tbBusinessCar.getColor());
+            double dif = res.getTotalOrderPrice().doubleValue();
+            // double dif = tbBusinessService.calculationPartMoney(tbBusinessCar.getRealInTime(), now, tbBusinessCar.getCarSize()).doubleValue();
+            if (dif > 0 && payPart == 0) {
                 RedisUtil.setByMINUTES(channel, carNo, 5);
                 log.error("请求返回:请缴停车费:{},{}元", carNo, dif);
                 //是否可以预充值缴费 true扣款成功 false否
-                boolean flag = automaticPay.payPartMoney(tbBusinessCar,dif, now);
-                if (flag){
+                boolean flag = automaticPay.payPartMoney(tbBusinessCar, dif, now);
+                if (flag) {
                     tbBusinessCar.setMoney(new BigDecimal(dif));
                     freeOut(tbBusinessCar, now, channel, image);
                     automaticPay.unbindRun(carNo);
@@ -225,8 +239,10 @@ public class OpenService {
                     TbGoods tbGoods = tbGoodsService.getById(tbBusiness.getGoodsId());
                     return tbGoods.getChinaCarPay() == 1;
                 });
-                if (chinaCarPay&&payPart==0) {
-                    double dif = tbBusinessService.calculationPartMoney(tbBusinessCar.getRealInTime(), now,tbBusinessCar.getCarSize()).doubleValue();
+                if (chinaCarPay && payPart == 0) {
+                    IOrderPriceRes res = tbBusinessService.getPartMoney(tbBusinessCar.getRealInTime(), now, tbBusinessCar.getCarSize(), tbBusinessCar.getColor());
+                    double dif = res.getTotalOrderPrice().doubleValue();
+                    // double dif = tbBusinessService.calculationPartMoney(tbBusinessCar.getRealInTime(), now, tbBusinessCar.getCarSize()).doubleValue();
                     if (dif > 0) {
                         RedisUtil.setByMINUTES(channel, carNo, 5);
                         log.error("中国车停车费:{},{}元", carNo, dif);
@@ -243,8 +259,10 @@ public class OpenService {
                     TbGoods tbGoods = tbGoodsService.getById(tbBusiness.getGoodsId());
                     return tbGoods.getVietnamCarPay() == 1;
                 });
-                if (vietnamCarPay&&payPart==0) {
-                    double dif = tbBusinessService.calculationPartMoney(tbBusinessCar.getRealInTime(), now,tbBusinessCar.getCarSize()).doubleValue();
+                if (vietnamCarPay && payPart == 0) {
+                    IOrderPriceRes res = tbBusinessService.getPartMoney(tbBusinessCar.getRealInTime(), now, tbBusinessCar.getCarSize(), tbBusinessCar.getColor());
+                    double dif = res.getTotalOrderPrice().doubleValue();
+                    // double dif = tbBusinessService.calculationPartMoney(tbBusinessCar.getRealInTime(), now, tbBusinessCar.getCarSize()).doubleValue();
                     if (dif > 0) {
                         RedisUtil.setByMINUTES(channel, carNo, 5);
                         log.error("越南车停车费:{},{}元", carNo, dif);
@@ -259,8 +277,15 @@ public class OpenService {
             }
         }
         //============业务费计算是否交完
-        BigDecimal businessMoney = new BigDecimal(0);
-        int autoPayCount=0;
+        BigDecimal businessMoney = BUSINESS_MONEY_CACHE.get(carNo);
+        if (businessMoney == null) {
+            businessMoney = new BigDecimal("0");
+        }
+        int autoPayCount = 0;
+        List<IOrderItem> expenses = new ArrayList<>();
+        List<String> businessIds = businessList.stream().map(TbBusiness::getId).collect(Collectors.toList());
+        List<TbBusinessItem> businessItems = tbBusinessItemService.findByBusinessId(businessIds);
+
         for (TbBusiness tbBusiness : businessList) {
             TbGoods tbGoods = tbGoodsService.getById(tbBusiness.getGoodsId());
             if (GoodsEnum.DeductionTypeEnum.OUT_KK.getCode().equals(tbGoods.getAutoDeductionType())) {
@@ -269,36 +294,44 @@ public class OpenService {
             int vietnamLeave = tbGoods.getVietnamCarLeave();
             int chinaCarLeave = tbGoods.getChinaCarLeave();
             boolean pay = tbBusiness.getPayMoney().doubleValue() >= tbBusiness.getItemPrice().doubleValue();
+
             //需要交业务费
             if (CarEnum.CarTypeEnum.WEIGHT_TYPE.getType().equals(carType)) {//越南车==重车
                 if (GoodsEnum.LeaveEnum.PART_MONEY.getCode() != vietnamLeave
                         && !pay) {
                     RedisUtil.setByMINUTES(channel, carNo, 5);
+                    tbBusinessItemService.buildExpenses(businessItems, expenses);
                     log.error("越南车==重车:缴纳业务费用:{}", carNo);
-                    businessMoney = businessMoney.add(tbBusiness.getItemPrice());
+                    // businessMoney = businessMoney.add(tbBusiness.getItemPrice());
                     // return ResultJson.error("请缴纳业务费用");
                 }
             } else {
                 if (GoodsEnum.LeaveEnum.PART_MONEY.getCode() != chinaCarLeave
                         && !pay) {
                     RedisUtil.setByMINUTES(channel, carNo, 5);
-                    businessMoney = businessMoney.add(tbBusiness.getItemPrice());
+                    tbBusinessItemService.buildExpenses(businessItems, expenses);
+//                    businessMoney = businessMoney.add(tbBusiness.getItemPrice());
                     log.error("需要缴纳业务费用:{},{}", carNo, businessMoney.toString());
                     // return ResultJson.error("请缴纳业务费用");
                 }
             }
         }
+        if (!expenses.isEmpty()) {
+            IOrderPriceRes res = syncService.orderPriceCal(expenses);
+            businessMoney = res.getTotalOrderPrice();
+            BUSINESS_MONEY_CACHE.put(carNo, businessMoney);
+        }
         if (autoPayCount == businessList.size()) {
             log.info("车辆到达卡口进行扣停车费和业务费:{}", carNo);
             //自动缴费
-          boolean flag=  automaticPay.payBusinessAndPartMoney(businessList,businessMoney,tbBusinessCar,chinaCarMoney,yueCarMoney);
-          if (flag){
-              tbDeductionBindService.autoUnbindCar(tbBusinessCar.getCarNo());
-              freeOut(tbBusinessCar, now, channel, image);
-              return ResultJson.success();
-          }
+            boolean flag = automaticPay.payBusinessAndPartMoney(businessList, businessMoney, tbBusinessCar, chinaCarMoney, yueCarMoney);
+            if (flag) {
+                tbDeductionBindService.autoUnbindCar(tbBusinessCar.getCarNo());
+                freeOut(tbBusinessCar, now, channel, image);
+                return ResultJson.success();
+            }
         }
-        BigDecimal carMoney=chinaCarMoney.add(yueCarMoney);
+        BigDecimal carMoney = chinaCarMoney.add(yueCarMoney);
         BigDecimal total = businessMoney.add(carMoney);
         if (total.doubleValue() > 0) {
             String desc = "请缴";
@@ -317,8 +350,6 @@ public class OpenService {
     }
 
 
-
-
     private void freeOut(TbBusinessCar tbBusinessCar, Date now, String outChannel, String base64Image) {
         if (StrUtil.equals(tbBusinessCar.getPayType(), CarEnum.PayTypeEnum.NO_PAY_TYPE.getType())) {
             BigDecimal partMoney = tbBusinessService.calculationPartMoney(tbBusinessCar.getRealInTime(), now, tbBusinessCar.getCarSize());

+ 1 - 0
sp-server/src/main/java/com/pj/api/wx/bo/PriceBO.java

@@ -13,5 +13,6 @@ import java.math.BigDecimal;
 @NoArgsConstructor
 public class PriceBO {
     private String id;
+    private String uniqExpenseId;
     private BigDecimal p;
 }

+ 1 - 1
sp-server/src/main/java/com/pj/api/wx/service/WxService.java

@@ -261,7 +261,7 @@ public class WxService {
                 items = items.stream().filter(item -> item.getPayStatus() == 0).collect(Collectors.toList());
                 for (TbBusiness tbBusiness : businessList) {
                     tbBusiness.setPayTime(payTime).setPayType(PayEnum.PayType.WX_PAY.getCode()).setConfirmInput(1).setConfirmInputTime(payTime)
-                            .setPayMoney(tbBusiness.getItemPrice()).setPayOpenid(payopenid)
+                            .setPayMoney(tbBusiness.getItemPrice()).setPayOpenid(payopenid).setCalculateId(tbOrder.getCalculateId())
                             .setPayNo(transactionId).setOutTradeNo(outTradeNo);
                     tbBusiness.setPayStatus(PayEnum.PayStatusEnum.HAS_PAY_CONFIRM.getCode());
                     tbBusinessService.updateById(tbBusiness);

+ 6 - 0
sp-server/src/main/java/com/pj/project/relation_goods_type/RelationGoodsTypeService.java

@@ -100,4 +100,10 @@ public class RelationGoodsTypeService extends ServiceImpl<RelationGoodsTypeMappe
         ew.eq("type_id", typeId);
         return getOne(ew);
     }
+
+    public void removeByTypeId(String typeId) {
+        QueryWrapper<RelationGoodsType> ew = new QueryWrapper<>();
+        ew.eq("type_id", typeId);
+        this.remove(ew);
+    }
 }

+ 2 - 1
sp-server/src/main/java/com/pj/project/sync/SyncService.java

@@ -83,6 +83,7 @@ public class SyncService {
      * @param expenses
      */
     public IOrderPriceRes orderPriceCal(  List<IOrderItem> expenses ){
+        log.info("order price:{}",JSONUtil.toJsonStr(expenses));
         IOrderPriceReq iOrderPriceReq=new IOrderPriceReq();
         iOrderPriceReq.setSysId(pushfeeConfig.getSysId()).setExpenses(expenses).setOrderNum(1);
         SyncResultBO resultBO = helpService.req("/price/external/order/calc", iOrderPriceReq);
@@ -90,7 +91,7 @@ public class SyncService {
             IOrderPriceRes res = helpService.deCrypte(resultBO.getData(), IOrderPriceRes.class);
             return res;
         }
-        throw new AjaxError("订单计费出错");
+        throw new AjaxError(resultBO.getMsg());
     }
 
 }

+ 4 - 0
sp-server/src/main/java/com/pj/project/tb_business/TbBusiness.java

@@ -305,6 +305,10 @@ public class TbBusiness extends Model<TbBusiness> implements Serializable {
      * 件数
      */
     private int businessGoodsNum;
+    /**
+     * 计费系统订单计算ID
+     */
+    private String calculateId;
 
 
 

+ 0 - 17
sp-server/src/main/java/com/pj/project/tb_business/TbBusinessController.java

@@ -96,23 +96,6 @@ public class TbBusinessController {
         return AjaxJson.getSuccess();
     }
 
-    /**
-     * 手动入场确认 see adminSetIn
-     */
-    @RequestMapping("adminConfirmIn")
-    @Transactional(rollbackFor = Exception.class)
-    @Deprecated
-    public AjaxJson adminConfirmIn() {
-        if (!StrUtil.equals(StpUserUtil.getCustomerId(), UserTypeEnum.PLATFORM_ADMIN.getCustomerId())) {
-            return AjaxJson.getError("无确认入场权限");
-        }
-        SoMap so = SoMap.getRequestSoMap();
-        String id = so.getString("id");
-        String inChannel = so.getString("inChannel");
-        tbBusinessService.adminConfirmIn(id, inChannel);
-        return AjaxJson.getSuccess();
-    }
-
 
     /**
      * 查 - 根据id

+ 47 - 70
sp-server/src/main/java/com/pj/project/tb_business/TbBusinessService.java

@@ -43,6 +43,7 @@ import com.pj.project.sync.request.IOrderPriceReq;
 import com.pj.project.sync.request.item.IFactorItem;
 import com.pj.project.sync.request.item.IOrderItem;
 import com.pj.project.sync.response.IOrderPriceRes;
+import com.pj.project.sync.response.item.IExpenseItem;
 import com.pj.project.tb_account.AutomaticPay;
 import com.pj.project.tb_account.TbAccount;
 import com.pj.project.tb_account.TbAccountService;
@@ -126,14 +127,10 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
     @Resource
     private TbBusinessItemService tbBusinessItemService;
 
-    @Resource
-    TbUnitService tbUnitService;
-    @Resource
-    TbBusinessPeopleService tbBusinessPeopleService;
+
     @Resource
     private PartConfig partConfig;
-    @Resource
-    private CarConfig carConfig;
+
 
     @Resource
     private TbNoticesService tbNoticesService;
@@ -200,35 +197,6 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
         }
     }
 
-    private void createBusinessPeople(TbBusiness t) {
-        tbBusinessPeopleService.removeByBusinessId(t.getId());
-        List<TbBusinessPeople> peopleList = JSONUtil.toList(t.getPeopleJson(), TbBusinessPeople.class);
-        peopleList.forEach(tbBusinessPeople -> tbBusinessPeople.setBusinessId(t.getId()).setCreateTime(new Date()));
-        tbBusinessPeopleService.saveBatch(peopleList);
-    }
-
-    private void createCarUnit(TbBusiness t) {
-        TbUnit tbUnit = tbUnitService.findByUnit(t.getCardSize());
-        if (tbUnit == null) {
-            tbUnit = new TbUnit();
-            tbUnit.setUnit(t.getCardSize() + "");
-            tbUnitService.save(tbUnit);
-        }
-    }
-
-
-    private TbDriver createDriver(TbBusiness business) {
-        TbDriver tbDriver = tbDriverService.findByIdCardNo(business.getCardNo());
-        if (tbDriver == null) {
-            tbDriver = new TbDriver();
-            tbDriver.setCreateTime(new Date()).setIdCard(business.getCardNo())
-                    .setName(business.getDriverName()).setPhone(business.getDriverPhone());
-            tbDriverService.save(tbDriver);
-        }
-        return tbDriver;
-
-    }
-
 
     /**
      * 查集合 - 根据条件(参数为空时代表忽略指定条件)
@@ -351,23 +319,6 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
         });
     }
 
-
-    @Deprecated
-    public void adminConfirmIn(String id, String inChannel) {
-        TbBusiness tbBusiness = this.getById(id);
-        tbBusiness.setRealInTime(new Date()).setInChannel(inChannel);
-        this.updateById(tbBusiness);
-
-        //更新境外车入场记录
-
-        //更新中国车入场记录
-
-        //发送消息
-        String text = "您的车辆已入场,业务单号[" + tbBusiness.getNo() + "]";
-        tbNoticesService.sendNotice(tbBusiness.getId(), tbBusiness.getNo(), tbBusiness.getCustomerId(), text);
-
-    }
-
     /**
      * 计费系统计算停车费
      *
@@ -376,41 +327,56 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
      * @param carSize 车长
      * @return
      */
-    public IOrderPriceRes getPartMoney(Date iTime, Date oTime, double carSize) {
+    public IOrderPriceRes getPartMoney(Date iTime, Date oTime, double carSize, String carColor) {
         long minutes = DateUtil.between(iTime, oTime, DateUnit.MINUTE);
         double hours = NumberUtil.div(minutes, 60, 1);
         List<IOrderItem> expenses = new ArrayList<>();
-        TbItem tbItem = tbItemService.getPartItem();
-        if (tbItem == null) {
+        TbItemFac tbItemFac = tbItemFacService.getPartFac(carSize);
+        if (tbItemFac == null) {
             throw new AjaxError("未配置停车费规则");
         }
+        TbItem tbItem = tbItemService.getById(tbItemFac.getItemId());
         IOrderItem orderItem = new IOrderItem();
         orderItem.setUniqExpenseId(tbItem.getItemCode()).setExpenseNum(1);
         List<TbItemFac> facList = tbItemFacService.getByItemId(tbItem.getId());
         List<IFactorItem> factors = new ArrayList<>();
-        facList.forEach(tbItemFac -> {
-            String name = tbItemFac.getName();
-            IFactorItem iFactorItem = new IFactorItem();
-            iFactorItem.setFacId(tbItemFac.getId());
-            if (StrUtil.contains(name, "车")) {
+        facList.forEach(fac -> {
+            String operator = fac.getOperator();
+            if (StrUtil.equals(operator, "carSize")) {
+                IFactorItem iFactorItem = new IFactorItem();
+                iFactorItem.setFacId(fac.getFacId() + "");
                 iFactorItem.setFacParams(carSize + "");
-            } else if (StrUtil.contains(name, "时")) {
+                factors.add(iFactorItem);
+            } else if (StrUtil.equals(operator, "hour")) {
+                IFactorItem iFactorItem = new IFactorItem();
+                iFactorItem.setFacId(fac.getFacId() + "");
                 iFactorItem.setFacParams(hours + "");
+                factors.add(iFactorItem);
+            } else if (StrUtil.equals(operator, "carColor")) {
+                IFactorItem iFactorItem = new IFactorItem();
+                iFactorItem.setFacId(fac.getFacId() + "");
+                iFactorItem.setFacParams(carColor);
+                factors.add(iFactorItem);
             }
-            factors.add(iFactorItem);
         });
         orderItem.setFactors(factors);
+        expenses.add(orderItem);
         return syncService.orderPriceCal(expenses);
     }
 
     /**
      * 停车费因子构建
+     * qzyReal:
+     * 时长---hour;车长--carSize
+     * qzyReal:
+     * 颜色--carColor
+     *
      * @param iTime
      * @param oTime
      * @param carSize
      * @return
      */
-    public  List<IOrderItem> getPartExpenses(Date iTime, Date oTime, double carSize) {
+    public List<IOrderItem> getPartExpenses(Date iTime, Date oTime, double carSize) {
         long minutes = DateUtil.between(iTime, oTime, DateUnit.MINUTE);
         double hours = NumberUtil.div(minutes, 60, 1);
         List<IOrderItem> expenses = new ArrayList<>();
@@ -423,12 +389,12 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
         List<TbItemFac> facList = tbItemFacService.getByItemId(tbItem.getId());
         List<IFactorItem> factors = new ArrayList<>();
         facList.forEach(tbItemFac -> {
-            String name = tbItemFac.getName();
+            String operator = tbItemFac.getOperator();
             IFactorItem iFactorItem = new IFactorItem();
             iFactorItem.setFacId(tbItemFac.getId());
-            if (StrUtil.contains(name, "车")) {
+            if (StrUtil.equals(operator, "carSize")) {
                 iFactorItem.setFacParams(carSize + "");
-            } else if (StrUtil.contains(name, "时")) {
+            } else if (StrUtil.equals(operator, "hour")) {
                 iFactorItem.setFacParams(hours + "");
             }
             factors.add(iFactorItem);
@@ -523,6 +489,8 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
         int pay = tbBusinessCar.getPay();
         Map<String, Object> carMap = new HashMap<>();
         carMap.put("price", 0);
+        List<String> carCalculateIds = new ArrayList<>();
+        //停车费
         if (pay == 0 && inTime != null) {
             Date outTime = tbBusinessCar.getRealOutTime();
             String cacheCarNo = RedisUtil.get(channel);
@@ -534,6 +502,7 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
                 if (StrUtil.isEmpty(carType)) {
                     carType = CarEnum.CarTypeEnum.EMPTY_TYPE.getType();
                 }
+                //默认需要缴费--->
                 BigDecimal partMoney = new BigDecimal("1");
 
                 if (StrUtil.isNotEmpty(tbBusinessCar.getColor()) && tbBusinessCar.getCarSize() != null) {
@@ -555,9 +524,13 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
                     partMoney = new BigDecimal("0");
                 }
                 if (partMoney.doubleValue() == 1) {
-                    IOrderPriceRes partPrice = getPartMoney(inTime, outTime, tbBusinessCar.getCarSize());
-                    result.put("carCalculateId", partPrice.getCalculateId());
-                    partMoney = partPrice.getTotalOrderPrice();
+                    IOrderPriceRes partPriceRes = getPartMoney(inTime, outTime, tbBusinessCar.getCarSize(), tbBusinessCar.getColor());
+                   BigDecimal partPrice=partPriceRes.getTotalOrderPrice();
+                    carCalculateIds.add(partPriceRes.getCalculateId());
+                    partMoney =partPrice;
+                    if (partPrice.doubleValue()>0){
+                        carMap.put("uniqExpenseId", partPriceRes.getFireResult().get(0).getUniqExpenseId());
+                    }
                     //todo 计算停车费
                 }
                 // partMoney = calculationPartMoney(inTime, outTime, tbBusinessCar.getCarSize());
@@ -584,7 +557,7 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
                     });
             IOrderPriceRes orderPriceRes = syncService.orderPriceCal(expenses);
             BigDecimal totalPrice = orderPriceRes.getTotalOrderPrice();
-            result.put("itemCalculateId", orderPriceRes.getCalculateId());
+            carCalculateIds.add(orderPriceRes.getCalculateId());
             for (TbBusinessItem item : items) {
                 BigDecimal itemPrice = item.getItemPrice().multiply(new BigDecimal(item.getNum()));
                 itemsPrice = itemsPrice.add(itemPrice);
@@ -616,6 +589,7 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
             result.put("itemsPrice", totalPrice);
         }
         result.put("itemList", itemList);
+        result.put("calculateId", String.join(",", carCalculateIds));
         result.put("businessNo", businessList.stream().map(TbBusiness::getNo).distinct().collect(Collectors.joining("、")));
         result.put("goodsName", businessList.stream().map(TbBusiness::getGoodsName).distinct().collect(Collectors.joining("、")));
         return result;
@@ -1085,6 +1059,9 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
                 .map(TbBusinessCar::getCarNo).collect(Collectors.joining("、")).toUpperCase();
         dbBusiness.setChinaCarNo(chinaCar);
         this.updateById(dbBusiness);
+        if (dbBusiness.getConfirmInput() == 1) {
+            this.confirm(Collections.singletonList(dbBusiness.getId()));
+        }
     }
 
     public void bindOtherBusinessCar(String businessId, List<String> businessCarIdList) {

+ 18 - 4
sp-server/src/main/java/com/pj/project/tb_business_item/TbBusinessItemService.java

@@ -16,6 +16,7 @@ import com.pj.current.config.MyConfig;
 import com.pj.current.config.WxConfig;
 import com.pj.current.satoken.StpUserUtil;
 import com.pj.current.task.TaskService;
+import com.pj.project.sync.request.item.IOrderItem;
 import com.pj.project.tb_business.TbBusiness;
 import com.pj.project.tb_business.TbBusinessService;
 import com.pj.project.tb_costomer.TbCostomer;
@@ -88,7 +89,6 @@ public class TbBusinessItemService extends ServiceImpl<TbBusinessItemMapper, TbB
     private TbItemTypeService tbItemTypeService;
 
 
-
     /**
      * 查集合 - 根据条件(参数为空时代表忽略指定条件)
      */
@@ -258,15 +258,15 @@ public class TbBusinessItemService extends ServiceImpl<TbBusinessItemMapper, TbB
         }
         List<TbBusinessItem> list = this.getByBusinessCarId(businessId);
         TbBusinessItem tbBusinessItem = new TbBusinessItem();
-        BigDecimal totalPrice=new BigDecimal(num).multiply(tbItem.getPrice());
+        BigDecimal totalPrice = new BigDecimal(num).multiply(tbItem.getPrice());
         tbBusinessItem.setBusinessId(businessId).setItemTypeId(tbItemType.getId()).setItemTypeName(tbItemType.getName())
                 .setItemId(tbItem.getId()).setItemName(tbItem.getItemName()).setItemCode(tbItem.getItemCode())
                 .setItemPrice(tbItem.getPrice())
                 .setUnit(tbItem.getUnit()).setNum(num)
                 .setTotal(totalPrice).setCreateTime(new Date())
-                .setTaxRate(new BigDecimal(tbItem.getTaxRate()).divide(new BigDecimal(100),2,BigDecimal.ROUND_UP).doubleValue())
+                .setTaxRate(new BigDecimal(tbItem.getTaxRate()).divide(new BigDecimal(100), 2, BigDecimal.ROUND_UP).doubleValue())
                 .setNo(tbBusiness.getNo() + list.size() + 1)
-        .setPayType(tbItem.getPayType()).setPayTypeName(tbItem.getPayTypeName());
+                .setPayType(tbItem.getPayType()).setPayTypeName(tbItem.getPayTypeName());
         this.save(tbBusinessItem);
         tbBusiness.setPayStatus(PayEnum.PayStatusEnum.NO_PAY.getCode())
                 .setItemPrice(tbBusiness.getItemPrice().add(totalPrice));
@@ -289,4 +289,18 @@ public class TbBusinessItemService extends ServiceImpl<TbBusinessItemMapper, TbB
         }
         this.removeById(id);
     }
+
+    /**
+     * 构建统一计费中心的订单计算参数
+     *
+     * @param businessItems
+     * @return
+     */
+    public void buildExpenses(List<TbBusinessItem> businessItems, List<IOrderItem> orderItems) {
+        businessItems.forEach(item -> {
+            IOrderItem orderItem = new IOrderItem();
+            orderItem.setUniqExpenseId(item.getItemCode()).setExpenseNum(Integer.parseInt(item.getNum()));
+            orderItems.add(orderItem);
+        });
+    }
 }

+ 4 - 0
sp-server/src/main/java/com/pj/project/tb_fee_details/TbFeeDetails.java

@@ -67,6 +67,10 @@ public class TbFeeDetails implements Serializable {
      * 收费类型
      */
     private Integer feeType;
+    /**
+     * 统计费项名称
+     */
+    private String feeTypeName;
 
     /**
      * 业务类型id

+ 1 - 1
sp-server/src/main/java/com/pj/project/tb_fee_details/TbFeeDetailsService.java

@@ -227,7 +227,7 @@ public class TbFeeDetailsService extends ServiceImpl<TbFeeDetailsMapper, TbFeeDe
         parkFee.setBusinessCarId(car.getId())
                 .setCarNo(car.getCarNo())
                 .setNoTaxPrice(noTaxPrice).setTaxPrice(taxPrice)
-                .setFeeType(FeeTypeEnum.PARK_FEE.getCode())
+                .setFeeType(FeeTypeEnum.PARK_FEE.getCode()).setFeeTypeName(FeeTypeEnum.PARK_FEE.getDesc())
                 .setPayDay(toDay).setPayType(3).setCreateTime(now).setUpdateTime(now)
                 .setIsSettle(1).setPayMode(1).setPayTime(nowStr)
                 .setTransactionId(transactionId).setOutTradeNo(outTradeNo)

+ 36 - 0
sp-server/src/main/java/com/pj/project/tb_fee_item/TbFeeItemController.java

@@ -0,0 +1,36 @@
+package com.pj.project.tb_fee_item;
+
+
+import com.pj.utils.sg.AjaxJson;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * Controller: tb_goods -- 商品管理
+ *
+ * @author qzy
+ */
+@RestController
+@RequestMapping("/TbFeeItem/")
+public class TbFeeItemController {
+
+    /**
+     * 底层 Service 对象
+     */
+    @Autowired
+    TbFeeItemService tbFeeItemService;
+
+
+
+    /**
+     * 查集合 - 根据条件(参数为空时代表忽略指定条件)
+     */
+    @RequestMapping("getList")
+    public AjaxJson getList() {
+        return AjaxJson.getSuccessData(tbFeeItemService.list());
+    }
+
+
+}

+ 4 - 0
sp-server/src/main/java/com/pj/project/tb_fee_statistics/TbFeeStatistics.java

@@ -49,6 +49,10 @@ public class TbFeeStatistics implements Serializable {
      * 收费类型(1=核酸检测,2消杀作业,3=装卸作业,4=停车费,5=过磅费)
      */
     private Integer feeType;
+    /**
+     * 类型名称
+     */
+    private String feeTypeName;
 
 
     /**

+ 6 - 5
sp-server/src/main/java/com/pj/project/tb_fee_statistics/TbFeeStatisticsMapper.xml

@@ -43,6 +43,7 @@
     <resultMap id="model" type="com.pj.project.tb_fee_statistics.TbFeeStatistics">
         <result property="id" column="id"/>
         <result property="feeType" column="fee_type"/>
+        <result property="feeTypeName" column="fee_type_name,"/>
         <result property="itemTypeId" column="item_type_id"/>
         <result property="itemTypeName" column="item_type_name"/>
         <result property="year" column="year"/>
@@ -69,7 +70,7 @@
     </select>
 
     <!-- 查集合 - 根据条件(参数为空时代表忽略指定条件) [G] -->
-    <select id="getList" resultMap="model">
+    <select id="getList" resultType="com.pj.project.tb_fee_statistics.TbFeeStatistics">
         <include refid="select_sql"></include>
         <where>
             <if test=' this.has("id") '>and id = #{id}</if>
@@ -108,8 +109,8 @@
         </choose>
     </select>
 
-    <select id="getMonth" resultMap="model">
-        select month, fee_type, sum(num) as num, sum(tax_money) as tax_money, sum(taxes) as taxes, sum(no_tax_money) as
+    <select id="getMonth" resultType="com.pj.project.tb_fee_statistics.TbFeeStatistics">
+        select month, fee_type,fee_type_name, sum(num) as num, sum(tax_money) as tax_money, sum(taxes) as taxes, sum(no_tax_money) as
         no_tax_money, any_value(tax_rate) as tax_rate
         from tb_fee_statistics
         <where>
@@ -124,8 +125,8 @@
         order by month desc
     </select>
 
-    <select id="getYear" resultMap="model">
-        select year, fee_type, sum(num) as num, sum(tax_money) as tax_money, sum(taxes) as taxes, sum(no_tax_money) as
+    <select id="getYear" resultType="com.pj.project.tb_fee_statistics.TbFeeStatistics">
+        select year, fee_type,fee_type_name, sum(num) as num, sum(tax_money) as tax_money, sum(taxes) as taxes, sum(no_tax_money) as
         no_tax_money, any_value(tax_rate) as tax_rate
         from tb_fee_statistics
         <where>

+ 2 - 1
sp-server/src/main/java/com/pj/project/tb_fee_statistics/TbFeeStatisticsService.java

@@ -129,7 +129,8 @@ public class TbFeeStatisticsService extends ServiceImpl<TbFeeStatisticsMapper, T
             if (statistics == null) {
                 statistics = new TbFeeStatistics();
             }
-            statistics.setFeeType(stat.getFeeType()).setDayTime(now)
+           TbFeeItem tbFeeItem= tbFeeItemService.getById(stat.getFeeType());
+            statistics.setFeeType(stat.getFeeType()).setDayTime(now).setFeeTypeName(tbFeeItem.getName())
                     .setNum(stat.getNum()).setTaxMoney(stat.getTaxMoney()).setTaxRate(stat.getTaxRate())
                     .setTaxes(stat.getTaxes()).setNoTaxMoney(stat.getNoTaxMoney())
                     .setDay(toDay).setMonth(thisMonth).setYear(thisYear)

+ 2 - 0
sp-server/src/main/java/com/pj/project/tb_invoice_order/TbInvoiceOrderController.java

@@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
+import java.util.UUID;
 
 
 /**
@@ -134,4 +135,5 @@ public class TbInvoiceOrderController {
     }
 
 
+
 }

+ 2 - 2
sp-server/src/main/java/com/pj/project/tb_item/TbItem.java

@@ -72,12 +72,12 @@ public class TbItem extends Model<TbItem> implements Serializable {
     private int status;
     private String killId;
     /**
-     * 业务分类
+     * 业务分类---->发送微信消息给合作伙伴
      */
     private String businessType;
     private String businessTypeName;
     /**
-     * 收费分类
+     * 收费分类--->统计用的
      */
     private Integer payType;
     private String payTypeName;

+ 36 - 17
sp-server/src/main/java/com/pj/project/tb_item/TbItemService.java

@@ -1,6 +1,7 @@
 package com.pj.project.tb_item;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -13,6 +14,7 @@ import com.pj.project.relation_type_item.RelationTypeItemService;
 import com.pj.project.sync.HelpService;
 import com.pj.project.sync.bo.ItemTypeBO;
 import com.pj.project.sync.response.item.IExpenseItem;
+import com.pj.project.sync.response.item.IrulesItem;
 import com.pj.project.tb_costomer.TbCostomer;
 import com.pj.project.tb_fee_item.TbFeeItem;
 import com.pj.project.tb_fee_item.TbFeeItemService;
@@ -109,12 +111,13 @@ public class TbItemService extends ServiceImpl<TbItemMapper, TbItem> implements
             if (db != null) {
                 this.removeById(db.getId());
                 relationTypeItemService.removeByItemId(db.getId());
+                tbItemFacService.removeByItemId(db.getId());
             }
         } else {
             TbItem tbItem = handlerItem(tbItemType, iExpenseItem, new Date());
             //多规格费项因子
             if (StrUtil.equals(iExpenseItem.getPattern(), "RULES")) {
-                handlerFac(iExpenseItem, tbItem);
+                handlerFac(iExpenseItem, tbItem, iExpenseItem.getUniqueExpenseId());
             }
         }
     }
@@ -134,11 +137,9 @@ public class TbItemService extends ServiceImpl<TbItemMapper, TbItem> implements
         if (tbItem == null) {
             tbItem = new TbItem();
         }
-        TbFeeItem tbFeeItem = tbFeeItemService.getById(tbItemType.getBusinessType());
-        if (tbFeeItem != null) {
-            tbItem.setBusinessType(tbItemType.getBusinessType())
-                    .setBusinessTypeName(tbFeeItem.getName());
-        }
+        String payType = tbItemType.getPayType();
+        tbItem.setPayType(Integer.parseInt(payType))
+                .setPayTypeName(tbItemType.getPayTypeName());
         String typeId = tbItemType.getId();
         tbItem.setItemCode(code).setItemName(name).setUnit(item.getExpenseUnit()).setStatus(1)
                 .setInc(1).setNeedRemark(0).setPrice(item.getFixedPrice()).setMinLength(0).setCarLength(25)
@@ -151,7 +152,7 @@ public class TbItemService extends ServiceImpl<TbItemMapper, TbItem> implements
             tbItem.setBusinessType(TbCostomer.CustomerEnum.BUSINESS_TYPE.getType())
                     .setBusinessTypeName("默认");
         } else {
-            tbItem.setBusinessType(businessType).setBusinessTypeName(TbCostomer.CustomerEnum.getDescs(businessType));
+            tbItem.setBusinessType(businessType).setBusinessTypeName(tbItemType.getPayTypeName());
         }
         this.saveOrUpdate(tbItem);
         RelationTypeItem relationTypeItem = relationTypeItemService.findByTypeIdAndItemId(typeId, tbItem.getId());
@@ -170,20 +171,38 @@ public class TbItemService extends ServiceImpl<TbItemMapper, TbItem> implements
      * @param item
      * @param tbItem
      */
-    private void handlerFac(IExpenseItem item, TbItem tbItem) {
-        item.getRules().forEach(fac -> {
-            Long id = fac.getId();
-            TbItemFac tbItemFac = tbItemFacService.getById(id);
+    private void handlerFac(IExpenseItem item, TbItem tbItem, String uniqueExpenseId) {
+        List<IrulesItem> rules = item.getRules();
+        doHanlder(rules, tbItem, uniqueExpenseId);
+    }
+
+    private void doHanlder(List<IrulesItem> rules, TbItem tbItem, String uniqueExpenseId) {
+        rules.forEach(irulesItem -> {
+            Long facId = irulesItem.getFacId();
+            TbItemFac tbItemFac = tbItemFacService.getByFaceId(facId);
             if (tbItemFac == null) {
                 tbItemFac = new TbItemFac();
             }
-            tbItemFac.setName(fac.getPriceFactor().getFacName())
-                    .setTextType(fac.getPriceFactor().getTextType())
-                    .setFacId(fac.getId()).setRangeVal(fac.getPriceFactor().getRangeVal())
-                    .setUnit(fac.getPriceFactor().getUnit());
-            BeanUtil.copyProperties(fac, tbItemFac);
-            tbItemFac.setItemId(tbItem.getId()).setId(id + "");
+            String rangeVal = irulesItem.getPriceFactor().getRangeVal();
+            List<String> rangeVals = StrUtil.splitTrim(rangeVal, "$$");
+            String minVal = rangeVals.get(0);
+            if (NumberUtil.isNumber(minVal)) {
+                tbItemFac.setMinRange(Double.valueOf(minVal));
+            }
+            String maxVal = rangeVals.get(1);
+            if (NumberUtil.isNumber(maxVal)) {
+                tbItemFac.setMaxRange(Double.valueOf(maxVal));
+            }
+            tbItemFac.setName(irulesItem.getPriceFactor().getFacName()).setOperator(irulesItem.getPriceFactor().getAliasName())
+                    .setTextType(irulesItem.getPriceFactor().getTextType())
+                    .setFacId(facId).setRangeVal(rangeVal).setUniqueExpenseId(uniqueExpenseId)
+                    .setUnit(irulesItem.getPriceFactor().getUnit());
+            tbItemFac.setItemId(tbItem.getId());
             tbItemFacService.saveOrUpdate(tbItemFac);
+            List<IrulesItem> children = irulesItem.getChildren();
+            if (children != null) {
+                doHanlder(children, tbItem, uniqueExpenseId);
+            }
         });
     }
 

+ 58 - 58
sp-server/src/main/java/com/pj/project/tb_item_fac/TbItemFac.java

@@ -1,6 +1,7 @@
 package com.pj.project.tb_item_fac;
 
 import java.io.Serializable;
+
 import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.EqualsAndHashCode;
@@ -10,7 +11,8 @@ import lombok.experimental.Accessors;
 
 /**
  * Model: tb_item_fac -- 费项因子
- * @author qzy 
+ *
+ * @author qzy
  */
 @Data
 @Accessors(chain = true)
@@ -18,63 +20,61 @@ import lombok.experimental.Accessors;
 @EqualsAndHashCode(callSuper = false)
 public class TbItemFac extends Model<TbItemFac> implements Serializable {
 
-	// ---------- 模块常量 ----------
-	/**
-	 * 序列化版本id 
-	 */
-	private static final long serialVersionUID = 1L;	
-	/**
-	 * 此模块对应的表名 
-	 */
-	public static final String TABLE_NAME = "tb_item_fac";	
-	/**
-	 * 此模块对应的权限码 
-	 */
-	public static final String PERMISSION_CODE = "tb-item-fac";	
-
-
-	// ---------- 表中字段 ----------
-	/**
-	 *  
-	 */
-	private String id;
-
-	/**
-	 *  
-	 */
-	private String name;	
-	private Long facId;
-
-	/**
-	 *  
-	 */
-	private String itemId;	
-
-	/**
-	 *  
-	 */
-	private String textType;	
-
-	/**
-	 *  
-	 */
-	private String operator;	
-
-	/**
-	 *  
-	 */
-	private String rangeVal;	
-
-	/**
-	 *  
-	 */
-	private String unit;	
-
-
-
-
-
-	
+    // ---------- 模块常量 ----------
+    /**
+     * 序列化版本id
+     */
+    private static final long serialVersionUID = 1L;
+    /**
+     * 此模块对应的表名
+     */
+    public static final String TABLE_NAME = "tb_item_fac";
+    /**
+     * 此模块对应的权限码
+     */
+    public static final String PERMISSION_CODE = "tb-item-fac";
+
+
+    // ---------- 表中字段 ----------
+    /**
+     *
+     */
+    private String id;
+
+    /**
+     *
+     */
+    private String name;
+    private Long facId;
+
+    /**
+     *
+     */
+    private String itemId;
+    private String uniqueExpenseId;
+
+    /**
+     *
+     */
+    private String textType;
+
+    /**
+     *
+     */
+    private String operator;
+
+    /**
+     *
+     */
+    private String rangeVal;
+
+    /**
+     *
+     */
+    private String unit;
+
+    private double minRange;
+    private double maxRange;
 
 
 }

+ 25 - 0
sp-server/src/main/java/com/pj/project/tb_item_fac/TbItemFacService.java

@@ -29,6 +29,7 @@ public class TbItemFacService extends ServiceImpl<TbItemFacMapper, TbItemFac> im
 
     /**
      * 费项因子
+     *
      * @param itemId
      * @return
      */
@@ -38,4 +39,28 @@ public class TbItemFacService extends ServiceImpl<TbItemFacMapper, TbItemFac> im
         return list(ew);
     }
 
+    public TbItemFac getByFaceId(Long facId) {
+        QueryWrapper<TbItemFac> ew = new QueryWrapper<>();
+        ew.lambda().eq(TbItemFac::getFacId, facId);
+        return getOne(ew);
+    }
+
+    public void removeByItemId(String itemId) {
+        QueryWrapper<TbItemFac> ew = new QueryWrapper<>();
+        ew.lambda().eq(TbItemFac::getItemId, itemId);
+        this.remove(ew);
+    }
+
+    /**
+     * 根据车长查询规则
+     * @param carSize
+     * @return
+     */
+    public TbItemFac getPartFac(double carSize) {
+        QueryWrapper<TbItemFac> ew = new QueryWrapper<>();
+        ew.lambda().le(TbItemFac::getMinRange, carSize)
+                .ge(TbItemFac::getMaxRange, carSize);
+        List<TbItemFac> list = this.list(ew);
+        return list.isEmpty() ? null : list.get(0);
+    }
 }

+ 7 - 0
sp-server/src/main/java/com/pj/project/tb_item_type/TbItemType.java

@@ -67,6 +67,7 @@ public class TbItemType extends Model<TbItemType> implements Serializable {
      * 业务类型1,消杀;2装卸;0默认===>和tb_costomer中的type对应
      */
     private String businessType = "0";
+    private String businessTypeName;
     private Integer business = 1;
     private Integer sort;
     /**
@@ -78,6 +79,12 @@ public class TbItemType extends Model<TbItemType> implements Serializable {
     private Date endTime;
 
     private Date syncTime;
+    /**
+     * 统计用的
+     */
+    private String payType = "0";
+    private String payTypeName;
+
 
     @TableField(exist = false)
     private List<TbItem> items = new ArrayList<>();

+ 11 - 6
sp-server/src/main/java/com/pj/project/tb_item_type/TbItemTypeService.java

@@ -69,6 +69,7 @@ public class TbItemTypeService extends ServiceImpl<TbItemTypeMapper, TbItemType>
     @Resource
     private TbFeeItemService tbFeeItemService;
 
+
     /**
      * 删
      */
@@ -182,15 +183,17 @@ public class TbItemTypeService extends ServiceImpl<TbItemTypeMapper, TbItemType>
         String type = itemTypeBO.getSyncType();
         String code = itemTypeBO.getKeyId();
         TbItemType db = findByCode(code);
+        int state = itemTypeBO.getState() == 0 ? 1 : 0;
         Date now = new Date();
         if (StrUtil.equals(type, SyncTypeEnum.DELETE.getCode())) {
             this.removeByCode(code);
             if (db != null) {
                 relationTypeItemService.removeByTypeId(db.getId());
+                relationGoodsTypeService.removeByTypeId(db.getId());
             }
         } else if (StrUtil.equals(type, SyncTypeEnum.UPDATE.getCode())) {
             if (db != null) {
-                db.setStatus(itemTypeBO.getState());
+                db.setStatus(state);
                 updateById(db);
             }
         } else {
@@ -198,23 +201,25 @@ public class TbItemTypeService extends ServiceImpl<TbItemTypeMapper, TbItemType>
                 db = new TbItemType();
             }
             String label = itemTypeBO.getLabel();
-            TbFeeItem tbFeeItem = tbFeeItemService.findByName(label);
+            TbFeeItem tbFeeItem = tbFeeItemService.findByName(label.trim());
             if (tbFeeItem == null) {
                 tbFeeItem = new TbFeeItem();
                 tbFeeItem.setName(label).setSyncTime(now);
                 tbFeeItemService.save(tbFeeItem);
             }
-
-            int state = itemTypeBO.getState() == 0 ? 1 : 0;
             db.setSyncTime(now).setName(itemTypeBO.getKeyName()).setStatus(state).setCode(code)
-                    .setBusinessType(tbFeeItem.getId() + "")
+                    .setPayType(tbFeeItem.getId() + "").setPayTypeName(label)
                     .setStartTime(itemTypeBO.getStartTime()).setEndTime(itemTypeBO.getEndTime());
             String partnerIds = itemTypeBO.getPartnersId();
             if (StrUtil.isNotEmpty(partnerIds)) {
                 List<String> ids = StrUtil.splitTrim(partnerIds, ",");
                 List<TbCostomer> costomerList = tbCostomerService.listByIds(ids);
                 String businessType = costomerList.stream().map(TbCostomer::getType).collect(Collectors.joining(","));
-                db.setBusinessType(businessType);
+                String businessTypeName = costomerList.stream().map(tbCostomer -> {
+                    String typ = tbCostomer.getType();
+                    return TbCostomer.CustomerEnum.getDesc(typ);
+                }).collect(Collectors.joining(","));
+                db.setBusinessType(businessType).setBusinessTypeName(businessTypeName);
             }
             this.saveOrUpdate(db);
         }

+ 1 - 0
sp-server/src/main/java/com/pj/project/tb_order/TbOrder.java

@@ -76,6 +76,7 @@ public class TbOrder extends Model<TbOrder> implements Serializable {
 
     private String transactionId;
     private String completeDate;
+    private String calculateId;
     private Integer businessType;