Jelajahi Sumber

开票信息详情

lzm 2 tahun lalu
induk
melakukan
6ba4d59a54
19 mengubah file dengan 410 tambahan dan 69 penghapusan
  1. 4 4
      sp-admin/sa-view/tb-fee-statistics/dayStatsPrint.html
  2. 3 3
      sp-admin/sa-view/tb-fee-statistics/detailPrint.html
  3. 2 1
      sp-admin/sa-view/tb-fee-statistics/tb-fee-details-list.html
  4. 77 20
      sp-admin/sa-view/tb-invoice-info/tb-invoice-info-info.html
  5. 2 2
      sp-admin/sa-view/tb-invoice-info/tb-invoice-info-list.html
  6. 97 15
      sp-admin/sa-view/tb-invoice-order/tb-invoice-order-info.html
  7. 1 1
      sp-admin/sa-view/tb-invoice-order/tb-invoice-order-list.html
  8. 4 0
      sp-server/src/main/java/com/pj/api/wx/service/WxService.java
  9. 18 0
      sp-server/src/main/java/com/pj/project/tb_fee_details/TbFeeDetails.java
  10. 13 0
      sp-server/src/main/java/com/pj/project/tb_fee_details/TbFeeDetailsService.java
  11. 1 0
      sp-server/src/main/java/com/pj/project/tb_fee_details/dto/ExportFeeDetailDTO.java
  12. 6 1
      sp-server/src/main/java/com/pj/project/tb_fee_statistics/TbFeeStatisticsService.java
  13. 12 6
      sp-server/src/main/java/com/pj/project/tb_invoice_info/TbInvoiceInfo.java
  14. 9 0
      sp-server/src/main/java/com/pj/project/tb_invoice_info/TbInvoiceInfoController.java
  15. 44 4
      sp-server/src/main/java/com/pj/project/tb_invoice_info/TbInvoiceInfoService.java
  16. 64 0
      sp-server/src/main/java/com/pj/project/tb_invoice_info/dto/FeeDeatilsGroup.java
  17. 8 2
      sp-server/src/main/java/com/pj/project/tb_invoice_order/TbInvoiceOrderController.java
  18. 45 10
      sp-server/src/main/java/com/pj/project/tb_invoice_order/TbInvoiceOrderService.java
  19. TEMPAT SAMPAH
      sp-server/src/main/resources/static/day-fee-new.xlsx

+ 4 - 4
sp-admin/sa-view/tb-fee-statistics/dayStatsPrint.html

@@ -112,13 +112,13 @@
     }
     if(isMonth!=null || isYear!=null){
       $("#leader").html("运营负责人:\n" +
-              "                &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp\n" +
-              "                &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp\n" +
-              "                &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp\n" +
+              "                &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp\n" +
+              "                &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp\n" +
+              "                &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp\n" +
               "                运营分管领导:");
     }else{
       $("#leader").html("运营负责人:\n" +
-              "                &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp\n" +
+              "                &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp\n" +
               "                &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp\n" +
               "                &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp\n" +
               "                &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp");

+ 3 - 3
sp-admin/sa-view/tb-fee-statistics/detailPrint.html

@@ -112,8 +112,8 @@
           if(list[i]['itemName'] == null){
             list[i]['itemName'] = "";
           }
-          if(list[i]['pickCustomerName'] == null){
-            list[i]['pickCustomerName'] = "";
+          if(list[i]['customerName'] == null){
+            list[i]['customerName'] = "";
           }
           html.push(
                   "<tr height=\"60\"><td style=\"border:solid #000 1px; \">" + list[i]['index'] +
@@ -130,7 +130,7 @@
                   "</td><td style=\"border:solid #000 1px; \">" + list[i]['noTaxPrice'] +
                   "</td><td style=\"border:solid #000 1px; \">" + list[i]['payType'] +
                   "</td><td style=\"border:solid #000 1px; \">" + list[i]['businessNo'] +
-                  "</td><td style=\"border:solid #000 1px; \">" + list[i]['pickCustomerName'] +
+                  "</td><td style=\"border:solid #000 1px; \">" + list[i]['customerName'] +
                   "</td><td style=\"border:solid #000 1px; \">" + list[i]['payTime'] +
                   "</td><td style=\"border:solid #000 1px; \">" + list[i]['kaiDanPerson'] +
                   "</td><td style=\"border:solid #000 1px; \">" + list[i]['diaoDuPerson'] +

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

@@ -165,8 +165,9 @@
 						</template>
 					</el-table-column>
 					<sa-td name="作业编号" prop="businessItemNo" width="145px" ></sa-td>
+					<sa-td name="客户名称" prop="customerName" ></sa-td>
 					<sa-td name="发票号" prop="invoice" width="145px"></sa-td>
-					<sa-td name="企业名称" prop="pickCustomerName" ></sa-td>
+					<sa-td name="主体名称" prop="entityName" ></sa-td>
 					<sa-td name="生成时间" prop="createTime" width="150px" ></sa-td>
 					<sa-td name="付款时间" prop="payTime"  width="150px" ></sa-td>
 					<sa-td name="备注" prop="remark" ></sa-td>

+ 77 - 20
sp-admin/sa-view/tb-invoice-info/tb-invoice-info-info.html

@@ -7,11 +7,11 @@
 		<!-- 所有的 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.min.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/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>
 		<style type="text/css">
 			.c-panel .c-label{width: 8em;}
@@ -23,19 +23,69 @@
 			<div class="s-body">
 				<div class="c-panel">
 					<el-form v-if="m">
-						<sa-info name="客户名称" br>{{m.customerName}}</sa-info>
-						<sa-info name="账单金额" br>{{m.totalMoney}}</sa-info>
-						<sa-info type="enum" name="支付状态" :value="m.status" :jv="{0: '未开票', 1: '已开票'}" br></sa-info>
-						<sa-info name="开票时间" br>{{m.invoiceTime}}</sa-info>
-						<sa-info name="发票号" br>{{m.invoiceNo}}</sa-info>
-						<sa-info name="主体名称" br>{{m.entityName}}</sa-info>
-						<sa-info name="税号" br>{{m.taxIdNo}}</sa-info>
-						<sa-info name="地址" br>{{m.address}}</sa-info>
-						<sa-info name="电话" br>{{m.phone}}</sa-info>
-						<sa-info name="开户银行" br>{{m.bank}}</sa-info>
-						<sa-info name="银行账号" br>{{m.bankNo}}</sa-info>
-						<sa-info name="邮箱" br>{{m.email}}</sa-info>
-						<sa-info name="创建时间" br>{{m.createTime}}</sa-info>
+						<el-row>
+							<el-collapse value='1'>
+								<el-collapse-item name="1">
+									<div slot="title">
+										基础信息
+									</div>
+									<div>
+										<el-row>
+											<el-col span="12">
+												<sa-info name="客户名称" br>{{m.customerName}}</sa-info>
+												<sa-info name="账单金额" br>{{m.totalMoney}}</sa-info>
+												<sa-info type="enum" name="支付状态" :value="m.status" :jv="{0: '未开票', 1: '已开票'}" br></sa-info>
+												<sa-info name="开票时间" br>{{m.invoiceTime}}</sa-info>
+												<sa-info name="发票号" br>{{m.invoiceNo}}</sa-info>
+												<sa-info name="创建时间" br>{{m.createTime}}</sa-info>
+											</el-col>
+											<el-col span="12">
+												<sa-info name="主体名称" br>{{m.entityName}}</sa-info>
+												<sa-info name="税号" br>{{m.taxIdNo}}</sa-info>
+												<sa-info name="地址" br>{{m.address}}</sa-info>
+												<sa-info name="电话" br>{{m.phone}}</sa-info>
+												<sa-info name="开户银行" br>{{m.bank}}</sa-info>
+												<sa-info name="银行账号" br>{{m.bankNo}}</sa-info>
+												<sa-info name="邮箱" br>{{m.email}}</sa-info>
+											</el-col>
+										</el-row>
+									</div>
+								</el-collapse-item>
+							</el-collapse>
+						</el-row>
+						<el-row>
+							<el-collapse value='1'>
+								<el-collapse-item name="1">
+									<div slot="title">
+										收费明细
+									</div>
+									<el-table :data="feeDetails" style="width: 100%">
+										<el-table-column label="业务类型" prop="itemTypeName" ></el-table-column>
+
+										<el-table-column label="数量" prop="num" ></el-table-column>
+										<el-table-column label="单价(元)" prop="unitPrice" ></el-table-column>
+										<el-table-column label="总价(元)" prop="itemPrice" ></el-table-column>
+										<el-table-column label="税率(%)" >
+											<template slot-scope="s">
+												<span>{{s.row.taxRate * 100}}</span>
+											</template>
+										</el-table-column>
+										<el-table-column label="税款(元)" >
+											<template slot-scope="s">
+												<span>{{Number(s.row.taxPrice).toFixed(2)}}</span>
+											</template>
+										</el-table-column>
+										<el-table-column label="不含税金额(元)" >
+											<template slot-scope="s">
+												<span>{{Number(s.row.noTaxPrice).toFixed(2)}}</span>
+											</template>
+										</el-table-column>
+
+									</el-table>
+								</el-collapse-item>
+							</el-collapse>
+						</el-row>
+
 					</el-form>
 				</div>
 			</div>
@@ -53,17 +103,24 @@
 				el: '.vue-box',
 				data: {
 					id: sa.p('id', 0),	// 获取数据ID 
-					m: null
+					m: null,
+					feeDetails:'',
 				},
 				methods: {
+					getDetails(){
+						sa.ajax('/TbInvoiceInfo/getDetailsById?id=' + this.id, function(res) {
+							this.feeDetails = res.data;
+						}.bind(this))
+					}
 				},
 				mounted: function() {
-					sa.ajax('/TbInvoiceInfo/getEntityById?id=' + this.id, function(res) {
+					sa.ajax('/TbInvoiceInfo/getById?id=' + this.id, function(res) {
 						this.m = res.data;
 						if(res.data == null) {
 							sa.alert('未能查找到 id=' + this.id + " 详细数据");
 						}
 					}.bind(this))
+					this.getDetails();
 				}
 			})
 			

+ 2 - 2
sp-admin/sa-view/tb-invoice-info/tb-invoice-info-list.html

@@ -87,7 +87,7 @@
 				</div>
 				<sa-item type="text" name="发票号" v-model="completeDate.form.invoiceNo"></sa-item>
 				<span slot="footer" class="dialog-footer">
-					<el-button @click="emodel.visible = false">取 消</el-button>
+					<el-button @click="completeDate.visible = false">取 消</el-button>
 					<el-button type="primary" @click="complete">确 定</el-button>
 				</span>
 			</el-dialog>
@@ -174,7 +174,7 @@
 					},
 					// 查看
 					get: function(data) {
-						sa.showIframe('数据详情', 'tb-invoice-info-info.html?id=' + data.id, '550px', '80%');
+						sa.showIframe('数据详情', 'tb-invoice-info-info.html?id=' + data.id, '1050px', '90%');
 					},
 					// 查看 - 根据选中的
 					getBySelect: function(data) {

+ 97 - 15
sp-admin/sa-view/tb-invoice-order/tb-invoice-order-info.html

@@ -7,11 +7,11 @@
 		<!-- 所有的 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.min.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/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>
 		<style type="text/css">
 			.c-panel .c-label{width: 8em;}
@@ -23,15 +23,90 @@
 			<div class="s-body">
 				<div class="c-panel">
 					<el-form v-if="m">
-						<sa-info name="主键" br>{{m.id}}</sa-info>
-						<sa-info name="业务名称" br>{{m.businessName}}</sa-info>
-						<sa-info name="业务订单号" br>{{m.businessNo}}</sa-info>
-						<sa-info name="微信支付订单号" br>{{m.transactionId}}</sa-info>
-						<sa-info name="账单金额" br>{{m.billMoney}}</sa-info>
-						<sa-info type="img" name="账单截图" :value="m.billImage" br></sa-info>
-						<sa-info type="enum" name="开票状态" :value="m.status" :jv="{0: '未申请', 1: '已申请', 2: '已开票'}" br></sa-info>
-						<sa-info name="开票时间" br>{{m.invoiceTime}}</sa-info>
-						<sa-info name="创建时间" br>{{m.createTime}}</sa-info>
+						<el-row>
+							<el-collapse value='1'>
+								<el-collapse-item name="1">
+									<div slot="title">
+										基础信息
+									</div>
+									<div>
+										<el-row>
+											<el-col span="12">
+												<sa-info name="业务名称" br>{{m.businessName}}</sa-info>
+												<sa-info name="业务订单号" br>{{m.businessNo}}</sa-info>
+												<sa-info name="微信支付订单号" br>{{m.transactionId}}</sa-info>
+												<sa-info name="账单金额" br>{{m.billMoney}}</sa-info>
+												<sa-info name="开票时间" br>{{m.invoiceTime}}</sa-info>
+											</el-col>
+											<el-col span="12">
+												<sa-info type="img" name="账单截图" :value="m.billImage" br></sa-info>
+												<sa-info type="enum" name="开票状态" :value="m.status" :jv="{0: '未申请', 1: '已申请', 2: '已开票'}" br></sa-info>
+												<sa-info name="创建时间" br>{{m.createTime}}</sa-info>
+											</el-col>
+										</el-row>
+									</div>
+								</el-collapse-item>
+							</el-collapse>
+						</el-row>
+						<el-row>
+							<el-collapse value='1'>
+								<el-collapse-item name="1">
+									<div slot="title">
+										收费明细
+									</div>
+									<el-table :data="feeDetails" style="width: 100%">
+										<el-table-column label="收费项目">
+											<template slot-scope="s">
+												<b v-if="s.row.feeType == 1">核酸检测</b>
+												<b v-if="s.row.feeType == 2">消杀作业</b>
+												<b v-if="s.row.feeType == 3">装卸作业</b>
+												<b v-if="s.row.feeType == 4">停车费</b>
+												<b v-if="s.row.feeType == 5">过磅费</b>
+												<b v-if="s.row.feeType == 6">入场管理费</b>
+												<b v-if="s.row.feeType == 7">充电打冷作业</b>
+											</template>
+										</el-table-column>
+										<el-table-column label="业务类型" prop="itemTypeName" ></el-table-column>
+										<el-table-column label="车型" prop="itemName" ></el-table-column>
+										<el-table-column label="车牌号" prop="carNo" width="90px" ></el-table-column>
+										<el-table-column label="数量" prop="num" ></el-table-column>
+										<el-table-column label="单价(元)" prop="unitPrice" ></el-table-column>
+										<el-table-column label="总价(元)" prop="itemPrice" ></el-table-column>
+										<el-table-column label="税率(%)" >
+											<template slot-scope="s">
+												<span>{{s.row.taxRate * 100}}</span>
+											</template>
+										</el-table-column>
+										<el-table-column label="税款(元)" >
+											<template slot-scope="s">
+												<span>{{Number(s.row.taxPrice).toFixed(2)}}</span>
+											</template>
+										</el-table-column>
+										<el-table-column label="不含税金额(元)" >
+											<template slot-scope="s">
+												<span>{{Number(s.row.noTaxPrice).toFixed(2)}}</span>
+											</template>
+										</el-table-column>
+										<el-table-column label="业务单号" width="140px">
+											<template slot-scope="s">
+												<span v-if="s.row.businessNo != null && s.row.businessNo != ''" >{{s.row.businessNo}}</span>
+												<span v-else>{{s.row.businessCarNo}}</span>
+											</template>
+										</el-table-column>
+										<!--					<sa-td name="订单编号" prop="transactionId" width="220px" ></sa-td>-->
+										<el-table-column label="微信支付业务单号" width="220px">
+											<template slot-scope="s">
+												<el-tooltip :content="s.row.transactionId"placement="bottom"effect="light">
+													<el-button class="keyButton">{{ s.row.transactionId }}</el-button>
+												</el-tooltip>
+											</template>
+										</el-table-column>
+									</el-table>
+								</el-collapse-item>
+							</el-collapse>
+						</el-row>
+
+
 
 					</el-form>
 				</div>
@@ -50,13 +125,20 @@
 				el: '.vue-box',
 				data: {
 					id: sa.p('id', 0),	// 获取数据ID 
-					m: null
+					m: null,
+					feeDetails:''
 				},
 				methods: {
+					getDetails(tranId){
+						sa.ajax('/TbInvoiceOrder/getDetailsByTransId?transactionId=' + tranId, function(res) {
+							this.feeDetails = res.data;
+						}.bind(this))
+					}
 				},
 				mounted: function() {
 					sa.ajax('/TbInvoiceOrder/getById?id=' + this.id, function(res) {
 						this.m = res.data;
+						this.getDetails(this.m.transactionId);
 						if(res.data == null) {
 							sa.alert('未能查找到 id=' + this.id + " 详细数据");
 						}

+ 1 - 1
sp-admin/sa-view/tb-invoice-order/tb-invoice-order-list.html

@@ -206,7 +206,7 @@
 					},
 					// 查看
 					get: function(data) {
-						sa.showIframe('数据详情', 'tb-invoice-order-info.html?id=' + data.id, '1050px', '90%');
+						sa.showIframe('数据详情', 'tb-invoice-order-info.html?id=' + data.id, '1200px', '90%');
 					},
 					// 查看 - 根据选中的
 					getBySelect: function(data) {

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

@@ -34,6 +34,7 @@ import com.pj.project.tb_fee_details.TbFeeDetailsService;
 import com.pj.project.tb_fee_statistics.TbFeeStatisticsService;
 import com.pj.project.tb_goods.TbGoods;
 import com.pj.project.tb_goods.TbGoodsService;
+import com.pj.project.tb_invoice_order.TbInvoiceOrderService;
 import com.pj.project.tb_item.TbItem;
 import com.pj.project.tb_order.TbOrder;
 import com.pj.project.tb_order.TbOrderService;
@@ -90,6 +91,8 @@ public class WxService {
 
     @Resource
     private WxSendMsgService wxSendMsgService;
+    @Resource
+    private TbInvoiceOrderService tbInvoiceOrderService;
 
 
     /**
@@ -283,6 +286,7 @@ public class WxService {
                 .setTransactionId(notifyBO.getTransactionId())
                 .setCompleteDate(notifyBO.getTimeEnd());
         tbOrderService.updateById(tbOrder);
+        tbInvoiceOrderService.addT(transactionId);//生成开票订单
     }
 
 

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

@@ -102,13 +102,31 @@ public class TbFeeDetails implements Serializable {
 	 * 创建时间 
 	 */
     private Date createTime;
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
 
     private String businessItemId;
 
     private String businessItemNo;
 
+
+    /**
+     * 合作伙伴
+     */
     private String pickCustomerName;
 
+    /**
+     * 客户
+     */
+    private String customerName;
+
+    /**
+     * 开票主体
+     */
+    private String entityName;
+
 
 
     /**

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

@@ -27,6 +27,8 @@ 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_costomer.TbCostomer;
+import com.pj.project.tb_costomer.TbCostomerService;
 import com.pj.project.tb_fee_details.dto.DetailSumDTO;
 import com.pj.project.tb_fee_details.dto.ExportFeeDetailDTO;
 import com.pj.project.tb_fee_details.dto.PrintFeeDetailDTO;
@@ -83,6 +85,8 @@ public class TbFeeDetailsService extends ServiceImpl<TbFeeDetailsMapper, TbFeeDe
     private RelationBusinessCarService relationBusinessCarService;
     @Resource
     private TbGoodsService tbGoodsService;
+    @Resource
+    TbCostomerService tbCostomerService;
 
     /**
      * 增
@@ -258,6 +262,12 @@ public class TbFeeDetailsService extends ServiceImpl<TbFeeDetailsMapper, TbFeeDe
                 .setIsSettle(1).setPayMode(1).setPayTime(nowStr)
                 .setTransactionId(transactionId).setOutTradeNo(outTradeNo)
                 .setBusinessCarNo(car.getNo());
+        if(StrUtil.isNotEmpty(car.getCustomerId())){
+            TbCostomer costomer = tbCostomerService.getById(car.getCustomerId());
+            if(costomer != null){
+                parkFee.setCustomerName(costomer.getName());
+            }
+        }
     }
     public void chargeBusinessFee(List<TbBusinessItem> items, String transactionId, String outTradeNo, Date now) {
 
@@ -324,6 +334,7 @@ public class TbFeeDetailsService extends ServiceImpl<TbFeeDetailsMapper, TbFeeDe
                     .setPayDay(toDay).setPayType(3).setCreateTime(now)
                     .setBusinessItemId(item.getId() + "")
                     .setPickCustomerName(item.getPickCustomerName())
+                    .setCustomerName(business.getCustomerName())
                     .setIsSettle(1).setPayMode(1).setPayTime(nowStr).setWeight(business.getNetWeight())
                     .setTransactionId(transactionId).setOutTradeNo(outTradeNo)
                     .setNum(Integer.valueOf(item.getNum()));
@@ -373,6 +384,7 @@ public class TbFeeDetailsService extends ServiceImpl<TbFeeDetailsMapper, TbFeeDe
                     .setSettle("已结算").setTaxRate(feeDetails.getTaxRate().multiply(new BigDecimal(100)))
                     .setTaxPrice(feeDetails.getTaxPrice()).setNoTaxPrice(feeDetails.getNoTaxPrice()).setPayTime(feeDetails.getPayTime())
                     .setPickCustomerName(feeDetails.getPickCustomerName())
+                    .setCustomerName(feeDetails.getCustomerName())
                     .setTransactionId(feeDetails.getTransactionId())
                     .setKaiDanPerson(feeDetails.getKaiDanPerson())
                     .setJiChaPerson(feeDetails.getJiChaPerson())
@@ -505,6 +517,7 @@ public class TbFeeDetailsService extends ServiceImpl<TbFeeDetailsMapper, TbFeeDe
                     .setSettle("已结算").setTaxRate(feeDetails.getTaxRate().multiply(new BigDecimal(100)))
                     .setTaxPrice(feeDetails.getTaxPrice()).setNoTaxPrice(feeDetails.getNoTaxPrice()).setPayTime(feeDetails.getPayTime())
                     .setPickCustomerName(feeDetails.getPickCustomerName())
+                    .setCustomerName(feeDetails.getCustomerName())
                     .setKaiDanPerson(feeDetails.getKaiDanPerson()!=null?feeDetails.getKaiDanPerson():"")
                     .setJiChaPerson(feeDetails.getJiChaPerson()!=null?feeDetails.getJiChaPerson():"")
                     .setDiaoDuPerson(feeDetails.getDiaoDuPerson()!=null?feeDetails.getDiaoDuPerson():"");

+ 1 - 0
sp-server/src/main/java/com/pj/project/tb_fee_details/dto/ExportFeeDetailDTO.java

@@ -40,6 +40,7 @@ public class ExportFeeDetailDTO {
     private String payTime;
     private String tradeNo;
     private String pickCustomerName;
+    private String customerName;
     private String transactionId;
 
     /**

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

@@ -133,7 +133,9 @@ public class TbFeeStatisticsService extends ServiceImpl<TbFeeStatisticsMapper, T
     }
 
 
-
+    /**
+     * 弃用
+     * */
     public void countParkFee(List<PriceBO> cars, Date now) {
 
         String toDay = DateUtil.format(now, "yyyy-MM-dd");
@@ -192,6 +194,9 @@ public class TbFeeStatisticsService extends ServiceImpl<TbFeeStatisticsMapper, T
     }
 
 
+    /**
+     * 弃用
+     * */
     public void countBusinessFee(List<TbBusinessItem> items, String transactionId, String outTradeNo, Date now) {
 
         String nowStr = DateUtil.format(now, "yyyy-MM-dd HH:mm:ss");

+ 12 - 6
sp-server/src/main/java/com/pj/project/tb_invoice_info/TbInvoiceInfo.java

@@ -2,11 +2,14 @@ package com.pj.project.tb_invoice_info;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.pj.project.tb_entity.TbEntity;
+import com.pj.project.tb_fee_details.TbFeeDetails;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -100,32 +103,35 @@ public class TbInvoiceInfo implements Serializable {
     /**
      * 税号
      */
-    public String taxIdNo;
+    private String taxIdNo;
 
     /**
      * 地址
      */
-    public String address;
+    private String address;
 
     /**
      * 电话
      */
-    public String phone;
+    private String phone;
 
     /**
      * 开户银行
      */
-    public String bank;
+    private String bank;
 
     /**
      * 银行账号
      */
-    public String bankNo;
+    private String bankNo;
 
     /**
      * 邮箱
      */
-    public String email;
+    private String email;
+
+    @TableField(exist = false)
+    private List<TbFeeDetails> feeDetails = new ArrayList<>();
 
 
 

+ 9 - 0
sp-server/src/main/java/com/pj/project/tb_invoice_info/TbInvoiceInfoController.java

@@ -4,6 +4,8 @@ import java.util.List;
 
 import cn.hutool.core.util.StrUtil;
 import com.pj.constants.UserTypeEnum;
+import com.pj.project.tb_fee_details.TbFeeDetails;
+import com.pj.project.tb_invoice_info.dto.FeeDeatilsGroup;
 import com.pj.utils.so.SoMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
@@ -106,6 +108,13 @@ public class TbInvoiceInfoController {
         tbInvoiceInfoService.complete(so);
         return AjaxJson.getSuccess();
     }
+
+    /** 查 收费明细 */
+    @RequestMapping("getDetailsById")
+    public AjaxJson getDetailsById(String id){
+        List<FeeDeatilsGroup> feeDetails = tbInvoiceInfoService.getDetailsById(id);
+        return AjaxJson.getSuccessData(feeDetails);
+    }
 	
 	
 	

+ 44 - 4
sp-server/src/main/java/com/pj/project/tb_invoice_info/TbInvoiceInfoService.java

@@ -3,10 +3,10 @@ package com.pj.project.tb_invoice_info;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
@@ -19,6 +19,7 @@ import com.pj.project.tb_entity.TbEntity;
 import com.pj.project.tb_entity.TbEntityService;
 import com.pj.project.tb_fee_details.TbFeeDetails;
 import com.pj.project.tb_fee_details.TbFeeDetailsService;
+import com.pj.project.tb_invoice_info.dto.FeeDeatilsGroup;
 import com.pj.project.tb_invoice_order.TbInvoiceOrder;
 import com.pj.project.tb_invoice_order.TbInvoiceOrderService;
 import com.pj.project4sp.admin.SpAdmin;
@@ -128,13 +129,14 @@ public class TbInvoiceInfoService extends ServiceImpl<TbInvoiceInfoMapper, TbInv
         TbInvoiceInfo t = this.getById(id);
         t.setInvoiceTime(invoiceTime).setInvoiceNo(invoiceNo).setStatus(1);
         this.updateById(t);
+        String customerName = t.getCustomerName();
         List<TbInvoiceOrder> invoiceOrderList = tbInvoiceOrderService.findByInfoId(id);
         for (TbInvoiceOrder invoiceOrder : invoiceOrderList) {
             List<TbFeeDetails> feeDetailsList = tbFeeDetailsService.findByTransactionId(invoiceOrder.getTransactionId());
             for (TbFeeDetails detail : feeDetailsList) {
                 String invoice = detail.getInvoice();
                 invoice = StrUtil.isEmpty(invoice) ? invoiceNo : invoice+","+invoiceNo;
-                detail.setInvoice(invoice).setPickCustomerName(t.getEntityName());
+                detail.setInvoice(invoice).setEntityName(t.getEntityName()).setCustomerName(customerName).setUpdateTime(new Date());
             }
             tbFeeDetailsService.updateBatchById(feeDetailsList);
             invoiceOrder.setStatus(2).setInvoiceTime(new Date());
@@ -158,4 +160,42 @@ public class TbInvoiceInfoService extends ServiceImpl<TbInvoiceInfoMapper, TbInv
         */
     }
 
+    public List<FeeDeatilsGroup> getDetailsById(String id){
+        List<TbInvoiceOrder> invoiceOrderList = tbInvoiceOrderService.findByInfoId(id);
+        List<TbFeeDetails> allDetailsList = new ArrayList<>();
+        for (TbInvoiceOrder invoiceOrder : invoiceOrderList) {
+            List<TbFeeDetails> detailsList = tbFeeDetailsService.findByTransactionId(invoiceOrder.getTransactionId());
+            allDetailsList.addAll(detailsList);
+        }
+        List<FeeDeatilsGroup> groups = new ArrayList<>();
+        for (TbFeeDetails detail : allDetailsList) {
+            FeeDeatilsGroup group = new FeeDeatilsGroup();
+            BeanUtil.copyProperties(detail, group);
+            String hash = (detail.getItemTypeName() + detail.getUnitPrice()).hashCode() + "";
+            group.setGroupHash(hash);
+            groups.add(group);
+        }
+        return grouping(groups);
+    }
+
+    private List<FeeDeatilsGroup> grouping(List<FeeDeatilsGroup> list){
+        Map<String, List<FeeDeatilsGroup>> collect = list.stream()
+                .collect(Collectors.groupingBy(FeeDeatilsGroup::getGroupHash));
+        List<FeeDeatilsGroup> completeGroups = new ArrayList<>();
+        for (String key : collect.keySet()) {
+            List<FeeDeatilsGroup> partGroups = collect.get(key);
+            FeeDeatilsGroup realGroup = new FeeDeatilsGroup();
+            realGroup.setItemTypeName(partGroups.get(0).getItemTypeName())
+            .setUnitPrice(partGroups.get(0).getUnitPrice());
+            for (FeeDeatilsGroup partGroup : partGroups) {
+                realGroup.setItemPrice(realGroup.getItemPrice().add(partGroup.getItemPrice()))
+                .setNoTaxPrice(realGroup.getNoTaxPrice().add(partGroup.getNoTaxPrice()))
+                .setTaxPrice(realGroup.getTaxPrice().add(partGroup.getTaxPrice()))
+                .setNum(realGroup.getNum() + partGroup.getNum());
+            }
+            completeGroups.add(realGroup);
+        }
+	    return completeGroups;
+    }
+
 }

+ 64 - 0
sp-server/src/main/java/com/pj/project/tb_invoice_info/dto/FeeDeatilsGroup.java

@@ -0,0 +1,64 @@
+package com.pj.project.tb_invoice_info.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ *
+ * @Auther: lzm
+ * @Date: 2022/07/22/18:30
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+public class FeeDeatilsGroup {
+
+
+    /**
+     * 业务类型
+     */
+    private String itemTypeName;
+
+
+    /**
+     * 项目金额(元)
+     */
+    private BigDecimal itemPrice = new BigDecimal(0);
+
+
+
+    /**
+     * 不含税款
+     */
+    private BigDecimal noTaxPrice = new BigDecimal(0);
+
+    /**
+     * 税款
+     */
+    private BigDecimal taxPrice = new BigDecimal(0);
+
+    /**
+     * 税率
+     */
+    private BigDecimal taxRate = new BigDecimal(0);
+
+
+    /**
+     * 单价
+     */
+    private BigDecimal unitPrice = new BigDecimal(0);
+
+
+    /**
+     * 数量
+     */
+    private Integer num = 0;
+
+
+    private String groupHash;
+}

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

@@ -4,6 +4,7 @@ import java.util.List;
 
 import cn.hutool.core.util.StrUtil;
 import com.pj.constants.UserTypeEnum;
+import com.pj.project.tb_fee_details.TbFeeDetails;
 import com.pj.utils.so.SoMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
@@ -34,8 +35,7 @@ public class TbInvoiceOrderController {
 	@Transactional(rollbackFor = Exception.class)
 	public AjaxJson add(TbInvoiceOrder t){
 		tbInvoiceOrderService.add(t);
-		t = tbInvoiceOrderService.getById(SP.publicMapper.getPrimarykey());
-		return AjaxJson.getSuccessData(t);
+		return AjaxJson.getSuccess();
 	}
 
 	/** 删 */  
@@ -82,6 +82,12 @@ public class TbInvoiceOrderController {
 		return AjaxJson.getPageData(so.getDataCount(), list);
 	}
 
+	@RequestMapping("getDetailsByTransId")
+    public AjaxJson getDetailsByTransId(String transactionId) {
+        List<TbFeeDetails> details = tbInvoiceOrderService.getDetailsByTransId(transactionId);
+        return AjaxJson.getSuccessData(details);
+    }
+
 
 	
 	

+ 45 - 10
sp-server/src/main/java/com/pj/project/tb_invoice_order/TbInvoiceOrderService.java

@@ -22,6 +22,10 @@ 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_costomer.TbCostomer;
+import com.pj.project.tb_costomer.TbCostomerService;
+import com.pj.project.tb_fee_details.TbFeeDetails;
+import com.pj.project.tb_fee_details.TbFeeDetailsService;
 import com.pj.project.tb_goods.TbGoods;
 import com.pj.project.tb_goods.TbGoodsService;
 import com.pj.project.tb_order.TbOrder;
@@ -58,20 +62,29 @@ public class TbInvoiceOrderService extends ServiceImpl<TbInvoiceOrderMapper, TbI
     @Resource
     TbBusinessCarService tbBusinessCarService;
     @Resource
+    TbCostomerService tbCostomerService;
+    @Resource
+    TbFeeDetailsService tbFeeDetailsService;
+    @Resource
     MyConfig myConfig;
     @Resource
     OcrConfig ocrConfig;
 
 	/** 增 */
-	int add(TbInvoiceOrder t){
-        String result = orcImage(t.getBillImage());
-        String transactionId = getTransId(result);
-//        if(StrUtil.isEmpty(t.getTransactionId())){
-//            String result = orcImage(t.getBillImage());
-//            transactionId = getTransId(result);
-//        }else{
-//            transactionId = t.getTransactionId();
-//        }
+	void add(TbInvoiceOrder t){
+//        String result = orcImage(t.getBillImage());
+//        String transactionId = getTransId(result);
+        String transactionId;
+        boolean isWxNotify = false;
+        if(StrUtil.isEmpty(t.getTransactionId())){
+            //手动上传账单的情况
+            String result = orcImage(t.getBillImage());
+            transactionId = getTransId(result);
+        }else{
+            //微信回调的情况
+            transactionId = t.getTransactionId();
+            isWxNotify = true;
+        }
 
         TbInvoiceOrder InOrder = findByTransactionId(transactionId);
         if(InOrder != null){
@@ -87,15 +100,26 @@ public class TbInvoiceOrderService extends ServiceImpl<TbInvoiceOrderMapper, TbI
         String attachStr = tbOrder.getAttach();
         Attach attach = JSONUtil.toBean(attachStr, Attach.class);
         String businessId = attach.getB();
+        boolean includZheng = false;//是否包含整车业务
         if (StrUtil.isNotEmpty(businessId)) {
             List<String> businessIds = StrUtil.splitTrim(businessId, ",");
             List<TbBusiness> businessList = tbBusinessService.listByIds(businessIds);
+
             for (TbBusiness tbBusiness : businessList) {
                 businessNoList.add(tbBusiness.getNo());
                 TbGoods good = tbGoodsService.getById(tbBusiness.getGoodsId());
                 businessNameList.add(good.getName());
+                //微信回调的情况下,获取整车业务的客户id
+                if(isWxNotify && !includZheng && StrUtil.contains(good.getName(), "整车")){
+                    includZheng = true;
+                    t.setCustomerId(tbBusiness.getCustomerId());
+                }
             }
         }
+        if(isWxNotify && !includZheng){
+            log.error("该交易单号不包含整车业务,不自动生成开票订单, transactionId: " + transactionId );
+            return;
+        }
         List<PriceBO> cars = JSONUtil.toList(attach.getC(), PriceBO.class);
         if(cars.size()>0){
             businessNameList.add("停车费");
@@ -110,9 +134,15 @@ public class TbInvoiceOrderService extends ServiceImpl<TbInvoiceOrderMapper, TbI
         t.setBusinessName(businessNameStr).setBusinessNo(businessNoStr).setStatus(1)
                 .setTransactionId(transactionId).setBillMoney(billMoney)
                 .setStatus(0).setCreateTime(new Date());
-        return tbInvoiceOrderMapper.add(t);
+        tbInvoiceOrderMapper.add(t);
 	}
 
+	public void addT(String transactionId){
+        TbInvoiceOrder t = new TbInvoiceOrder();
+        t.setTransactionId(transactionId);
+        this.add(t);
+    }
+
 	/** 删 */
 	int delete(Long id){
 		return tbInvoiceOrderMapper.delete(id);
@@ -189,4 +219,9 @@ public class TbInvoiceOrderService extends ServiceImpl<TbInvoiceOrderMapper, TbI
         return new BigDecimal(money);
     }
 
+    public List<TbFeeDetails> getDetailsByTransId(String transactionId) {
+        List<TbFeeDetails> detailsList = tbFeeDetailsService.findByTransactionId(transactionId);
+        return detailsList;
+    }
+
 }

TEMPAT SAMPAH
sp-server/src/main/resources/static/day-fee-new.xlsx