Browse Source

其他业务

qzyReal 3 years ago
parent
commit
57877aafb6
35 changed files with 737 additions and 171 deletions
  1. 2 2
      app/pages/onely-disinfect/type-business-edit.vue
  2. 2 10
      app/pages/onely-disinfect/type-business.vue
  3. 4 3
      app/pages/wx/pay.vue
  4. 1 1
      sp-admin/sa-frame/menu-list.js
  5. 37 21
      sp-admin/sa-view/tb-business/tb-car-disincle-add.html
  6. 32 23
      sp-admin/sa-view/tb-business/tb-car-disincle-edit.html
  7. 2 2
      sp-admin/sa-view/tb-business/tb-car-disincle-list.html
  8. 21 1
      sp-admin/sa-view/tb-item-type/tb-item-add.html
  9. 19 2
      sp-admin/sa-view/tb-item-type/tb-item-edit.html
  10. 1 0
      sp-admin/sa-view/tb-item-type/tb-item-list.html
  11. 2 0
      sp-server/src/main/java/com/pj/api/bo/OtherBusinessBO.java
  12. 2 0
      sp-server/src/main/java/com/pj/api/bo/OtherBusinessEditBO.java
  13. 6 2
      sp-server/src/main/java/com/pj/api/jh/service/JhService.java
  14. 81 24
      sp-server/src/main/java/com/pj/api/service/ApiService.java
  15. 20 7
      sp-server/src/main/java/com/pj/api/wx/service/WxService.java
  16. 60 0
      sp-server/src/main/java/com/pj/project/relation_business_car/RelationBusinessCar.java
  17. 105 0
      sp-server/src/main/java/com/pj/project/relation_business_car/RelationBusinessCarController.java
  18. 29 0
      sp-server/src/main/java/com/pj/project/relation_business_car/RelationBusinessCarMapper.java
  19. 48 0
      sp-server/src/main/java/com/pj/project/relation_business_car/RelationBusinessCarMapper.xml
  20. 52 0
      sp-server/src/main/java/com/pj/project/relation_business_car/RelationBusinessCarService.java
  21. 49 0
      sp-server/src/main/java/com/pj/project/relation_business_car/RelationBusinessCarUtil.java
  22. 5 1
      sp-server/src/main/java/com/pj/project/tb_business/TbBusiness.java
  23. 6 0
      sp-server/src/main/java/com/pj/project/tb_business/TbBusinessController.java
  24. 1 1
      sp-server/src/main/java/com/pj/project/tb_business/TbBusinessMapper.xml
  25. 53 32
      sp-server/src/main/java/com/pj/project/tb_business/TbBusinessService.java
  26. 2 0
      sp-server/src/main/java/com/pj/project/tb_business_car/TbBusinessCar.java
  27. 2 0
      sp-server/src/main/java/com/pj/project/tb_business_car/TbBusinessCarMapper.java
  28. 14 0
      sp-server/src/main/java/com/pj/project/tb_business_car/TbBusinessCarMapper.xml
  29. 8 0
      sp-server/src/main/java/com/pj/project/tb_business_car/TbBusinessCarService.java
  30. 31 20
      sp-server/src/main/java/com/pj/project/tb_business_item/TbBusinessItemService.java
  31. 29 0
      sp-server/src/main/java/com/pj/project/tb_item/TbItem.java
  32. 8 16
      sp-server/src/main/java/com/pj/project/tb_item/TbItemController.java
  33. 1 1
      sp-server/src/main/java/com/pj/project/tb_item/TbItemMapper.xml
  34. 1 1
      sp-server/src/main/java/com/pj/project/tb_order/TbOrder.java
  35. 1 1
      sp-server/src/main/java/com/pj/project4sp/apilog/Task.java

+ 2 - 2
app/pages/onely-disinfect/type-business-edit.vue

@@ -24,7 +24,7 @@
 				</view>
 			</view>
 			<view class="item">
-				<view class="l"><text style="color: red;">*</text>车辆类型:</view>
+				<view class="l">车辆类型:</view>
 				<view class="r">
 					<picker class="p-picker" id="qy" @change="bindPickerChange($event)" :value="type.index"
 						:range="type.list" range-key="name">
@@ -34,7 +34,7 @@
 				</view>
 			</view>
 			<view class="item">
-				<view class="l"><text style="color: red;">*</text>车辆规格:</view>
+				<view class="l">车辆规格:</view>
 				<view class="r">
 					<u-input placeholder="请填写车辆规格" v-model="form.carSize" />
 				</view>

+ 2 - 10
app/pages/onely-disinfect/type-business.vue

@@ -25,7 +25,7 @@
 				</view>
 			</view>
 			<view class="item">
-				<view class="l"><text style="color: red;">*</text>车辆类型:</view>
+				<view class="l">车辆类型:</view>
 				<view class="r">
 					<picker class="p-picker" id="qy" @change="bindPickerChange($event)" :value="type.index"
 						:range="type.list" range-key="name">
@@ -35,7 +35,7 @@
 				</view>
 			</view>
 			<view class="item">
-				<view class="l"><text style="color: red;">*</text>车辆规格(米):</view>
+				<view class="l">车辆规格(米):</view>
 				<view class="r">
 					<u-input placeholder="请填写车辆规格" v-model="form.carSize" />
 				</view>
@@ -186,14 +186,6 @@
 					this.$common.toast('请输入车牌号')
 					return;
 				}
-				if (!this.$common.isNum(this.form.carSize)) {
-					this.$common.toast('请输入正确的规格')
-					return;
-				}
-				if (this.type.index == 1 && !this.$common.isNum(this.form.carWeight)) {
-					this.$common.toast('请输正确的载重')
-					return;
-				}
 				let itemList = this.itemType.items;
 				let checkList = this.checkList;
 				let list = itemList.filter(obj => checkList.indexOf(obj.id) !== -1);

+ 4 - 3
app/pages/wx/pay.vue

@@ -181,7 +181,8 @@
 			confirmPayFn() {
 				let carIds = this.carsSelect
 				let cars = this.cars.filter(obj => carIds.indexOf(obj.id) !== -1);
-				let carNos = this.cars.map(obj => obj.carNo).join('、')
+				let carNos = this.cars.map(obj => obj.carNo).join('、');
+					let type = this.type;
 				let p = {
 					b: this.businessSelect.length > 0 ? this.item.businessId : '',
 					c: JSON.stringify(cars.map(obj => {
@@ -192,9 +193,9 @@
 					})),
 					money: this.total,
 					tradeType: "JSAPI",
-					openid: this.openid
+					openid: this.openid,
+					type:type
 				}
-				let type = this.type;
 				let con = 'A1-停车费';
 				let tradeType = 'PORT_PARKING_FEE';
 				if (type == 2) {

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

@@ -316,7 +316,7 @@ var menuList = [{
 			},
 			{
 				id: 'tb-car-disincle-list',
-				name: '灵活业务',
+				name: '其他业务',
 				url: 'sa-view/tb-business/tb-car-disincle-list.html',
 				childList:[
 					{

+ 37 - 21
sp-admin/sa-view/tb-business/tb-car-disincle-add.html

@@ -55,20 +55,26 @@
 									</sa-item>
 									<sa-item type="num" name="车辆规格(米)" placeholder="请输入车辆规格" v-model="m.carSize" br>
 									</sa-item>
+									<sa-item name="作业人员" placeholder="请输入作业人员" v-model="m.operator" br>
+									</sa-item>
 								</el-col>
 								<el-col :span='12'>
 									<div class="c-item">
 										<label class="c-label">车辆类型:</label>
-										<el-select v-model="m.carType" placeholder="请选择">
-											<el-option label="空车" value="空车">
-											</el-option>
-											<el-option label="载货" value="载货">
+										<el-select v-model="m.carType" placeholder="请选择" @change="carTypeChange">
+											<el-option :label="item.name" :value="item.name" v-for="(item,index) in carTypeList">
 											</el-option>
 										</el-select>
 									</div>
-									<sa-item v-if="m.carType=='载货'" type="num" name="载重(kg)" placeholder="请输入车辆载重"
+									<sa-item v-if="m.carType.indexOf('重')!==-1" type="num" name="载重(kg)" placeholder="请输入车辆载重"
 										v-model="m.carWeight" br>
 									</sa-item>
+									<div class="c-item">
+										<label class="c-label">作业时间:</label>
+										<el-date-picker type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
+											v-model="m.operateTime"></el-date-picker>
+									</div>
+
 								</el-col>
 							</el-row>
 							<el-card class="box-card">
@@ -133,15 +139,16 @@
 						id: '', // 主键 
 						carNo: '',
 						carSize: '',
-						customerId:'',
-						carType: '载',
+						customerId: '',
+						carType: '载',
 						carWeight: '',
 						itemTypeId: ''
 					}, // 实体对象 
 					itemTypeList: [],
 					items: [],
 					checkList: [],
-					customerList: []
+					customerList: [],
+					carTypeList: []
 				},
 				computed: {
 					totalPrice() {
@@ -156,6 +163,19 @@
 					}
 				},
 				methods: {
+					carTypeChange(v){
+						this.getItems();
+					},
+					getItemType() {
+						sa.ajax('/TbItem/getItemType', function(resp) {
+							let list = resp.data;
+							if (list.length > 0) {
+								this.m.carType=list[0].id;
+							}
+							this.carTypeList=list;
+							this.getItemTypeList()
+						}.bind(this))
+					},
 					getCustomerList() {
 						sa.ajax('/TbCostomer/getList', {
 							pageNo: 1,
@@ -163,12 +183,12 @@
 							type: 0,
 							judgeStatus: 2
 						}, function(res) {
-							let list=res.data;
-							if(list.length>0){
-								this.m.customerId=list[0].id;
+							let list = res.data;
+							if (list.length > 0) {
+								this.m.customerId = list[0].id;
 							}
 							this.customerList = res.data; // 数据
-							
+
 						}.bind(this));
 					},
 					getItemTypeList() {
@@ -189,6 +209,9 @@
 							typeId: this.m.itemTypeId
 						}, function(resp) {
 							let list = resp.data;
+							if(this.m.carType){
+								list=list.filter(obj=>obj.itemType&&obj.itemType.indexOf(this.m.carType)!==-1);
+							}
 							this.checkList = list.filter(obj => obj.need == 1).map(obj => obj.id)
 							this.items = list;
 						}.bind(this))
@@ -199,14 +222,6 @@
 							sa.error('请输入车牌号')
 							return false;
 						}
-						if (!m.carSize) {
-							sa.error('请输入规格')
-							return false;
-						}
-						if (!m.carWeight && m.carType == '载货') {
-							sa.error('请输入车辆载重')
-							return false;
-						}
 						let checkList = this.checkList;
 						let itemList = this.items;
 						let list = itemList.filter(obj => checkList.indexOf(obj.id) !== -1);
@@ -219,7 +234,8 @@
 				},
 				mounted: function() {
 					this.getCustomerList();
-					this.getItemTypeList()
+					this.getItemTypeList();
+					this.getItemType();
 				}
 			})
 		</script>

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

@@ -42,33 +42,37 @@
 								<span>基本资料</span>
 							</div>
 							<el-row>
-								<div class="c-item">
-									<label class="c-label"><span style="color: red;">*</span>客户:</label>
-									<el-select v-model="m.customerId" placeholder="请选择">
-										<el-option v-for="item in customerList" :key="item.id" :label="item.name"
-											:value="item.id">
-										</el-option>
-									</el-select>
-								</div>
 								<el-col :span='12'>
+									<div class="c-item">
+										<label class="c-label"><span style="color: red;">*</span>客户:</label>
+										<el-select v-model="m.customerId" placeholder="请选择">
+											<el-option v-for="item in customerList" :key="item.id" :label="item.name"
+												:value="item.id">
+											</el-option>
+										</el-select>
+									</div>
 									<sa-item name="车牌号" placeholder="请输入车牌号" v-model="m.carNo" br>
 									</sa-item>
 									<sa-item type="num" name="车辆规格(米)" placeholder="请输入车辆规格" v-model="m.carSize" br>
 									</sa-item>
+									<sa-item name="作业人员" placeholder="请输入作业人员" v-model="m.operator" br>
+									</sa-item>
 								</el-col>
 								<el-col :span='12'>
 									<div class="c-item">
 										<label class="c-label">车辆类型:</label>
-										<el-select v-model="m.carType" placeholder="请选择">
-											<el-option label="空车" value="空车">
-											</el-option>
-											<el-option label="载货" value="载货">
+										<el-select v-model="m.carType" placeholder="请选择" @change="carTypeChange">
+											<el-option :label="item.name" :value="item.name" v-for="(item,index) in carTypeList">
 											</el-option>
 										</el-select>
 									</div>
-									<sa-item v-if="m.carType=='载货'" type="num" name="载重(kg)" placeholder="请输入车辆载重"
+									<sa-item v-if="m.carType.indexOf('重')!==-1" type="num" name="载重(kg)" placeholder="请输入车辆载重"
 										v-model="m.carWeight" br>
 									</sa-item>
+									<div class="c-item">
+										<label class="c-label">作业时间:</label>
+										<el-date-picker type="datetime" value-format="yyyy-MM-dd HH:mm:ss" v-model="m.operateTime"></el-date-picker>
+									</div>
 								</el-col>
 							</el-row>
 							<el-card class="box-card">
@@ -134,7 +138,7 @@
 						id: '', // 主键 
 						carNo: '',
 						carSize: '',
-						carType: '载',
+						carType: '载',
 						carWeight: '',
 						itemTypeId: ''
 					}, // 实体对象 
@@ -142,7 +146,8 @@
 					items: [],
 					businessItems:[],
 					checkList: [],
-					customerList:[]
+					customerList:[],
+					carTypeList:[]
 				},
 				computed: {
 					totalPrice() {
@@ -158,6 +163,14 @@
 					}
 				},
 				methods: {
+					carTypeChange(v){
+						this.getItems();
+					},
+					getItemType() {
+						sa.ajax('/TbItem/getItemType', function(resp) {
+							this.carTypeList= resp.data;
+						}.bind(this))
+					},
 					getCustomerList() {
 						sa.ajax('/TbCostomer/getList', {
 							pageNo: 1,
@@ -182,6 +195,9 @@
 							typeId: this.m.itemTypeId
 						}, function(resp) {
 							let list = resp.data;
+							if(this.m.carType){
+								list=list.filter(obj=>obj.itemType&&obj.itemType.indexOf(this.m.carType)!==-1);
+							}
 							this.items = list;
 							let businessItems=this.businessItems;
 							list.forEach(obj=>{
@@ -200,14 +216,6 @@
 							sa.error('请输入车牌号')
 							return false;
 						}
-						if (!m.carSize) {
-							sa.error('请输入规格')
-							return false;
-						}
-						if (!m.carWeight && m.carType == '载货') {
-							sa.error('请输入车辆载重')
-							return false;
-						}
 						let checkList = this.checkList;
 						let itemList = this.items;
 						let list = itemList.filter(obj => checkList.indexOf(obj.id) !== -1);
@@ -227,6 +235,7 @@
 							this.businessItems=data.items;
 							this.checkList=data.items.map(obj=>obj.itemId);
 							this.getItemTypeList();
+							this.getItemType();
 						}.bind(this))
 					}
 				},

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

@@ -48,7 +48,7 @@
 				<el-table class="data-table" ref="data-table" :data="dataList">
 					<el-table-column type="index" width="50"></el-table-column>
 					<sa-td name="业务单号" prop="no" width="160"></sa-td>
-					<sa-td name="业务类型" prop="goodsName"></sa-td>
+					<sa-td name="车辆类型" prop="goodsName"></sa-td>
 					<sa-td name="车牌号" prop="carNo"></sa-td>
 					<sa-td name="确认" prop="adminConfirmInput" type="enum" :jv="{1: '已确认', 0: '未确认'}"></sa-td>
 					<sa-td name="已支付(元)" prop="payMoney" width="140"></sa-td>
@@ -182,7 +182,7 @@
 					// 删除
 					del: function(data) {
 						sa.confirm('是否删除,此操作不可撤销', function() {
-							sa.ajax('/TbBusiness/delete?id=' + data.id, function(res) {
+							sa.ajax('/TbBusiness/deleteOtherBusiness?id=' + data.id, function(res) {
 								sa.arrayDelete(this.dataList, data);
 								sa.ok('删除成功');
 								sa.f5TableHeight(); // 刷新表格高度 

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

@@ -55,6 +55,13 @@
 								</el-option>
 							</el-select>
 						</div>
+						<div class="c-item">
+							<label class="c-label">空车/载重:</label>
+							<el-select multiple v-model="itemType" placeholder="请选择">
+								<el-option :label="item.name" :value="item.name" v-for="(item,index) in carTypeList">
+								</el-option>
+							</el-select>
+						</div>
 						<sa-item type="text" name="计价单位" v-model="m.unit" placeholder="请输入计量单位" br></sa-item>
 						<div class="c-item">
 							<label class="c-label">计费金额(元):</label>
@@ -119,9 +126,20 @@
 					}, // 实体对象
 					itemTypeList: [],
 					payTypeList: [],
-					businessTypeList: []
+					businessTypeList: [],
+					carTypeList:[],
+					itemType:[]
 				},
 				methods: {
+					getItemType() {
+						sa.ajax('/TbItem/getItemType', function(resp) {
+							let list = resp.data;
+							if (list.length > 0) {
+								this.itemType.push(list[0].id);
+							}
+							this.carTypeList=list;
+						}.bind(this))
+					},
 					getBusinessTypeList() {
 						sa.ajax('/TbCostomer/getTypeList', function(resp) {
 							let list = resp.data;
@@ -172,6 +190,7 @@
 						let businessType = businessTypeList.filter(obj => obj.id == m.businessType).pop();
 						m.businessType = businessType.id;
 						m.businessTypeName = businessType.name;
+						m.itemType=this.itemType.join(',')
 						// 开始增加或修改
 						if (this.id <= 0) { // 添加
 							sa.ajax('/TbItem/add', m, function(res) {
@@ -203,6 +222,7 @@
 					}
 					this.getBusinessTypeList();
 					this.getPayTypeList();
+					this.getItemType();
 				}
 			})
 		</script>

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

@@ -55,6 +55,13 @@
 								</el-option>
 							</el-select>
 						</div>
+						<div class="c-item">
+							<label class="c-label">空车/载重:</label>
+							<el-select multiple v-model="itemType" placeholder="请选择">
+								<el-option :label="item.name" :value="item.name" v-for="(item,index) in carTypeList">
+								</el-option>
+							</el-select>
+						</div>
 						<sa-item type="text" name="计价单位" v-model="m.unit" placeholder="请输入计量单位" br></sa-item>
 						<div class="c-item">
 							<label class="c-label">计费金额(元):</label>
@@ -119,9 +126,16 @@
 					}, // 实体对象
 					itemTypeList: [],
 					payTypeList: [],
-					businessTypeList: []
+					businessTypeList: [],
+					carTypeList:[],
+					itemType:[]
 				},
 				methods: {
+					getItemType() {
+						sa.ajax('/TbItem/getItemType', function(resp) {
+							this.carTypeList= resp.data;
+						}.bind(this))
+					},
 					getBusinessTypeList() {
 						sa.ajax('/TbCostomer/getTypeList', function(resp) {
 							let list = resp.data;
@@ -167,6 +181,7 @@
 						let businessType = businessTypeList.filter(obj => obj.id == m.businessType).pop();
 						m.businessType = businessType.id;
 						m.businessTypeName = businessType.name;
+						m.itemType=this.itemType.join(',')
 						// 开始增加或修改
 						sa.ajax('/TbItem/update', m, function(res) {
 							sa.alert('修改成功', this.clean);
@@ -183,10 +198,12 @@
 				mounted: function() {
 					sa.ajax('/TbItem/getById?id=' + this.id, function(res) {
 						this.m = res.data;
+						this.itemType=this.m.itemType.split(',')
 					}.bind(this))
 					this.getBusinessTypeList();
 					this.getPayTypeList();
-				}
+					this.getItemType();				
+					}
 			})
 		</script>
 	</body>

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

@@ -35,6 +35,7 @@
 					</el-table-column>
 					<sa-td name="明细名称" prop="itemName" width="300px"></sa-td>
 					<sa-td name="业务类型" prop="businessTypeName"></sa-td>
+					<sa-td name="空车/载重" prop="itemType"></sa-td>
 					<sa-td name="收费类型" prop="payTypeName"></sa-td>
 					<sa-td name="价格" prop="price"></sa-td>
 					<sa-td name="计价单位" prop="unit"></sa-td>

+ 2 - 0
sp-server/src/main/java/com/pj/api/bo/OtherBusinessBO.java

@@ -17,6 +17,8 @@ public class OtherBusinessBO implements Serializable {
     private Double carSize;
     private String itemTypeId;
     private String carType;
+    private String operator;
+    private String operateTime;
     private Double carWeight;
     private List<TbItem>items=new ArrayList<>();
     private String itemJson;

+ 2 - 0
sp-server/src/main/java/com/pj/api/bo/OtherBusinessEditBO.java

@@ -18,6 +18,8 @@ public class OtherBusinessEditBO implements Serializable {
     private Double carSize;
     private String itemTypeId;
     private String carType;
+    private String operator;
+    private String operateTime;
     private Double carWeight;
     private List<TbBusinessItem>items=new ArrayList<>();
 }

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

@@ -70,18 +70,22 @@ public class JhService {
             throw new BusinessException("金额不正确");
         }
         String openid = request.getParameter("openid");
+        String type = request.getParameter("type");
         String desc = request.getParameter("desc");
         String businessId = request.getParameter("b");
         String c = request.getParameter("c");
         String a = request.getParameter("a");
         String tradeType = request.getParameter("tradeType");
         String businessType = request.getParameter("businessType");
+        if (StrUtil.isEmpty(type)){
+            throw new BusinessException("参数异常");
+        }
         Attach atchMap = new Attach();
         atchMap.setC(c).setB(businessId).setA(a);
         String out_trade_no = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + RandomUtil.randomNumbers(6);
         StaticLog.info("outTradeNo:{}", out_trade_no);
         Map<String, Object> params = new HashMap<>();
-        params.put("attach", JSONUtil.toJsonStr(atchMap));
+       // params.put("attach", JSONUtil.toJsonStr(atchMap));
         params.put("productType", jhConfig.getProductType());
         params.put("businessMerchantNo", jhConfig.getBusinessMerchantNo());
         params.put("openId", openid);
@@ -118,7 +122,7 @@ public class JhService {
             TbOrder tbOrder = new TbOrder();
             tbOrder.setAttach(JSONUtil.toJsonStr(atchMap))
                     .setOpenid(openid)
-                    .setOrderTime(new Date())
+                    .setOrderTime(new Date()).setBusinessType(Integer.valueOf(type))
                     .setOutTradeNo(out_trade_no).setPrice(money);
             tbOrderService.save(tbOrder);
             taskService.addTask(new CheckPayStatusTask(RandomUtil.randomNumbers(12), 2000, out_trade_no));

+ 81 - 24
sp-server/src/main/java/com/pj/api/service/ApiService.java

@@ -134,6 +134,7 @@ public class ApiService {
 
     public List<TbBusinessCar> searchPartCar(String carNo) {
         List<TbBusinessCar> list = tbBusinessCarService.searchPartCar(carNo);
+
         list = list.stream().filter(tbBusinessCar -> {
             String businessId = tbBusinessCar.getBusinessId();
             if (StrUtil.isEmpty(businessId)) {
@@ -142,9 +143,16 @@ public class ApiService {
             TbBusiness tbBusiness = tbBusinessService.getById(businessId);
             return tbBusiness.getAdminConfirmInput() == 1;
         }).collect(Collectors.toList());
+        List<TbBusinessCar> otherBusinessCarList = tbBusinessCarService.searchOtherBusinessCar(carNo);
+        otherBusinessCarList=  otherBusinessCarList.stream().filter(tbBusinessCar -> {
+            String businessCarId = tbBusinessCar.getId();
+            List<TbBusiness> businesses = tbBusinessService.findOtherBusinessByCarId(businessCarId);
+            return !businesses.isEmpty();
+        }).collect(Collectors.toList());
         List<TbBusinessCar> cars = tbBusinessCarService.findTheNoBusinessCar(carNo);
         //过滤掉不用缴费的车
         list.addAll(cars);
+        list.addAll(otherBusinessCarList);
         return list;
     }
 
@@ -273,26 +281,31 @@ public class ApiService {
 
     public void addCarDisinfect(OtherBusinessBO otherBusinessBO) {
         String carNo = otherBusinessBO.getCarNo().trim().toUpperCase();
-        TbBusinessCar db = tbBusinessCarService.findInAndHasBusinessCar(carNo);
-        if (db != null) {
-            throw new BusinessException(carNo + "有未完成作业");
-        }
-        db = tbBusinessCarService.findInAndNoBusinessCar(carNo);
+        TbBusinessCar db = tbBusinessCarService.findNotOutCar(carNo);
+        String customerId = otherBusinessBO.getCustomerId();
         if (db == null) {
-            db = new TbBusinessCar();
-            db.setPay(0).setTimeUpdate(new Date());
+            db = tbBusinessCarService.findNotInCar(carNo);
+            if (db == null) {
+                TbCar tbCar = tbCarService.findByCardNo(carNo);
+                db = new TbBusinessCar();
+                db.setPay(0).setCarNo(carNo).setBusinessType(TbBusiness.BusinessType.CAR_DISINCLE.getCode())
+                        .setIsLock(0).setCarCompany(tbCar != null ? tbCar.getCustomerName() : "临时");
+                db.setCarSize(otherBusinessBO.getCarSize()).setTimeUpdate(new Date()).setCustomerId(customerId)
+                        .setNo(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm")) + RandomUtil.randomNumbers(4));
+                tbBusinessCarService.save(db);
+            }
         }
-        TbCar tbCar = tbCarService.findByCardNo(carNo);
-        db.setCarNo(carNo).setIsLock(0).setCarCompany(tbCar != null ? tbCar.getCustomerName() : "临时");
+
         TbBusiness tbBusiness = new TbBusiness();
-        String customerId = otherBusinessBO.getCustomerId();
-        db.setCustomerId(customerId);
+        tbBusiness.setBusinessCarId(db.getId());
         TbCostomer tbCostomer = tbCostomerService.getById(customerId);
-        if (tbCostomer!=null){
+        if (tbCostomer != null) {
             tbBusiness.setCustomerId(customerId).setCustomerName(tbCostomer.getName());
         }
-        db.setCarSize(otherBusinessBO.getCarSize());
         List<TbItem> tbItems = otherBusinessBO.getItems();
+        if (tbItems.isEmpty()) {
+            throw new BusinessException("请选择明细");
+        }
         BigDecimal price = new BigDecimal("0");
         List<TbBusinessItem> itemList = new ArrayList<>();
         String no = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm")) + RandomUtil.randomNumbers(4);
@@ -300,11 +313,11 @@ public class ApiService {
         for (TbItem tbItem : tbItems) {
             TbBusinessItem item = new TbBusinessItem();
             int num = tbItem.getNum();
-          RelationTypeItem relationTypeItem= relationTypeItemService.findByTypeIdAndItemId(otherBusinessBO.getItemTypeId(),tbItem.getId());
+            RelationTypeItem relationTypeItem = relationTypeItemService.findByTypeIdAndItemId(otherBusinessBO.getItemTypeId(), tbItem.getId());
             BigDecimal itemTotalPrice = tbItem.getPrice().multiply(new BigDecimal(num));
             item.setNo(no + "0" + index).setPayTypeName(tbItem.getPayTypeName()).setPayType(tbItem.getPayType())
-                    .setBusinessType(tbItem.getBusinessType()).setTaxRate(NumberUtil.div(tbItem.getTaxRate().doubleValue(),100D,2));
-            item.setItemCode(tbItem.getItemCode()).setNum("1").setNum(num + "").setItemId(tbItem.getId()).setItemCode(tbItem.getItemCode())
+                    .setBusinessType(tbItem.getBusinessType()).setTaxRate(NumberUtil.div(tbItem.getTaxRate().doubleValue(), 100D, 2));
+            item.setItemCode(tbItem.getItemCode()).setNum(num + "").setItemId(tbItem.getId()).setItemCode(tbItem.getItemCode())
                     .setItemName(tbItem.getItemName()).setItemPrice(tbItem.getPrice()).setRemark(tbItem.getRemark())
                     .setItemTypeId(otherBusinessBO.getItemTypeId()).setItemTypeName(relationTypeItem.getTypeName())
                     .setUnit(tbItem.getUnit()).setTotal(itemTotalPrice).setCreateTime(new Date());
@@ -313,6 +326,7 @@ public class ApiService {
             index++;
         }
         tbBusiness.setCardSize(otherBusinessBO.getCarSize()).setNetWeight(otherBusinessBO.getCarWeight())
+                .setOperator(otherBusinessBO.getOperator()).setOperateTime(otherBusinessBO.getOperateTime())
                 .setNo(no).setGoodsName(otherBusinessBO.getCarType()).setItemTypeId(otherBusinessBO.getItemTypeId())
                 .setCreateTime(new Date()).setBusinessType(TbBusiness.BusinessType.CAR_DISINCLE.getCode())
                 .setItemPrice(price).setTotalMoney(price);
@@ -323,9 +337,6 @@ public class ApiService {
             tbBusiness.setCardNo(carNo);
         }
         tbBusinessService.save(tbBusiness);
-        db.setBusinessId(tbBusiness.getId())
-                .setNo(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm")) + RandomUtil.randomNumbers(4));
-        tbBusinessCarService.save(db);
         itemList.forEach(tbBusinessItem -> tbBusinessItem.setBusinessId(tbBusiness.getId()));
         tbBusinessItemService.saveBatch(itemList);
     }
@@ -338,17 +349,63 @@ public class ApiService {
             throw new BusinessException("数据不存在");
         }
         List<TbItem> tbItems = JSONUtil.toList(itemJson, TbItem.class);
-        tbItems.forEach(tbItem -> {
-
 
-        });
     }
 
     public void editOtherBusiness(OtherBusinessBO otherBusinessBO) {
+        List<TbItem> tbItems = otherBusinessBO.getItems();
+        if (tbItems.isEmpty()) {
+            throw new BusinessException("请选择明细");
+        }
         String businessId = otherBusinessBO.getId();
+        String carNo = otherBusinessBO.getCarNo();
+        String customerId = otherBusinessBO.getCustomerId();
         tbBusinessItemService.removeByBusinessId(businessId);
-        tbBusinessCarService.removeByBusinessId(businessId);
-        this.addCarDisinfect(otherBusinessBO);
+        TbCostomer tbCostomer = tbCostomerService.getById(customerId);
+        TbBusiness tbBusiness = tbBusinessService.getById(businessId);
+        tbBusiness.setOperateTime(otherBusinessBO.getOperateTime())
+                .setOperator(otherBusinessBO.getOperator())
+                .setCardSize(otherBusinessBO.getCarSize())
+                .setCustomerId(customerId).setNetWeight(otherBusinessBO.getCarWeight())
+                .setGoodsName(otherBusinessBO.getCarType())
+                .setCustomerName(tbCostomer.getName());
+        String prefix = carNo.substring(0, 1);
+        if (CAR_LIST.contains(prefix)) {
+            tbBusiness.setChinaCarNo(carNo);
+        } else {
+            tbBusiness.setCardNo(carNo);
+        }
+        String no = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm")) + RandomUtil.randomNumbers(4);
+        TbBusinessCar tbBusinessCar = tbBusinessCarService.getById(tbBusiness.getBusinessCarId());
+        tbBusinessCar.setCarSize(otherBusinessBO.getCarSize()).setCustomerId(otherBusinessBO.getCustomerId()).setCarNo(carNo)
+                .setTimeUpdate(new Date());
+        int index = 1;
+        BigDecimal price = new BigDecimal("0");
+        List<TbBusinessItem> itemList = new ArrayList<>();
+        for (TbItem tbItem : tbItems) {
+            TbBusinessItem item = new TbBusinessItem();
+            int num = tbItem.getNum();
+            RelationTypeItem relationTypeItem = relationTypeItemService.findByTypeIdAndItemId(otherBusinessBO.getItemTypeId(), tbItem.getId());
+            BigDecimal itemTotalPrice = tbItem.getPrice().multiply(new BigDecimal(num));
+            item.setNo(no + "0" + index).setPayTypeName(tbItem.getPayTypeName())
+                    .setPayType(tbItem.getPayType())
+                    .setBusinessType(tbItem.getBusinessType())
+                    .setTaxRate(NumberUtil.div(tbItem.getTaxRate().doubleValue(), 100D, 2))
+                    .setItemCode(tbItem.getItemCode()).setNum(num + "")
+                    .setItemId(tbItem.getId()).setItemCode(tbItem.getItemCode())
+                    .setItemName(tbItem.getItemName()).setItemPrice(tbItem.getPrice())
+                    .setRemark(tbItem.getRemark())
+                    .setItemTypeId(otherBusinessBO.getItemTypeId())
+                    .setItemTypeName(relationTypeItem.getTypeName()).setBusinessId(otherBusinessBO.getId())
+                    .setUnit(tbItem.getUnit()).setTotal(itemTotalPrice).setCreateTime(new Date());
+            price = price.add(itemTotalPrice);
+            itemList.add(item);
+            index++;
+        }
+        tbBusinessItemService.saveBatch(itemList);
+        tbBusinessService.updateById(tbBusiness);
+        tbBusinessCarService.updateById(tbBusinessCar);
+
     }
 
 }

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

@@ -31,6 +31,7 @@ import com.pj.project.tb_costomer.TbCostomer;
 import com.pj.project.tb_costomer.TbCostomerService;
 import com.pj.project.tb_fee_details.TbFeeDetailsService;
 import com.pj.project.tb_fee_statistics.TbFeeStatisticsService;
+import com.pj.project.tb_order.TbOrder;
 import com.pj.project.tb_order.TbOrderService;
 import com.pj.project.tb_pay_record.TbPayRecord;
 import com.pj.project.tb_pay_record.TbPayRecordService;
@@ -77,6 +78,8 @@ public class WxService {
     private TbAccountService tbAccountService;
     @Resource
     TbFeeDetailsService tbFeeDetailsService;
+    @Resource
+    private TbOrderService tbOrderService;
 
 
     /**
@@ -85,9 +88,13 @@ public class WxService {
     public Map<String, String> prePay(HttpServletRequest request) throws Exception {
         String tradeType = request.getParameter("tradeType");
         String money = request.getParameter("money");
-        if (Double.valueOf(money)<=0){
+        if (Double.valueOf(money) <= 0) {
             throw new BusinessException("金额不正确");
         }
+        String type = request.getParameter("type");
+        if (StrUtil.isEmpty(type)) {
+            throw new BusinessException("参数异常");
+        }
         String openid = request.getParameter("openid");
         String desc = request.getParameter("desc");
 //        String openid = "oDWvn5w-hVkzUuKeY7OBXBV_l1rU";
@@ -104,7 +111,7 @@ public class WxService {
         params.put("nonce_str", RandomUtil.randomString(32));
         params.put("body", desc);
         params.put("out_trade_no", out_trade_no);
-        params.put("attach", JSONUtil.toJsonStr(atchMap));
+        // params.put("attach", JSONUtil.toJsonStr(atchMap));
         String total_free = partConfig.isTestEnv() ? "1" : NumberUtil.mul(money, 100 + "").intValue() + "";
         log.info("pay free:{}", total_free);
         params.put("total_fee", total_free);
@@ -134,6 +141,11 @@ public class WxService {
                     .setTradeType(tradeType);
             Map<String, String> payParams = getPayParams(openid, preId);
             payParams.put("outTradeNo", out_trade_no);
+            TbOrder tbOrder = new TbOrder();
+            tbOrder.setAttach(JSONUtil.toJsonStr(atchMap))
+                    .setOpenid(openid)
+                    .setOrderTime(new Date()).setBusinessType(Integer.valueOf(type))
+                    .setOutTradeNo(out_trade_no).setPrice(money);
             return payParams;
         }
         throw new Exception("支付信息有误");
@@ -188,13 +200,14 @@ public class WxService {
     @Async
     public void WxNotify(NotifyBO notifyBO) {
         String outTradeNo = notifyBO.getOutTradeNo();
-        if (RedisUtil.get(outTradeNo) != null) {
+        TbOrder tbOrder = tbOrderService.findByOutTradeNo(outTradeNo);
+        if (tbOrder == null) {
+            log.error("========订单不存在==========:{}",outTradeNo);
             return;
         }
-        RedisUtil.setByHour(outTradeNo, DateUtil.now(), 2);
         String total_fee = notifyBO.getTotalFee();
         BigDecimal money = new BigDecimal(total_fee).divide(new BigDecimal(100), 2, BigDecimal.ROUND_UP);
-        String attachStr = notifyBO.getAttach();
+        String attachStr = tbOrder.getAttach();
         String transactionId = notifyBO.getTransactionId();
         Date now = new Date();
         if (StrUtil.isNotEmpty(attachStr)) {
@@ -204,8 +217,8 @@ public class WxService {
             for (PriceBO bo1 : cars) {
                 TbBusinessCar car = tbBusinessCarService.getById(bo1.getId());
                 BigDecimal price = bo1.getP();
-                if (price==null||price.doubleValue()<=0){
-                    log.error("付款金额不正确:{}",JSONUtil.toJsonStr(notifyBO));
+                if (price == null || price.doubleValue() <= 0) {
+                    log.error("付款金额不正确:{}", JSONUtil.toJsonStr(notifyBO));
                     continue;
                 }
                 car.setPay(1).setMoney(car.getMoney().add(price)).setPayTime(now);

+ 60 - 0
sp-server/src/main/java/com/pj/project/relation_business_car/RelationBusinessCar.java

@@ -0,0 +1,60 @@
+package com.pj.project.relation_business_car;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.EqualsAndHashCode;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * Model: relation_business_car -- 
+ * @author qzy 
+ */
+@Data
+@Accessors(chain = true)
+@TableName(RelationBusinessCar.TABLE_NAME)
+@EqualsAndHashCode(callSuper = false)
+public class RelationBusinessCar extends Model<RelationBusinessCar> implements Serializable {
+
+	// ---------- 模块常量 ----------
+	/**
+	 * 序列化版本id 
+	 */
+	private static final long serialVersionUID = 1L;	
+	/**
+	 * 此模块对应的表名 
+	 */
+	public static final String TABLE_NAME = "relation_business_car";	
+	/**
+	 * 此模块对应的权限码 
+	 */
+	public static final String PERMISSION_CODE = "relation-business-car";	
+
+
+	// ---------- 表中字段 ----------
+	/**
+	 *  
+	 */
+	@TableId(type = IdType.AUTO)
+	private Long id;	
+
+	/**
+	 *  
+	 */
+	private String businessId;	
+
+	/**
+	 *  
+	 */
+	private String businessCarId;	
+
+
+
+
+
+	
+
+
+}

+ 105 - 0
sp-server/src/main/java/com/pj/project/relation_business_car/RelationBusinessCarController.java

@@ -0,0 +1,105 @@
+package com.pj.project.relation_business_car;
+
+import java.util.List;
+
+import com.pj.utils.so.SoMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import com.pj.utils.sg.*;
+import com.pj.project4sp.SP;
+
+import com.pj.current.satoken.StpUserUtil;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+
+
+/**
+ * Controller: relation_business_car -- 
+ * @author qzy 
+ */
+@RestController
+@RequestMapping("/RelationBusinessCar/")
+public class RelationBusinessCarController {
+
+	/** 底层 Service 对象 */
+	@Autowired
+	RelationBusinessCarService relationBusinessCarService;
+
+	/** 增 */  
+	@RequestMapping("add")
+	@SaCheckPermission(RelationBusinessCar.PERMISSION_CODE)
+	@Transactional(rollbackFor = Exception.class)
+	public AjaxJson add(RelationBusinessCar r){
+		relationBusinessCarService.add(r);
+		r = relationBusinessCarService.getById(SP.publicMapper.getPrimarykey());
+		return AjaxJson.getSuccessData(r);
+	}
+
+	/** 删 */  
+	@RequestMapping("delete")
+	@SaCheckPermission(RelationBusinessCar.PERMISSION_CODE)
+	public AjaxJson delete(Long id){
+		relationBusinessCarService.delete(id);
+		return AjaxJson.getSuccess();
+	}
+	
+	/** 删 - 根据id列表 */  
+	@RequestMapping("deleteByIds")
+	@SaCheckPermission(RelationBusinessCar.PERMISSION_CODE)
+	public AjaxJson deleteByIds(){
+		List<Long> ids = SoMap.getRequestSoMap().getListByComma("ids", long.class); 
+		int line = SP.publicMapper.deleteByIds(RelationBusinessCar.TABLE_NAME, ids);
+		return AjaxJson.getByLine(line);
+	}
+	
+	/** 改 */  
+	@RequestMapping("update")
+	@SaCheckPermission(RelationBusinessCar.PERMISSION_CODE)
+	public AjaxJson update(RelationBusinessCar r){
+		relationBusinessCarService.update(r);
+		return AjaxJson.getSuccess();
+	}
+
+	/** 查 - 根据id */  
+	@RequestMapping("getById")
+	public AjaxJson getById(Long id){
+		RelationBusinessCar r = relationBusinessCarService.getById(id);
+		return AjaxJson.getSuccessData(r);
+	}
+
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */  
+	@RequestMapping("getList")
+	public AjaxJson getList() { 
+		SoMap so = SoMap.getRequestSoMap();
+		List<RelationBusinessCar> list = relationBusinessCarService.getList(so.startPage());
+		return AjaxJson.getPageData(so.getDataCount(), list);
+	}
+	
+	
+	
+	
+	// ------------------------- 前端接口 -------------------------
+	
+	
+	/** 改 - 不传不改 [G] */
+	@RequestMapping("updateByNotNull")
+	public AjaxJson updateByNotNull(Long id){
+		AjaxError.throwBy(true, "如需正常调用此接口,请删除此行代码");
+		// 鉴别身份,是否为数据创建者 
+		long userId = SP.publicMapper.getColumnByIdToLong(RelationBusinessCar.TABLE_NAME, "user_id", id);
+		AjaxError.throwBy(userId != StpUserUtil.getLoginIdAsLong(), "此数据您无权限修改");
+		// 开始修改 (请只保留需要修改的字段)
+		SoMap so = SoMap.getRequestSoMap();
+		so.clearNotIn("id", "businessId", "businessCarId").clearNull().humpToLineCase();	
+		int line = SP.publicMapper.updateBySoMapById(RelationBusinessCar.TABLE_NAME, so, id);
+		return AjaxJson.getByLine(line);
+	}
+	
+	
+	
+	
+	
+	
+
+}

+ 29 - 0
sp-server/src/main/java/com/pj/project/relation_business_car/RelationBusinessCarMapper.java

@@ -0,0 +1,29 @@
+package com.pj.project.relation_business_car;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import com.pj.utils.so.*;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Mapper: relation_business_car -- 
+ * @author qzy 
+ */
+
+@Mapper
+@Repository
+public interface RelationBusinessCarMapper extends BaseMapper <RelationBusinessCar> {
+
+
+	/**
+	 * 查集合 - 根据条件(参数为空时代表忽略指定条件)
+	 * @param so 参数集合 
+	 * @return 数据列表 
+	 */
+	List<RelationBusinessCar> getList(SoMap so);
+
+
+}

+ 48 - 0
sp-server/src/main/java/com/pj/project/relation_business_car/RelationBusinessCarMapper.xml

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pj.project.relation_business_car.RelationBusinessCarMapper">
+
+
+	<!-- ================================== 查询相关 ================================== -->
+	<!-- select id, business_id, business_car_id from relation_business_car  -->
+	
+	<!-- 通用映射:手动模式 -->
+	<resultMap id="model" type="com.pj.project.relation_business_car.RelationBusinessCar">
+		<result property="id" column="id" />
+		<result property="businessId" column="business_id" />
+		<result property="businessCarId" column="business_car_id" />
+	</resultMap>
+	
+	<!-- 公共查询sql片段 -->
+	<sql id="select_sql">
+		select * 
+		from relation_business_car 
+	</sql>
+
+	<!-- 查集合 - 根据条件(参数为空时代表忽略指定条件) [G] -->
+	<select id="getList" resultMap="model">
+		<include refid="select_sql"></include>
+		<where>
+			<if test=' this.has("id") '> and id = #{id} </if>
+			<if test=' this.has("businessId") '> and business_id = #{businessId} </if>
+			<if test=' this.has("businessCarId") '> and business_car_id = #{businessCarId} </if>
+		</where>
+		order by
+		<choose>
+			<when test='sortType == 1'> id desc </when>
+			<when test='sortType == 2'> business_id desc </when>
+			<when test='sortType == 3'> business_car_id desc </when>
+			<otherwise> id desc </otherwise>
+		</choose>
+	</select>
+	
+	
+	
+	
+	
+	
+	
+	
+	
+
+</mapper>

+ 52 - 0
sp-server/src/main/java/com/pj/project/relation_business_car/RelationBusinessCarService.java

@@ -0,0 +1,52 @@
+package com.pj.project.relation_business_car;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.pj.project.tb_business.TbBusiness;
+import com.pj.project.tb_business.TbBusinessMapper;
+import com.pj.utils.so.SoMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.pj.utils.sg.*;
+
+/**
+ * Service: relation_business_car -- 
+ * @author qzy 
+ */
+@Service
+public class RelationBusinessCarService extends ServiceImpl<RelationBusinessCarMapper, RelationBusinessCar> implements IService<RelationBusinessCar> {
+
+	/** 底层 Mapper 对象 */
+	@Autowired
+	RelationBusinessCarMapper relationBusinessCarMapper;
+
+	/** 增 */
+	void add(RelationBusinessCar r){
+	this.save(r);
+	}
+
+	/** 删 */
+	void delete(Long id){
+		this.removeById(id);
+	}
+
+	/** 改 */
+	void update(RelationBusinessCar r){
+		updateById(r);
+	}
+
+	/** 查 */
+	RelationBusinessCar getById(Long id){
+		return super.getById(id);
+	}
+
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */  
+	List<RelationBusinessCar> getList(SoMap so) {
+		return relationBusinessCarMapper.getList(so);	
+	}
+	
+
+}

+ 49 - 0
sp-server/src/main/java/com/pj/project/relation_business_car/RelationBusinessCarUtil.java

@@ -0,0 +1,49 @@
+package com.pj.project.relation_business_car;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import com.pj.utils.sg.*;
+
+/**
+ * 工具类:relation_business_car -- 
+ * @author qzy 
+ *
+ */
+@Component
+public class RelationBusinessCarUtil {
+
+	
+	/** 底层 Mapper 对象 */
+	public static RelationBusinessCarMapper relationBusinessCarMapper;
+	@Autowired
+	private void setRelationBusinessCarMapper(RelationBusinessCarMapper relationBusinessCarMapper) {
+		RelationBusinessCarUtil.relationBusinessCarMapper = relationBusinessCarMapper;
+	}
+	
+	
+	/** 
+	 * 将一个 RelationBusinessCar 对象进行进行数据完整性校验 (方便add/update等接口数据校验) [G] 
+	 */
+	static void check(RelationBusinessCar r) {
+		AjaxError.throwByIsNull(r.getId(), "[] 不能为空");		// 验证:  
+		AjaxError.throwByIsNull(r.getBusinessId(), "[] 不能为空");		// 验证:  
+		AjaxError.throwByIsNull(r.getBusinessCarId(), "[] 不能为空");		// 验证:  
+	}
+
+	/** 
+	 * 获取一个RelationBusinessCar (方便复制代码用) [G] 
+	 */ 
+	static RelationBusinessCar getRelationBusinessCar() {
+		RelationBusinessCar r = new RelationBusinessCar();	// 声明对象 
+		r.setId(0L);		//  
+		r.setBusinessId("");		//  
+		r.setBusinessCarId("");		//  
+		return r;
+	}
+	
+	
+	
+	
+	
+}

+ 5 - 1
sp-server/src/main/java/com/pj/project/tb_business/TbBusiness.java

@@ -224,6 +224,10 @@ public class TbBusiness extends Model<TbBusiness> implements Serializable {
      */
     private Integer businessType=2;
     private String itemTypeId;
+    private String operator;
+    private String operateTime;
+
+    private String businessCarId;
 
     private transient String itemJson;
     private transient String peopleJson;
@@ -237,7 +241,7 @@ public class TbBusiness extends Model<TbBusiness> implements Serializable {
     @Getter
     @AllArgsConstructor
     public static enum BusinessType{
-        CAR_DISINCLE(1,"车辆消杀"),
+        CAR_DISINCLE(1,"其他业务"),
         HOLD_CAR(2,"整车业务"),
         ;
         private Integer code;

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

@@ -311,6 +311,12 @@ public class TbBusinessController {
         return AjaxJson.getSuccessData(tbBusinessService.getOtherBusinessById(id));
     }
 
+    @RequestMapping("deleteOtherBusiness")
+    public AjaxJson deleteOtherBusiness(String id) {
+        tbBusinessService.deleteOtherBusiness(id);
+        return AjaxJson.getSuccess();
+    }
+
 
 
 

+ 1 - 1
sp-server/src/main/java/com/pj/project/tb_business/TbBusinessMapper.xml

@@ -76,7 +76,7 @@
             b.base_part_money,a.total_money,a.pay_money,a.create_time,
             b.real_in_time,b.real_out_time,b.car_no ,a.net_weight,a.card_size,a.pay_status
         from tb_business a,tb_business_car b
-        WHERE a.id=b.business_id and (a.declare_no='' or a.declare_no is null)
+        WHERE a.business_car_id=b.id and (a.declare_no='' or a.declare_no is null)
             <if test="cardNo !='' and cardNo !=null">
                 and b.car_no like concat('%',#{cardNo},'%')
             </if>

+ 53 - 32
sp-server/src/main/java/com/pj/project/tb_business/TbBusinessService.java

@@ -221,7 +221,7 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
                 tbBusinessCar.setId(car.getId()).setRealInTime(car.getRealInTime());
             }
             TbCar tbCar = tbCarService.findByCardNo(carNo);
-            tbBusinessCar.setBusinessId(t.getId());
+            tbBusinessCar.setBusinessId(t.getId()).setBusinessType(TbBusiness.BusinessType.HOLD_CAR.getCode());
             tbBusinessCar.setCarNo(carNo).setCarCompany(tbCar != null ? tbCar.getCustomerName() : "临时");
             tbBusinessCar.setBusinessId(t.getId()).setCustomerId(t.getCustomerId());
             if (StrUtil.isEmpty(tbBusinessCar.getNo())) {
@@ -241,6 +241,7 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
         if (StrUtil.isEmpty(yueCar.getNo())) {
             yueCar.setNo(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm")) + RandomUtil.randomNumbers(4));
         }
+        yueCar.setBusinessType(TbBusiness.BusinessType.HOLD_CAR.getCode());
         carList.add(yueCar);
         tbBusinessCarService.saveOrUpdateBatch(carList);
 //        BigDecimal initCarPartMoney = partConfig.getBasePrice();
@@ -496,12 +497,29 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
         Map<String, Object> result = new HashMap<>();
         TbBusinessCar car = tbBusinessCarService.getById(carId);
         String businessId = car.getBusinessId();
-        result.put("businessId", businessId);
-        result.put("type", 0);
-        List<TbBusinessCar> cars = tbBusinessCarService.findByBusinessId(businessId);
-        if (cars.isEmpty()) {
-            cars.add(car);
+        result.put("type", car.getBusinessType());
+        List<TbBusinessCar> cars = new ArrayList<>();
+        List<TbBusinessItem> items = new ArrayList<>();
+        cars.add(car);
+        //其他业务
+        if (TbBusiness.BusinessType.CAR_DISINCLE.getCode().equals(car.getBusinessType())) {
+            List<TbBusiness> businesses = this.findOtherBusinessByCarId(carId);
+            businesses=businesses.stream()
+                    .filter(tbBusiness -> tbBusiness.getAdminConfirmInput()==1&&tbBusiness.getPayMoney().doubleValue()<tbBusiness.getTotalMoney().doubleValue())
+                    .collect(Collectors.toList());
+            List<String> businessIdList = businesses.stream().map(TbBusiness::getId).collect(Collectors.toList());
+            if (!businessIdList.isEmpty()){
+                items = tbBusinessItemService.findByBusinessIdList(businessIdList);
+                businessId = String.join(",", businessIdList);
+            }
+        } else if (TbBusiness.BusinessType.HOLD_CAR.getCode().equals(car.getBusinessType())) {
+            cars = tbBusinessCarService.findByBusinessId(businessId);
+            TbBusiness tbBusiness = this.getById(businessId);
+            if (tbBusiness.getPayStatus() != TbBusiness.PayStatus.HAS_PAY_CONFIRM.getCode()) {
+                items = tbBusinessItemService.findByBusinessId(businessId);
+            }
         }
+        result.put("businessId", businessId);
         Date now = new Date();
         List<Map<String, Object>> carsList = new ArrayList<>();
         for (TbBusinessCar tbBusinessCar : cars) {
@@ -541,33 +559,30 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
             }
             carsList.add(carMap);
         }
-        if (StrUtil.isNotEmpty(businessId)) {
-            TbBusiness tbBusiness = this.getById(businessId);
-            if (tbBusiness != null) {
-                result.put("type", tbBusiness.getBusinessType());
-            }
-        }
         result.put("carList", carsList);
-        result.put("itemList", Collections.emptyList());
-        TbBusiness tbBusiness = this.getById(businessId);
-        if (tbBusiness != null && tbBusiness.getPayStatus() != TbBusiness.PayStatus.HAS_PAY_CONFIRM.getCode()) {
-            List<TbBusinessItem> items = tbBusinessItemService.findByBusinessId(businessId);
-            result.put("itemsPrice", tbBusiness.getItemPrice());
-            result.put("businessId", businessId);
-            List<Map<String, Object>> itemList = new ArrayList<>();
-            for (TbBusinessItem item : items) {
-                Map<String, Object> itemMap = new HashMap<>();
-                itemMap.put("id", item.getId());
-                itemMap.put("name", item.getItemName() + "(" + item.getItemTypeName() + ")");
-                itemMap.put("price", item.getItemPrice().multiply(new BigDecimal(item.getNum())));
-                itemMap.put("pay", item.getPayStatus());
-                itemList.add(itemMap);
-            }
-            result.put("itemList", itemList);
+        BigDecimal itemsPrice = new BigDecimal("0");
+        List<Map<String, Object>> itemList = new ArrayList<>();
+        for (TbBusinessItem item : items) {
+            BigDecimal itemPrice = item.getItemPrice().multiply(new BigDecimal(item.getNum()));
+            itemsPrice = itemsPrice.add(itemPrice);
+            Map<String, Object> itemMap = new HashMap<>();
+            itemMap.put("id", item.getId());
+            itemMap.put("name", item.getItemName() + "(" + item.getItemTypeName() + ")");
+            itemMap.put("price", itemPrice);
+            itemMap.put("pay", item.getPayStatus());
+            itemList.add(itemMap);
         }
+        result.put("itemsPrice", itemsPrice);
+        result.put("itemList", itemList);
         return result;
     }
 
+    public List<TbBusiness> findOtherBusinessByCarId(String businessCarId) {
+        QueryWrapper<TbBusiness> ew = new QueryWrapper<>();
+        ew.eq("business_car_id", businessCarId);
+        return list(ew);
+    }
+
     public void uploadReport(TbBusiness tbBusiness) {
         this.updateById(tbBusiness);
         List<TbBusinessCar> cars = tbBusinessCarService.findByBusinessId(tbBusiness.getId());
@@ -588,15 +603,21 @@ public class TbBusinessService extends ServiceImpl<TbBusinessMapper, TbBusiness>
     public OtherBusinessEditBO getOtherBusinessById(String id) {
         TbBusiness tbBusiness = this.getById(id);
         List<TbBusinessItem> tbBusinessItems = tbBusinessItemService.findByBusinessId(id);
-        List<TbBusinessCar> cars = tbBusinessCarService.findByBusinessId(id);
+        TbBusinessCar car = tbBusinessCarService.getById(tbBusiness.getBusinessCarId());
         OtherBusinessEditBO otherBusinessBO = new OtherBusinessEditBO();
-        otherBusinessBO.setId(tbBusiness.getId());
+        otherBusinessBO.setId(tbBusiness.getId()).setOperator(tbBusiness.getOperator()).setOperateTime(tbBusiness.getOperateTime());
         otherBusinessBO.setCustomerId(tbBusiness.getCustomerId());
-        otherBusinessBO.setCarNo(cars.get(0)
-                .getCarNo()).setCarWeight(tbBusiness.getNetWeight())
+        otherBusinessBO.setCarNo(car.getCarNo()).setCarWeight(tbBusiness.getNetWeight())
                 .setCarSize(tbBusiness.getCardSize()).setCarType(tbBusiness.getGoodsName())
                 .setItemTypeId(tbBusiness.getItemTypeId());
         otherBusinessBO.setItems(tbBusinessItems);
         return otherBusinessBO;
     }
+
+    public void deleteOtherBusiness(String id) {
+        TbBusiness db = super.getById(id);
+        this.removeById(id);
+        tbBusinessItemService.removeByBusinessId(id);
+        tbBusinessCarService.removeById(db.getBusinessCarId());
+    }
 }

+ 2 - 0
sp-server/src/main/java/com/pj/project/tb_business_car/TbBusinessCar.java

@@ -122,6 +122,8 @@ public class TbBusinessCar extends Model<TbBusinessCar> implements Serializable
 
     private Date timeUpdate;
 
+    private Integer businessType=0;
+
 
     @TableField(exist = false)
     private String payType;

+ 2 - 0
sp-server/src/main/java/com/pj/project/tb_business_car/TbBusinessCarMapper.java

@@ -30,4 +30,6 @@ public interface TbBusinessCarMapper extends BaseMapper <TbBusinessCar> {
     List<TbBusinessCar> searchPartCar(String carNo);
 
 	List<TbBusinessCar> findTheNoBusinessCar(String carNo);
+
+	List<TbBusinessCar> searchOtherBusinessCar(String carNo);
 }

+ 14 - 0
sp-server/src/main/java/com/pj/project/tb_business_car/TbBusinessCarMapper.xml

@@ -98,6 +98,20 @@
              and real_in_time is not null
              and real_out_time is null
     </select>
+    <select id="searchOtherBusinessCar" resultType="com.pj.project.tb_business_car.TbBusinessCar">
+        SELECT
+        distinct 
+	        a.*
+        FROM
+            tb_business_car a,
+            tb_business b
+        where
+            a.id = b.business_car_id
+            AND (b.total_money> b.pay_money or a.pay=0 or a.real_out_time is null)
+            AND a.car_no LIKE CONCAT( '%', #{carNo}, '%' )
+
+
+    </select>
 
 
 </mapper>

+ 8 - 0
sp-server/src/main/java/com/pj/project/tb_business_car/TbBusinessCarService.java

@@ -379,4 +379,12 @@ public class TbBusinessCarService extends ServiceImpl<TbBusinessCarMapper, TbBus
         List<TbBusinessCar> list = this.list(qw);
         return list;
     }
+
+    public TbBusinessCar findInCar(String carNo) {
+        return null;
+    }
+
+    public List<TbBusinessCar> searchOtherBusinessCar(String carNo) {
+       return tbBusinessCarMapper.searchOtherBusinessCar(carNo);
+    }
 }

+ 31 - 20
sp-server/src/main/java/com/pj/project/tb_business_item/TbBusinessItemService.java

@@ -67,22 +67,27 @@ public class TbBusinessItemService extends ServiceImpl<TbBusinessItemMapper, TbB
     @Resource
     TbFeeDetailsService tbFeeDetailsService;
 
-	/** 增 */
-	int add(TbBusinessItem t){
-		return tbBusinessItemMapper.add(t);
-	}
-
+    /**
+     * 增
+     */
+    int add(TbBusinessItem t) {
+        return tbBusinessItemMapper.add(t);
+    }
 
 
-	/** 改 */
-	int update(TbBusinessItem t){
-		return tbBusinessItemMapper.update(t);
-	}
+    /**
+     * 改
+     */
+    int update(TbBusinessItem t) {
+        return tbBusinessItemMapper.update(t);
+    }
 
-	/** 查 */
-	TbBusinessItem getById(String id){
-		return tbBusinessItemMapper.getById(id);
-	}
+    /**
+     * 查
+     */
+    TbBusinessItem getById(String id) {
+        return tbBusinessItemMapper.getById(id);
+    }
 
     /**
      * 查集合 - 根据条件(参数为空时代表忽略指定条件)
@@ -119,7 +124,7 @@ public class TbBusinessItemService extends ServiceImpl<TbBusinessItemMapper, TbB
         this.updateById(tbBusinessItem);
 
         TbFeeDetails feeDetails = tbFeeDetailsService.getByBusinessItemId(id + "");
-        if(feeDetails != null){
+        if (feeDetails != null) {
             feeDetails.setPickCustomerName(tbBusinessItem.getPickCustomerName());
             tbFeeDetailsService.updateById(feeDetails);
         }
@@ -127,7 +132,7 @@ public class TbBusinessItemService extends ServiceImpl<TbBusinessItemMapper, TbB
         //todo 通知作业方
         List<SpAdmin> spAdminList = spAdminService.findByCustomerId(tbBusinessItem.getPickCustomerId());
         TbBusiness tbBusiness = tbBusinessService.getById(tbBusinessItem.getBusinessId());
-        taskService.addTask(new PayTask(tbBusiness.getId(), 10,tbBusiness.getCustomerId()));
+        taskService.addTask(new PayTask(tbBusiness.getId(), 10, tbBusiness.getCustomerId()));
         MsgDataBO msgDataBO = new MsgDataBO("订单号:" + tbBusinessItem.getNo(), "系统管理人员", DateUtil.now(), tbBusiness.getGoodsName() + "(" + tbBusinessItem.getItemTypeName() + tbBusinessItem.getItemName() + ")");
         spAdminList.stream().filter(admin -> StrUtil.isNotEmpty(admin.getOpenid())).forEach(admin -> {
             String detailUrl = myConfig.getWebDomain() + "/pages/business-item/item-detail?itemId=" + id + "&openid=" + admin.getOpenid();
@@ -142,11 +147,11 @@ public class TbBusinessItemService extends ServiceImpl<TbBusinessItemMapper, TbB
         List<ExportItemsDTO> itemDTOList = new ArrayList<>();
         for (TbBusinessItem item : itemList) {
             ExportItemsDTO itemsDTO = new ExportItemsDTO();
-            BeanUtil.copyProperties(item, itemsDTO,"createTime", "pickTime", "confirmTime");
+            BeanUtil.copyProperties(item, itemsDTO, "createTime", "pickTime", "confirmTime");
             itemsDTO.setUnit(item.getItemPrice() + item.getUnit())
-                .setCreateTime(DateUtil.format(item.getCreateTime(), "yyyy/MM/dd HH:mm:ss"))
-                .setPickTime(DateUtil.format(item.getPickTime(), "yyyy/MM/dd HH:mm:ss"))
-                .setConfirmTime(DateUtil.format(item.getConfirmTime(), "yyyy/MM/dd HH:mm:ss"));
+                    .setCreateTime(DateUtil.format(item.getCreateTime(), "yyyy/MM/dd HH:mm:ss"))
+                    .setPickTime(DateUtil.format(item.getPickTime(), "yyyy/MM/dd HH:mm:ss"))
+                    .setConfirmTime(DateUtil.format(item.getConfirmTime(), "yyyy/MM/dd HH:mm:ss"));
             itemDTOList.add(itemsDTO);
         }
         String separator = File.separator;
@@ -160,7 +165,13 @@ public class TbBusinessItemService extends ServiceImpl<TbBusinessItemMapper, TbB
         if (!saveFIle.exists()) {
             saveFIle.mkdirs();
         }
-        EasyExcel.write(savePath+fileName, ExportItemsDTO.class).sheet("作业订单").doWrite(itemDTOList);
+        EasyExcel.write(savePath + fileName, ExportItemsDTO.class).sheet("作业订单").doWrite(itemDTOList);
         return prefix + "/businessItem/" + today + "/items_" + beginTime + "--" + endTime + ".xlsx";
     }
+
+    public List<TbBusinessItem> findByBusinessIdList(List<String> businessIdList) {
+        QueryWrapper<TbBusinessItem> ew = new QueryWrapper<>();
+        ew.in("business_id", businessIdList);
+        return list(ew);
+    }
 }

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

@@ -2,12 +2,18 @@ package com.pj.project.tb_item;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.AllArgsConstructor;
 import lombok.EqualsAndHashCode;
 
 import lombok.Data;
+import lombok.Getter;
 import lombok.experimental.Accessors;
 
 /**
@@ -74,6 +80,7 @@ public class TbItem extends Model<TbItem> implements Serializable {
      */
     private Integer payType;
     private String payTypeName;
+    private String itemType;
     private Double taxRate;
     @TableField(exist = false)
     private String remark;
@@ -96,5 +103,27 @@ public class TbItem extends Model<TbItem> implements Serializable {
     @TableField(exist = false)
     private int inc;
 
+    @Getter
+    @AllArgsConstructor
+    public static enum ItemTypeEnum{
+        WEIGHT_TYPE("载重","载重"),
+
+        EMPTY_TYPE("空车","空车");
+
+        private String type;
+        private String desc;
+
+        public static List<Map<String, String>> getList() {
+            List<Map<String, String>> list = new ArrayList<>();
+            for (ItemTypeEnum tbItem : ItemTypeEnum.values()) {
+                Map<String, String> map = new HashMap<>();
+                map.put("id", tbItem.getType());
+                map.put("name", tbItem.getDesc());
+                list.add(map);
+            }
+            return list;
+        }
+
+    }
 
 }

+ 8 - 16
sp-server/src/main/java/com/pj/project/tb_item/TbItemController.java

@@ -3,6 +3,7 @@ package com.pj.project.tb_item;
 import java.util.List;
 
 import com.pj.utils.so.SoMap;
+import org.aspectj.weaver.loadtime.Aj;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
@@ -93,25 +94,16 @@ public class TbItemController {
         return AjaxJson.getByLine(line);
     }
 
-	
+
+
+    @RequestMapping(value = "getItemType")
+    public AjaxJson getItemType(){
+    	return AjaxJson.getSuccessData(TbItem.ItemTypeEnum.getList());
+	}
 	
 	// ------------------------- 前端接口 -------------------------
 	
-	
-	/** 改 - 不传不改 [G] */
-	@RequestMapping("updateByNotNull")
-	public AjaxJson updateByNotNull(Long id){
-		AjaxError.throwBy(true, "如需正常调用此接口,请删除此行代码");
-		// 鉴别身份,是否为数据创建者 
-		long userId = SP.publicMapper.getColumnByIdToLong(TbItem.TABLE_NAME, "user_id", id);
-		AjaxError.throwBy(userId != StpUserUtil.getLoginIdAsLong(), "此数据您无权限修改");
-		// 开始修改 (请只保留需要修改的字段)
-		SoMap so = SoMap.getRequestSoMap();
-		so.clearNotIn("id", "itemCode", "itemName", "price", "need", "createTime").clearNull().humpToLineCase();	
-		int line = SP.publicMapper.updateBySoMapById(TbItem.TABLE_NAME, so, id);
-		return AjaxJson.getByLine(line);
-	}
-	
+
 	
 	
 	

+ 1 - 1
sp-server/src/main/java/com/pj/project/tb_item/TbItemMapper.xml

@@ -59,7 +59,7 @@
             a.min_length,
             a.min_weight,
             a.max_weight,
-            b.need,b.type_id,b.need_remark,b.must_remark,
+            b.need,b.type_id,b.need_remark,b.must_remark,a.item_type,
             a.unit,b.inc,a.business_type,a.business_type_name,a.pay_type,a.pay_type_name,a.tax_rate,a.type_name,a.type_id
         FROM
             tb_item a,

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

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

+ 1 - 1
sp-server/src/main/java/com/pj/project4sp/apilog/Task.java

@@ -16,6 +16,6 @@ public class Task {
     public void cleanLog(){
         log.info("start clean api log");
         LocalDate today=LocalDate.now();
-        spApilogMapper.cleanHistoryLog(today.minusDays(-2).toString());
+        //spApilogMapper.cleanHistoryLog(today.minusDays(-2).toString());
     }
 }