Browse Source

Merge remote-tracking branch 'origin/master'

zhanglei
God 1 year ago
parent
commit
bd17308d24
  1. 4
      anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/reportset/ReportSetService.java
  2. 4
      anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepService.java
  3. 1622
      doc/databases/统计报表update.sql
  4. 1045
      doc/databases/统计报表更新.sql
  5. 9
      yxt-as-ui/src/api/operation/repairbill.js
  6. 112
      yxt-as-ui/src/api/operation/workslrsettlement.js
  7. 35
      yxt-as-ui/src/router/index.js
  8. 12
      yxt-as-ui/src/views/operation/repairbill/repairbillAdd.vue
  9. 52
      yxt-as-ui/src/views/operation/repairbill/repairbillBYLeaveFactory.vue
  10. 52
      yxt-as-ui/src/views/operation/repairbill/repairbillByBeCompleted.vue
  11. 52
      yxt-as-ui/src/views/operation/repairbill/repairbillByMaintain.vue
  12. 52
      yxt-as-ui/src/views/operation/repairbill/repairbillBySendWork.vue
  13. 52
      yxt-as-ui/src/views/operation/repairbill/repairbillBySettleAccounts.vue
  14. 13
      yxt-as-ui/src/views/operation/repairbill/repairbillInfo.vue
  15. 340
      yxt-as-ui/src/views/operation/workslrsettlement/workslrsettlement.vue
  16. 359
      yxt-as-ui/src/views/operation/workslrsettlement/workslrsettlementAdd.vue
  17. 312
      yxt-as-ui/src/views/operation/workslrsettlement/workslrsettlementInfo.vue
  18. 556
      yxt-as-ui/src/views/workFlow/fanjiesuanFlow/workslrsettlementDaiBan.vue
  19. 335
      yxt-as-ui/src/views/workFlow/fanjiesuanFlow/workslrsettlementEdit.vue
  20. 348
      yxt-as-ui/src/views/workFlow/fanjiesuanFlow/workslrsettlementYiBan.vue
  21. 69
      yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairbill/AsBusrepairBillService.java
  22. 101
      yxt-as/src/main/java/com/yxt/anrui/as/feign/fin/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedDto.java
  23. 64
      yxt-as/src/main/java/com/yxt/anrui/as/feign/fin/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedFeign.java
  24. 60
      yxt-as/src/main/java/com/yxt/anrui/as/feign/fin/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedFeignFallback.java
  25. 30
      yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/BaseGoodsSpuRest.java
  26. 4
      yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodssku/BaseGoodsSkuService.java
  27. 5
      yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsskuextend/BaseGoodsSkuExtendService.java
  28. 47
      yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsDetailsDto.java
  29. 46
      yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsDetailsVo.java
  30. 4
      yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpu.java
  31. 24
      yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuListQuery.java
  32. 39
      yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuListVo.java
  33. 4
      yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.java
  34. 62
      yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.xml
  35. 364
      yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuService.java
  36. 1
      yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsreceiptbill/WmsReceiptBillDto2.java
  37. 10
      yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsreceiptbill/WmsReceiptBillService.java
  38. 3
      yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsreceiptbilldetail/WmsReceiptBillDetailVo.java

4
anrui-reportcenter/anrui-reportcenter-biz/src/main/java/com/yxt/anrui/reportcenter/biz/reportset/ReportSetService.java

@ -119,7 +119,7 @@ public class ReportSetService extends MybatisBaseService<ReportSetMapper, Report
list.add(reportSetVo);
reportSetVo = new ReportSetVo();
reportSetVo.setDictKey("loanDis");
reportSetVo.setDictValue("金融未放款(已出库)");
reportSetVo.setDictValue("金融未放款(已开票)");
reportSetVo.setSelected(reportSet.getLoanDis() == 1);
list.add(reportSetVo);
reportSetVo = new ReportSetVo();
@ -165,7 +165,7 @@ public class ReportSetService extends MybatisBaseService<ReportSetMapper, Report
list.add(reportSetVo);
reportSetVo = new ReportSetVo();
reportSetVo.setDictKey("loanDis");
reportSetVo.setDictValue("金融未放款(已出库)");
reportSetVo.setDictValue("金融未放款(已开票)");
reportSetVo.setSelected(false);
list.add(reportSetVo);
reportSetVo = new ReportSetVo();

4
anrui-riskcenter/anrui-riskcenter-biz/src/main/java/com/yxt/anrui/riskcenter/biz/loanhomevisitprep/LoanHomevisitPrepService.java

@ -1012,7 +1012,7 @@ public class LoanHomevisitPrepService extends MybatisBaseService<LoanHomevisitPr
//受委托人
map.put("swtr", finCompanyInvoicingDetailsVo.getName());
//年
map.put("year", DateUtil.year(new Date()));
map.put("year", String.valueOf(DateUtil.year(new Date())));
//月
map.put("month", DateUtil.month(new Date()) + 1);
//日
@ -1731,4 +1731,4 @@ public class LoanHomevisitPrepService extends MybatisBaseService<LoanHomevisitPr
baseMapper.insert(loanHomevisitPrep);
return rb.success();
}
}
}

1622
doc/databases/统计报表update.sql

File diff suppressed because it is too large

1045
doc/databases/统计报表更新.sql

File diff suppressed because it is too large

9
yxt-as-ui/src/api/operation/repairbill.js

@ -48,5 +48,14 @@ export default {
data: data,
headers: { 'Content-Type': 'application/json' }
})
},
// 确认材料费
settle: function(data) {
return request({
url: '/as/v1/AsBusrepairBill/settle',
method: 'post',
data: data,
headers: { 'Content-Type': 'application/json' }
})
}
}

112
yxt-as-ui/src/api/operation/workslrsettlement.js

@ -0,0 +1,112 @@
import request from '@/utils/request'
export default {
// 查询分页列表
listPage: function(params) {
return request({
url: '/as/v1/asbusrepairbillreversesettle/listPage',
method: 'post',
data: params,
headers: { 'Content-Type': 'application/json' }
})
},
saveOrUpdate: function(data) {
return request({
url: '/as/v1/asbusrepairbillreversesettle/saveReverseSettle',
method: 'post',
data: data,
headers: { 'Content-Type': 'application/json' }
})
},
reverseSettleInit: function(data) {
return request({
url: '/as/v1/asbusrepairbillreversesettle/reverseSettleInit',
method: 'post',
data: data,
headers: { 'Content-Type': 'application/json' }
})
},
fetchBySid: function(data) {
return request({
url: '/as/v1/asbusrepairbillreversesettle/fetchDetailsBySid/' + data,
method: 'get'
})
},
deleteBySids: function(data) {
return request({
url: '/as/v1/asbusrepairbillreversesettle/delBySids',
method: 'DELETE',
data: data,
headers: { 'Content-Type': 'application/json' }
})
},
submit: function(data) {
return request({
url: '/as/v1/asbusrepairbillreversesettle/submit',
method: 'post',
data: data,
headers: { 'Content-Type': 'application/json' }
})
},
// 流程审批(同意)
complete: function(params) {
return request({
url: '/pms/v1/asbusrepairbillreversesettle/complete',
method: 'post',
data: params,
headers: { 'Content-Type': 'application/json' }
})
},
// 流程审批(加签)
delegate: function(params) {
return request({
url: '/pms/v1/asbusrepairbillreversesettle/delegate',
method: 'post',
data: params,
headers: { 'Content-Type': 'application/json' }
})
},
// 流程审批(驳回)
reject: function(params) {
return request({
url: '/pms/v1/asbusrepairbillreversesettle/reject',
method: 'post',
data: params,
headers: { 'Content-Type': 'application/json' }
})
},
// 流程审批(终止)
breakProcess: function(params) {
return request({
url: '/pms/v1/asbusrepairbillreversesettle/breakProcess',
method: 'post',
data: params,
headers: { 'Content-Type': 'application/json' }
})
},
// 流程审批(撤回)
revokeProcess: function(params) {
return request({
url: '/pms/v1/asbusrepairbillreversesettle/revokeProcess',
method: 'post',
data: params,
headers: { 'Content-Type': 'application/json' }
})
},
// 审批流程(同意)获取下一环节
getNextNodesForSubmit: function(data) {
return request({
url: '/pms/v1/asbusrepairbillreversesettle/getNextNodesForSubmit',
method: 'get',
params: data
})
},
// 审批流程(驳回)获取上一环节
getPreviousNodesForReject: function(data) {
return request({
url: '/pms/v1/asbusrepairbillreversesettle/getPreviousNodesForReject',
method: 'get',
params: data
})
}
}

35
yxt-as-ui/src/router/index.js

@ -91,13 +91,13 @@ export const constantRoutes = [{
component: () => import('@/views/operation/repairbill/repairbillBYLeaveFactory.vue'),
name: 'RepairBillBYLeaveFactory',
meta: { title: '维修单管理(出厂)', noCache: true }
}
// {
// path: '/workslrsettlement/workslrsettlement',
// component: () => import('@/views/operation/workslrsettlement/workslrsettlement.vue'),
// name: 'WorkSLRSettlement',
// meta: { title: '工单反结算管理', noCache: true }
// },
},
{
path: '/workslrsettlement/workslrsettlement',
component: () => import('@/views/operation/workslrsettlement/workslrsettlement.vue'),
name: 'WorkSLRSettlement',
meta: { title: '工单反结算管理', noCache: true }
},
]
},
{
@ -463,6 +463,27 @@ export const constantRoutes = [{
import('@/views/workFlow/caigoutuihuoFlow/purchasereturnYiBan.vue'),
name: 'PurchaseReturnYiBan'
},
// 工单反结算管理--编辑
{
path: '/fanjiesuanFlow/workslrsettlementEdit',
component: () =>
import('@/views/workFlow/fanjiesuanFlow/workslrsettlementEdit.vue'),
name: 'WorkSLRSettlementEdit'
},
// 工单反结算管理--待办
{
path: '/fanjiesuanFlow/workslrsettlementDaiBan',
component: () =>
import('@/views/workFlow/fanjiesuanFlow/workslrsettlementDaiBan.vue'),
name: 'WorkSLRSettlementDaiBan'
},
// 工单反结算管理--已办
{
path: '/fanjiesuanFlow/workslrsettlementYiBan',
component: () =>
import('@/views/workFlow/fanjiesuanFlow/workslrsettlementYiBan.vue'),
name: 'WorkSLRSettlementYiBan'
},
// 404 page must be placed at the end !!!
// { path: '*', redirect: '/404', hidden: true }
]

12
yxt-as-ui/src/views/operation/repairbill/repairbillAdd.vue

@ -6,9 +6,9 @@
<div>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="selectCustomer()" v-show="formobj.nodeName == '登记' ||formobj.nodeName == ''">选择客户</el-button>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="saveOrUpdate()">保存</el-button>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="submit()">提交</el-button>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="submit()" v-show="formobj.nodeName !== '结算'">提交</el-button>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="settleAccounts()" v-show="formobj.nodeName == '结算'">结算</el-button>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="confirmCLF()" v-show="formobj.nodeName == '结算' && formobj.subject == '保'">确认材料费</el-button>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="confirmCLF()" v-show="formobj.nodeName == '结算' && formobj.subject == '保'">确认材料费</el-button>
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
</div>
</div>
@ -442,7 +442,7 @@
</el-col>
<el-col :span="8">
<div class="span-sty">付款人编号</div>
<el-form-item><el-input class="addinputInfo addinputw" v-model="formobj.settleVo.payerName" clearable placeholder="" /></el-form-item>
<el-form-item><el-input class="addinputInfo addinputw" v-model="formobj.settleVo.payerNo" clearable placeholder="" /></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">应收金额</div>
@ -470,7 +470,7 @@
<el-row>
<el-col :span="8">
<div class="span-sty">其他结算方式</div>
<el-form-item><el-input class="addinputInfo addinputw" v-model="formobj.settleVo.otherSettleValue" clearable placeholder="" />
<el-form-item>
<el-select class="addinputInfo" v-model="formobj.settleVo.otherSettleValue" placeholder="请选择" @change="otherSettleChange" clearable filterable>
<el-option v-for="item in otherSettle_list" :key="item.dictKey" :label="item.dictValue" :value="item.dictValue"></el-option>
</el-select>
@ -1072,7 +1072,6 @@ export default {
},
settleAccounts() {
this.settleVisible = true
// this.formobj.payableAmount = this.yfjeTotal
},
settleChange(value) {
const choose = this.settle_list.filter((item) => item.dictValue === value)
@ -1094,7 +1093,7 @@ export default {
this.$refs['form_obj'].validate((valid) => {
if (valid) {
this.submitdisabled = true
req.settlement(this.formobj).then((res) => {
req.settle(this.formobj).then((res) => {
if (res.success) {
this.$message({ showClose: true, type: 'success', message: '结算成功' })
this.handleReturn('true')
@ -1221,6 +1220,7 @@ export default {
},
showReSettleBtn: true
}
this.settleVisible = false
this.submitdisabled = false
this.$emit('doback')
}

52
yxt-as-ui/src/views/operation/repairbill/repairbillBYLeaveFactory.vue

@ -146,6 +146,7 @@ import ButtonBar from '@/components/ButtonBar'
import req from '@/api/operation/repairbill'
import repairbillAdd from './repairbillAdd'
import repairbillInfo from './repairbillInfo'
import { typeValues } from '@/api/Common/dictcommons'
export default {
name: 'RepairBYLeaveFactory',
@ -160,13 +161,6 @@ export default {
return {
btndisabled: false,
btnList: [
{
type: 'primary',
size: 'small',
icon: 'plus',
btnKey: 'toAdd',
btnLabel: '新增'
},
{
type: 'primary',
size: 'small',
@ -195,20 +189,7 @@ export default {
tableKey: 0,
list: [],
sids: [], // SIDs
billType_list: [
{
dictKey: '0',
dictValue: '正常工单'
},
{
dictKey: '1',
dictValue: '保险理赔'
},
{
dictKey: '2',
dictValue: '协议单位'
}
],
billType_list: [],
state_list: [
{
dictKey: '1',
@ -216,7 +197,7 @@ export default {
},
{
dictKey: '0',
dictValue: ''
dictValue: ''
}
],
FormLoading: false,
@ -224,7 +205,7 @@ export default {
//
listQuery: {
current: 1,
size: 10,
size: 5,
total: 0,
params: {
startTime: '',
@ -258,12 +239,20 @@ export default {
},
created() {
//
this.init()
this.getList()
},
mounted() {
this.$refs['btnbar'].setButtonList(this.btnList)
},
methods: {
init() {
typeValues({ type: 'billType' }).then((res) => {
if (res.success) {
this.billType_list = res.data
}
})
},
//
clicksearchShow() {
this.isSearchShow = !this.isSearchShow
@ -276,9 +265,6 @@ export default {
btnHandle(btnKey) {
console.log('XXXXXXXXXXXXXXX ' + btnKey)
switch (btnKey) {
case 'toAdd':
this.toAdd()
break
case 'toEdit':
this.toEdit()
break
@ -333,7 +319,7 @@ export default {
handleReset() {
this.listQuery = {
current: 1,
size: 10,
size: 5,
total: 0,
params: {
startTime: '',
@ -365,13 +351,13 @@ export default {
}
this.getList()
},
toAdd() {
this.viewState = 2
this.$refs['divAdd'].showAdd()
},
toEdit() {
this.viewState = 3
this.$refs['divAdd'].showEdit()
if (this.sids.length === 1) {
this.viewState = 3
this.$refs['divAdd'].showEdit(this.sids[0])
} else {
this.$message({ showClose: true, type: 'error', message: '请选择一条记录进行操作' })
}
},
toInfo(row) {
this.viewState = 4

52
yxt-as-ui/src/views/operation/repairbill/repairbillByBeCompleted.vue

@ -146,6 +146,7 @@ import ButtonBar from '@/components/ButtonBar'
import req from '@/api/operation/repairbill'
import repairbillAdd from './repairbillAdd'
import repairbillInfo from './repairbillInfo'
import { typeValues } from '@/api/Common/dictcommons'
export default {
name: 'RepairBillByCompleted',
@ -160,13 +161,6 @@ export default {
return {
btndisabled: false,
btnList: [
{
type: 'primary',
size: 'small',
icon: 'plus',
btnKey: 'toAdd',
btnLabel: '新增'
},
{
type: 'primary',
size: 'small',
@ -195,20 +189,7 @@ export default {
tableKey: 0,
list: [],
sids: [], // SIDs
billType_list: [
{
dictKey: '0',
dictValue: '正常工单'
},
{
dictKey: '1',
dictValue: '保险理赔'
},
{
dictKey: '2',
dictValue: '协议单位'
}
],
billType_list: [],
state_list: [
{
dictKey: '1',
@ -216,7 +197,7 @@ export default {
},
{
dictKey: '0',
dictValue: ''
dictValue: ''
}
],
FormLoading: false,
@ -224,7 +205,7 @@ export default {
//
listQuery: {
current: 1,
size: 10,
size: 5,
total: 0,
params: {
startTime: '',
@ -258,12 +239,20 @@ export default {
},
created() {
//
this.init()
this.getList()
},
mounted() {
this.$refs['btnbar'].setButtonList(this.btnList)
},
methods: {
init() {
typeValues({ type: 'billType' }).then((res) => {
if (res.success) {
this.billType_list = res.data
}
})
},
//
clicksearchShow() {
this.isSearchShow = !this.isSearchShow
@ -276,9 +265,6 @@ export default {
btnHandle(btnKey) {
console.log('XXXXXXXXXXXXXXX ' + btnKey)
switch (btnKey) {
case 'toAdd':
this.toAdd()
break
case 'toEdit':
this.toEdit()
break
@ -333,7 +319,7 @@ export default {
handleReset() {
this.listQuery = {
current: 1,
size: 10,
size: 5,
total: 0,
params: {
startTime: '',
@ -365,13 +351,13 @@ export default {
}
this.getList()
},
toAdd() {
this.viewState = 2
this.$refs['divAdd'].showAdd()
},
toEdit() {
this.viewState = 3
this.$refs['divAdd'].showEdit()
if (this.sids.length === 1) {
this.viewState = 3
this.$refs['divAdd'].showEdit(this.sids[0])
} else {
this.$message({ showClose: true, type: 'error', message: '请选择一条记录进行操作' })
}
},
toInfo(row) {
this.viewState = 4

52
yxt-as-ui/src/views/operation/repairbill/repairbillByMaintain.vue

@ -146,6 +146,7 @@ import ButtonBar from '@/components/ButtonBar'
import req from '@/api/operation/repairbill'
import repairbillAdd from './repairbillAdd'
import repairbillInfo from './repairbillInfo'
import {typeValues} from "@/api/Common/dictcommons";
export default {
name: 'RepairBillByMaintain',
@ -160,13 +161,6 @@ export default {
return {
btndisabled: false,
btnList: [
{
type: 'primary',
size: 'small',
icon: 'plus',
btnKey: 'toAdd',
btnLabel: '新增'
},
{
type: 'primary',
size: 'small',
@ -195,20 +189,7 @@ export default {
tableKey: 0,
list: [],
sids: [], // SIDs
billType_list: [
{
dictKey: '0',
dictValue: '正常工单'
},
{
dictKey: '1',
dictValue: '保险理赔'
},
{
dictKey: '2',
dictValue: '协议单位'
}
],
billType_list: [],
state_list: [
{
dictKey: '1',
@ -216,7 +197,7 @@ export default {
},
{
dictKey: '0',
dictValue: ''
dictValue: ''
}
],
FormLoading: false,
@ -224,7 +205,7 @@ export default {
//
listQuery: {
current: 1,
size: 10,
size: 5,
total: 0,
params: {
startTime: '',
@ -258,12 +239,20 @@ export default {
},
created() {
//
this.init()
this.getList()
},
mounted() {
this.$refs['btnbar'].setButtonList(this.btnList)
},
methods: {
init() {
typeValues({ type: 'billType' }).then((res) => {
if (res.success) {
this.billType_list = res.data
}
})
},
//
clicksearchShow() {
this.isSearchShow = !this.isSearchShow
@ -276,9 +265,6 @@ export default {
btnHandle(btnKey) {
console.log('XXXXXXXXXXXXXXX ' + btnKey)
switch (btnKey) {
case 'toAdd':
this.toAdd()
break
case 'toEdit':
this.toEdit()
break
@ -333,7 +319,7 @@ export default {
handleReset() {
this.listQuery = {
current: 1,
size: 10,
size: 5,
total: 0,
params: {
startTime: '',
@ -365,13 +351,13 @@ export default {
}
this.getList()
},
toAdd() {
this.viewState = 2
this.$refs['divAdd'].showAdd()
},
toEdit() {
this.viewState = 3
this.$refs['divAdd'].showEdit()
if (this.sids.length === 1) {
this.viewState = 3
this.$refs['divAdd'].showEdit(this.sids[0])
} else {
this.$message({ showClose: true, type: 'error', message: '请选择一条记录进行操作' })
}
},
toInfo(row) {
this.viewState = 4

52
yxt-as-ui/src/views/operation/repairbill/repairbillBySendWork.vue

@ -146,6 +146,7 @@ import ButtonBar from '@/components/ButtonBar'
import req from '@/api/operation/repairbill'
import repairbillAdd from './repairbillAdd'
import repairbillInfo from './repairbillInfo'
import { typeValues } from '@/api/Common/dictcommons'
export default {
name: 'RepairBillBySendWork',
@ -160,13 +161,6 @@ export default {
return {
btndisabled: false,
btnList: [
{
type: 'primary',
size: 'small',
icon: 'plus',
btnKey: 'toAdd',
btnLabel: '新增'
},
{
type: 'primary',
size: 'small',
@ -195,20 +189,7 @@ export default {
tableKey: 0,
list: [],
sids: [], // SIDs
billType_list: [
{
dictKey: '0',
dictValue: '正常工单'
},
{
dictKey: '1',
dictValue: '保险理赔'
},
{
dictKey: '2',
dictValue: '协议单位'
}
],
billType_list: [],
state_list: [
{
dictKey: '1',
@ -216,7 +197,7 @@ export default {
},
{
dictKey: '0',
dictValue: ''
dictValue: ''
}
],
FormLoading: false,
@ -224,7 +205,7 @@ export default {
//
listQuery: {
current: 1,
size: 10,
size: 5,
total: 0,
params: {
startTime: '',
@ -258,12 +239,20 @@ export default {
},
created() {
//
this.init()
this.getList()
},
mounted() {
this.$refs['btnbar'].setButtonList(this.btnList)
},
methods: {
init() {
typeValues({ type: 'billType' }).then((res) => {
if (res.success) {
this.billType_list = res.data
}
})
},
//
clicksearchShow() {
this.isSearchShow = !this.isSearchShow
@ -276,9 +265,6 @@ export default {
btnHandle(btnKey) {
console.log('XXXXXXXXXXXXXXX ' + btnKey)
switch (btnKey) {
case 'toAdd':
this.toAdd()
break
case 'toEdit':
this.toEdit()
break
@ -333,7 +319,7 @@ export default {
handleReset() {
this.listQuery = {
current: 1,
size: 10,
size: 5,
total: 0,
params: {
startTime: '',
@ -365,13 +351,13 @@ export default {
}
this.getList()
},
toAdd() {
this.viewState = 2
this.$refs['divAdd'].showAdd()
},
toEdit() {
this.viewState = 3
this.$refs['divAdd'].showEdit()
if (this.sids.length === 1) {
this.viewState = 3
this.$refs['divAdd'].showEdit(this.sids[0])
} else {
this.$message({ showClose: true, type: 'error', message: '请选择一条记录进行操作' })
}
},
toInfo(row) {
this.viewState = 4

52
yxt-as-ui/src/views/operation/repairbill/repairbillBySettleAccounts.vue

@ -146,6 +146,7 @@ import ButtonBar from '@/components/ButtonBar'
import req from '@/api/operation/repairbill'
import repairbillAdd from './repairbillAdd'
import repairbillInfo from './repairbillInfo'
import { typeValues } from '@/api/Common/dictcommons'
export default {
name: 'RepairBillBySettleAccounts',
@ -160,13 +161,6 @@ export default {
return {
btndisabled: false,
btnList: [
{
type: 'primary',
size: 'small',
icon: 'plus',
btnKey: 'toAdd',
btnLabel: '新增'
},
{
type: 'primary',
size: 'small',
@ -195,20 +189,7 @@ export default {
tableKey: 0,
list: [],
sids: [], // SIDs
billType_list: [
{
dictKey: '0',
dictValue: '正常工单'
},
{
dictKey: '1',
dictValue: '保险理赔'
},
{
dictKey: '2',
dictValue: '协议单位'
}
],
billType_list: [],
state_list: [
{
dictKey: '1',
@ -216,7 +197,7 @@ export default {
},
{
dictKey: '0',
dictValue: ''
dictValue: ''
}
],
FormLoading: false,
@ -224,7 +205,7 @@ export default {
//
listQuery: {
current: 1,
size: 10,
size: 5,
total: 0,
params: {
startTime: '',
@ -258,12 +239,20 @@ export default {
},
created() {
//
this.init()
this.getList()
},
mounted() {
this.$refs['btnbar'].setButtonList(this.btnList)
},
methods: {
init() {
typeValues({ type: 'billType' }).then((res) => {
if (res.success) {
this.billType_list = res.data
}
})
},
//
clicksearchShow() {
this.isSearchShow = !this.isSearchShow
@ -276,9 +265,6 @@ export default {
btnHandle(btnKey) {
console.log('XXXXXXXXXXXXXXX ' + btnKey)
switch (btnKey) {
case 'toAdd':
this.toAdd()
break
case 'toEdit':
this.toEdit()
break
@ -333,7 +319,7 @@ export default {
handleReset() {
this.listQuery = {
current: 1,
size: 10,
size: 5,
total: 0,
params: {
startTime: '',
@ -365,13 +351,13 @@ export default {
}
this.getList()
},
toAdd() {
this.viewState = 2
this.$refs['divAdd'].showAdd()
},
toEdit() {
this.viewState = 3
this.$refs['divAdd'].showEdit()
if (this.sids.length === 1) {
this.viewState = 3
this.$refs['divAdd'].showEdit(this.sids[0])
} else {
this.$message({ showClose: true, type: 'error', message: '请选择一条记录进行操作' })
}
},
toInfo(row) {
this.viewState = 4

13
yxt-as-ui/src/views/operation/repairbill/repairbillInfo.vue

@ -4,6 +4,7 @@
<div class="tab-header webtop">
<div>{{ viewTitle }}</div>
<div>
<el-button type="primary" size="small" @click="negativeSettlement()">反结算</el-button>
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
</div>
</div>
@ -271,14 +272,19 @@
</el-form>
</div>
</div>
<workslrsettlementAdd v-show="viewState == 2" ref="divFJS" @doback="resetState" />
</div>
</template>
<script>
import req from '@/api/operation/repairbill'
import workslrsettlementAdd from '../workslrsettlement/workslrsettlementAdd'
export default {
name: 'RepairBillInfo',
components: {
workslrsettlementAdd
},
data() {
return {
viewTitle: '',
@ -459,6 +465,13 @@ export default {
}
})
},
resetState() {
this.viewState = 1
},
negativeSettlement() {
this.viewState = 2
this.$refs['divFJS'].showAdd(this.formobj.sid )
},
handleReturn() {
this.formobj = {
sid: '',

340
yxt-as-ui/src/views/operation/workslrsettlement/workslrsettlement.vue

@ -0,0 +1,340 @@
<template>
<div class="app-container">
<!--列表页面-->
<div v-show="viewState == 1">
<button-bar view-title="工单反结算申请管理" ref="btnbar" :btndisabled="btndisabled" @btnhandle="btnHandle"/>
<!--Start查询列表部分-->
<div class="main-content">
<div class="searchcon">
<el-button size="small" class="searchbtn" @click="clicksearchShow">{{ searchxianshitit }}</el-button>
<div v-show="isSearchShow" class="search">
<el-form ref="listQueryform" :inline="true" :model="listQuery" label-width="100px" class="tab-header">
<el-form-item label="分公司">
<el-input v-model="listQuery.params.useOrgName" placeholder="" clearable/>
</el-form-item>
<el-form-item label="申请部门">
<el-input v-model="listQuery.params.dept" placeholder="" clearable/>
</el-form-item>
<el-form-item label="申请人">
<el-input v-model="listQuery.params.createByName" placeholder="" clearable/>
</el-form-item>
<el-form-item label="单据编号">
<el-input v-model="listQuery.params.billNo" placeholder="" clearable/>
</el-form-item>
<el-form-item label="申请日期">
<el-date-picker v-model="listQuery.params.applyDateStart" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" placeholder="选择日期"></el-date-picker>
<span style="padding: 0 8px"></span>
<el-date-picker v-model="listQuery.params.applyDateEnd" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" placeholder="选择日期"></el-date-picker>
</el-form-item>
<el-form-item label="办结日期">
<el-date-picker v-model="listQuery.params.closeDateStart" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" placeholder="选择日期"></el-date-picker>
<span style="padding: 0 8px"></span>
<el-date-picker v-model="listQuery.params.closeDateEnd" value-format="yyyy-MM-dd" format="yyyy-MM-dd" type="date" placeholder="选择日期"></el-date-picker>
</el-form-item>
<el-form-item label="工单编号">
<el-input v-model="listQuery.params.sourceBillNo" placeholder="" clearable/>
</el-form-item>
<el-form-item label="工单类型">
<el-select v-model="listQuery.params.billType" clearable placeholder="请选择" filterable>
<el-option v-for="item in billType_list" :key="item.dictKey" :label="item.dictValue" :value="item.dictValue">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="科目">
<el-input v-model="listQuery.params.subject" placeholder="" clearable/>
</el-form-item>
<el-form-item label="客户名称">
<el-input v-model="listQuery.params.customerName" placeholder="" clearable/>
</el-form-item>
<el-form-item label="车牌号">
<el-input v-model="listQuery.params.vehMark" placeholder="" clearable/>
</el-form-item>
<el-form-item label="车架号">
<el-input v-model="listQuery.params.vinNo" placeholder="" clearable/>
</el-form-item>
</el-form>
<div class="btn" style="text-align: center;">
<el-button type="primary" icon="el-icon-search" size="small" @click="handleFilter">查询</el-button>
<el-button type="primary" icon="el-icon-refresh" size="small" @click="handleReset">重置</el-button>
</div>
</div>
</div>
<!--End查询列表部分-->
<div class="listtop">
<div class="tit">工单反结算申请列表</div>
<pageye v-show="list.length > 0" :total="listQuery.total" :page.sync="listQuery.current" :limit.sync="listQuery.size" class="pagination" @pagination="getList"/>
</div>
<!--Start 主页面主要部分 -->
<div class="">
<el-table :key="tableKey" v-loading="listLoading" :data="list" border style="width: 100%;" @selection-change="handleSelectionChange">
<el-table-column type="selection" align="center" width="50"/>
<el-table-column label="序号" type="index" width="80" :index="indexMethod" align="center"/>
<el-table-column label="操作" width="180px" align="center">
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="toEdit(scope.row)" :disabled="scope.row.nodeState =='发起申请' ? false : scope.row.nodeState == '待提交' ? false : true">办理</el-button>
<el-button type="primary" size="mini" @click="toInfo(scope.row)">查看</el-button>
</template>
</el-table-column>
<el-table-column label="流程状态" width="150" header-align="center">
<template slot-scope="scope">
<span v-if="scope.row.nodeState=='待提交'" type="primary" size="mini">待提交</span>
<span v-else @click="flowRecord(scope.row)" class="bluezi">{{ scope.row.nodeState }}</span>
</template>
</el-table-column>
<el-table-column prop="billNo" label="单据编号" align="center" width="130" />
<el-table-column prop="useOrgName" label="分公司" align="center" width="120" />
<el-table-column prop="dept" label="申请部门" align="center" width="120" />
<el-table-column prop="createByName" label="申请人" align="center" width="120" />
<el-table-column prop="applyDate" label="申请日期" align="center" width="120" />
<el-table-column prop="closeDate" label="办结日期" align="center" width="120" />
<el-table-column prop="sourceBillNo" label="工单编号" align="center" width="120" />
<el-table-column prop="billType" label="工单类型" align="center" width="120" />
<el-table-column prop="subject" label="科目" align="center" width="100" />
<el-table-column prop="customerName" label="客户名称" align="center" width="160" />
<el-table-column prop="vehMark" label="车牌号" align="center" width="100" />
<el-table-column prop="vinNo" label="车架号" align="center" width="100" />
<el-table-column prop="reason" label="反结算原因" align="center" min-width="200" />
</el-table>
</div>
<!--End 主页面主要部分-->
<div class="pages">
<div class="tit"/>
<!-- 翻页 -->
<pagination v-show="list.length > 0" :total="listQuery.total" :page.sync="listQuery.current" :limit.sync="listQuery.size" class="pagination" @pagination="getList"/>
</div>
<!--End查询列表部分-->
</div>
</div>
<!--新增及修改 -->
<workslrsettlementAdd v-show="viewState == 2 || viewState == 3" ref="divAdd" @doback="resetState" @reloadlist="getList"/>
<!-- 详情 -->
<workslrsettlementInfo v-show="viewState == 4" ref="divInfo" @doback="resetState" />
</div>
</template>
<script>
import Pagination from '@/components/pagination'
import pageye from '@/components/pagination/pageye'
import ButtonBar from '@/components/ButtonBar'
import req from '@/api/operation/workslrsettlement'
import workslrsettlementAdd from './workslrsettlementAdd'
import workslrsettlementInfo from './workslrsettlementInfo'
import { typeValues } from '@/api/Common/dictcommons'
export default {
name: 'WorkSLRSettlement',
components: {
Pagination,
pageye,
ButtonBar,
workslrsettlementAdd,
workslrsettlementInfo
},
data() {
return {
btndisabled: false,
btnList: [
{
type: 'danger',
size: 'small',
icon: 'del',
btnKey: 'doDel',
btnLabel: '删除'
},
{
type: 'info',
size: 'small',
icon: 'cross',
btnKey: 'doClose',
btnLabel: '关闭'
}
],
isSearchShow: false,
searchxianshitit: '显示查询条件',
viewState: 1, // 1 2 3 4
tableKey: 0,
list: [],
sids: [], // SIDs
billType_list: [],
FormLoading: false,
listLoading: false,
//
listQuery: {
current: 1,
size: 5,
total: 0,
params: {
orgPath: '',
userSid: '',
menuUrl: '',
useOrgName: '',
dept: '',
createByName: '',
billNo: '',
applyDateStart: '',
applyDateEnd: '',
closeDateStart: '',
closeDateEnd: '',
sourceBillNo: '',
billType: '',
subject: '',
customerName: '',
vinNo: '',
vehMark: ''
}
}
}
},
created() {
//
this.init()
this.getList()
},
mounted() {
this.$refs['btnbar'].setButtonList(this.btnList)
},
methods: {
init() {
typeValues({ type: 'billType' }).then((res) => {
if (res.success) {
this.billType_list = res.data
}
})
},
//
clicksearchShow() {
this.isSearchShow = !this.isSearchShow
if (this.isSearchShow) {
this.searchxianshitit = '隐藏查询条件'
} else {
this.searchxianshitit = '显示查询条件'
}
},
btnHandle(btnKey) {
console.log('XXXXXXXXXXXXXXX ' + btnKey)
switch (btnKey) {
case 'doDel':
this.doDel()
break
case 'doClose':
this.doClose()
break
default:
break
}
},
// sid
handleSelectionChange(row) {
const aa = []
row.forEach(element => {
aa.push(element.sid)
})
this.sids = aa
},
//
indexMethod(index) {
var pagestart = (this.listQuery.current - 1) * this.listQuery.size
var pageindex = index + 1 + pagestart
return pageindex
},
//
getList() {
this.listLoading = true
this.listQuery.params.userSid = window.sessionStorage.getItem('userSid')
this.listQuery.params.orgPath = window.sessionStorage.getItem('defaultOrgPath')
this.listQuery.params.menuUrl = this.$route.path
req.listPage(this.listQuery).then(response => {
this.listLoading = false
if (response.success) {
this.list = response.data.records
this.listQuery.total = response.data.total
} else {
this.list = []
this.listQuery.total = 0
}
})
},
//
handleFilter() {
this.listQuery.current = 1
this.getList()
},
//
handleReset() {
this.listQuery = {
current: 1,
size: 5,
total: 0,
params: {
orgPath: '',
userSid: '',
menuUrl: '',
useOrgName: '',
dept: '',
createByName: '',
billNo: '',
applyDateStart: '',
applyDateEnd: '',
closeDateStart: '',
closeDateEnd: '',
sourceBillNo: '',
billType: '',
subject: '',
customerName: '',
vinNo: '',
vehMark: ''
}
}
this.getList()
},
toEdit(row) {
this.viewState = 3
this.$refs['divAdd'].showEdit(row)
},
toInfo(row) {
this.viewState = 4
this.$refs['divInfo'].showInfo(row)
},
//
doDel() {
if (this.sids.length === 0) {
this.$message({ showClose: true, type: 'error', message: '请选择至少一条记录进行删除操作' })
return
}
const tip = '请确认是否删除所选 ' + this.sids.length + ' 条记录?'
this.$confirm(tip, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
req.deleteBySids(this.sids).then(resp => {
if (resp.success) {
this.$message({ type: 'success', message: resp.msg, showClose: true })
}
this.getList()
loading.close()
}).catch(e => {
loading.close()
})
}).catch(() => {
})
},
//
resetState() {
this.viewState = 1
},
doClose() {
this.$store.dispatch('tagsView/delView', this.$route)
this.$router.go(-1)
}
}
}
</script>
<style scoped>
</style>

359
yxt-as-ui/src/views/operation/workslrsettlement/workslrsettlementAdd.vue

@ -0,0 +1,359 @@
<template>
<div class="app-container">
<div v-show="viewState == 1">
<div class="tab-header webtop">
<div>{{ viewTitle }}</div>
<div>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="saveOrUpdate()">保存</el-button>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="submit()">提交</el-button>
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
</div>
</div>
<div class="listconadd">
<el-form ref="form_obj" :model="formobj" :rules="rules" class="formaddcopy02">
<el-row style="border-top: 1px solid #e0e3eb">
<el-col :span="8">
<div class="span-sty">申请人</div>
<el-form-item><span class="addinputInfo">{{ formobj.createByName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请部门</div>
<el-form-item><span class="addinputInfo">{{ formobj.dept }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请日期</div>
<el-form-item><span class="addinputInfo">{{ formobj.applyDate }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">反结算原因</div>
<el-form-item><el-input class="addinputInfo addinputw" v-model="formobj.reason" clearable placeholder="" /></el-form-item>
</el-col>
</el-row>
<div class="title">维修工单信息</div>
<el-row>
<el-col :span="8">
<div class="span-sty">工单编号</div>
<el-form-item><span class="addinputInfo">{{ formobj.sourceBillNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">单据日期</div>
<el-form-item><span class="addinputInfo">{{ formobj.sourceBillDate }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">服务顾问</div>
<el-form-item><span class="addinputInfo">{{ formobj.waitorName }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">工单类型</div>
<el-form-item><span class="addinputInfo">{{ formobj.billType }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">科目</div>
<el-form-item><span class="addinputInfo">{{ formobj.subject }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">结算时间</div>
<el-form-item><span class="addinputInfo">{{ formobj.settleDate }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">客户名称</div>
<el-form-item><span class="addinputInfo">{{ formobj.customerName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">联系电话</div>
<el-form-item><span class="addinputInfo">{{ formobj.mobile }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">车牌号/车架号</div>
<el-form-item><span class="addinputInfo">{{ formobj.vehMark }}/{{ formobj.vinNo }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">客户单位</div>
<el-form-item><span class="addinputInfo">{{ formobj.customerOrg }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">合计金额</div>
<el-form-item><span class="addinputInfo">{{ jeTotal }} = 工时费{{ gsfTotal }} + 材料费{{ clfTotal }} + 附加费{{ fjfTotal }} + 税额{{ seTotal }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">应收金额</div>
<el-form-item><span class="addinputInfo">{{ ysjeTotal }} = 合计金额{{ jeTotal }} - 优惠<span>{{ formobj.discountAmount }}</span> - 优惠券<span>{{ formobj.coupon }}</span> - 积分抵扣<span>{{ formobj.scoreDeduct }}</span></span></el-form-item>
</el-col>
</el-row>
<div class="title">服务项目</div>
<el-table :key="serviceKey" :data="formobj.sitemVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column prop="serviceItem" label="服务项目" align="center" width="200" />
<el-table-column prop="serviceType" label="工种" align="center" width="150" />
<el-table-column prop="subject" label="科目" align="center" width="150" />
<el-table-column prop="repairerName" label="维修人" align="center" width="200" />
<el-table-column prop="examineHourPrice" label="考核工时" align="center" width="100" />
<el-table-column prop="hourPrice" label="工时单价" align="center" width="150" />
<el-table-column prop="hours" label="工时数" align="center" width="100" />
<el-table-column prop="price" label="销售价" align="center" width="150" />
<el-table-column prop="discount" label="折扣" align="center" width="100" />
<el-table-column prop="discountAmount" label="优惠" align="center" width="150" />
<el-table-column prop="amount" label="销售金额" align="center" width="150" />
<el-table-column prop="remarks" label="备注" align="center" min-width="300" />
</el-table>
<div class="title">商品</div>
<el-table :key="tableKey" :data="formobj.goodsDetailsVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center" />
<el-table-column prop="goodsSpuName" label="商品名称" width="100" align="center" />
<el-table-column prop="goodsSkuCode" label="图号" width="100" align="center" />
<el-table-column prop="goodsSkuOwnSpec" label="规格" width="100" align="center" />
<el-table-column prop="unit" label="单位" width="100" align="center" />
<el-table-column prop="warehouseName" label="仓库" width="100" align="center" />
<el-table-column prop="warehouseRackCode" label="库位" width="100" align="center" />
<el-table-column prop="price" label="销售价" align="center" width="150" />
<el-table-column prop="count" label="数量" width="100" align="center" />
<el-table-column prop="discount" label="折扣" align="center" width="100" />
<el-table-column prop="discountAmount" label="优惠" width="100" align="center" />
<el-table-column prop="amount" label="金额" width="100" align="center" />
<el-table-column prop="remarks" label="备注" align="center" min-width="300" />
</el-table>
<div class="title">附加项目</div>
<el-table :key="subjoinKey" :data="formobj.aitemVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column prop="aitemName" label="附加项目" align="center" width="200" />
<el-table-column prop="price" label="销售价" align="center" width="150" />
<el-table-column prop="remarks" label="备注" align="center" min-width="200" />
</el-table>
</el-form>
</div>
</div>
</div>
</template>
<script>
import req from '@/api/operation/workslrsettlement'
export default {
name: 'WorkSLRSettlementAdd',
data() {
return {
viewTitle: '',
viewState: 1,
submitdisabled: false,
tableKey: 0,
index: 0,
// service
serviceKey: 1,
// subjoin
subjoinKey: 2,
formobj: {
sid: '',
createByName: '',
billNo: '',
billType: '',
subject: '',
waitorName: '',
customerName: '',
mobile: '',
customerOrg: '',
vehMark: '',
vinNo: '',
sitemVos: [],
aitemVos: [],
goodsDetailsVos: [],
orgPath: '',
deptSid: '',
dept: '',
useSid: '',
useOrgSid: '',
useOrgName: '',
reason: '',
applyDate: '',
sourceSid: '',
amount: '',
coupon: '',
scoreDeduct: '',
sourceBillDate: '',
settleDate: '',
taxRate: '',
taskId: '',
instanceId: ''
},
rules: {}
}
},
computed: {
// =
gsfTotal() {
let gsf = '0'
if (this.formobj.sitemVos.length > 0) {
this.formobj.sitemVos.forEach((e) => {
if (e.serviceItem !== '') {
gsf = Math.round((parseFloat(gsf) + parseFloat(e.price !== '' ? e.price : '0')) * 100) / 100
}
})
}
return gsf
},
// =
clfTotal() {
let clf = '0'
if (this.formobj.goodsDetailsVos.length > 0) {
this.formobj.goodsDetailsVos.forEach((e) => {
if (e.goodsSpuName !== '') {
clf = Math.round((parseFloat(clf) + parseFloat(e.price !== '' ? e.price : '0')) * 100) / 100
}
})
}
return clf
},
// ==
fjfTotal() {
let fjf = '0'
if (this.formobj.aitemVos.length > 0) {
this.formobj.aitemVos.forEach((e) => {
if (e.aitemName !== '') {
fjf = Math.round((parseFloat(fjf) + parseFloat(e.price !== '' ? e.price : '0')) * 100) / 100
}
})
}
return fjf
},
// = *
seTotal() {
let se = '0'
se = Math.round((parseFloat(this.clfTotal) * parseFloat(this.formobj.taxRate !== '' ? this.formobj.taxRate : '0')) * 100) / 100
return se
},
// = + + +
jeTotal() {
let je = '0'
je = Math.round((parseFloat(je) + parseFloat(this.gsfTotal) + parseFloat(this.clfTotal) + parseFloat(this.fjfTotal) + parseFloat(this.seTotal)) * 100) / 100
return je
},
//
ysjeTotal() {
let ysje = '0'
ysje = Math.round((parseFloat(ysje) + parseFloat(this.jeTotal) - parseFloat(this.formobj.discountAmount !== '' ? this.formobj.discountAmount : '0') - parseFloat(this.formobj.coupon !== '' ? this.formobj.coupon : '0') - parseFloat(this.formobj.scoreDeduct !== '' ? this.formobj.scoreDeduct : '0')) * 100) / 100
return ysje
}
},
methods: {
showAdd(sid) {
this.viewTitle = '【新增】工单反结算'
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
req.reverseSettleInit({ sid: sid, userSid: window.sessionStorage.getItem('userSid'), orgPath: window.sessionStorage.getItem('defaultOrgPath') }).then((res) => {
if (res.success) {
this.formobj = res.data
if (this.formobj.sitemVos.length > 0) {
this.formobj.sitemVos.forEach((e) => {
if (e.staffNameList.length > 0) {
e.repairerName = e.staffNameList.join(',')
}
})
}
}
})
},
showEdit(row) {
this.viewTitle = '【编辑】工单反结算'
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
req.fetchBySid(row.sid).then((res) => {
if (res.success) {
this.formobj = res.data
}
})
},
saveOrUpdate() {
this.$refs['form_obj'].validate((valid) => {
if (valid) {
this.submitdisabled = true
req.saveOrUpdate(this.formobj).then((res) => {
if (res.success) {
this.$message({ showClose: true, type: 'success', message: '保存成功' })
this.handleReturn('true')
} else {
this.submitdisabled = false
}
}).catch(() => {
this.submitdisabled = false
})
}
})
},
submit() {
this.$refs['form_obj'].validate((valid) => {
if (valid) {
this.submitdisabled = true
req.submit(this.formobj).then((res) => {
if (res.success) {
this.$message({ showClose: true, type: 'success', message: '提交成功' })
this.handleReturn('true')
} else {
this.submitdisabled = false
}
}).catch(() => {
this.submitdisabled = false
})
}
})
},
handleReturn() {
this.formobj = {
sid: '',
createByName: '',
billNo: '',
billType: '',
subject: '',
waitorName: '',
customerName: '',
mobile: '',
customerOrg: '',
vehMark: '',
vinNo: '',
sitemVos: [],
aitemVos: [],
goodsDetailsVos: [],
orgPath: '',
deptSid: '',
dept: '',
useSid: '',
useOrgSid: '',
useOrgName: '',
reason: '',
applyDate: '',
sourceSid: '',
amount: '',
coupon: '',
scoreDeduct: '',
sourceBillDate: '',
settleDate: '',
taxRate: '',
taskId: '',
instanceId: ''
}
this.$emit('doback')
}
}
}
</script>
<style scoped>
.span-sty {
width: 130px !important;
}
.addinputInfo {
margin-left: 120px !important;
}
</style>

312
yxt-as-ui/src/views/operation/workslrsettlement/workslrsettlementInfo.vue

@ -0,0 +1,312 @@
<template>
<div class="app-container">
<div v-show="viewState == 1">
<div class="tab-header webtop">
<div>{{ viewTitle }}</div>
<div>
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
</div>
</div>
<div class="listconadd">
<el-form ref="form_obj" :model="formobj" :rules="rules" class="formaddcopy02">
<el-row style="border-top: 1px solid #e0e3eb">
<el-col :span="8">
<div class="span-sty">申请人</div>
<el-form-item><span class="addinputInfo">{{ formobj.createByName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请部门</div>
<el-form-item><span class="addinputInfo">{{ formobj.dept }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请日期</div>
<el-form-item><span class="addinputInfo">{{ formobj.applyDate }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">反结算原因</div>
<el-form-item><span class="addinputInfo">{{ formobj.reason }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">维修工单信息</div>
<el-row>
<el-col :span="8">
<div class="span-sty">工单编号</div>
<el-form-item><span class="addinputInfo">{{ formobj.sourceBillNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">单据日期</div>
<el-form-item><span class="addinputInfo">{{ formobj.sourceBillDate }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">服务顾问</div>
<el-form-item><span class="addinputInfo">{{ formobj.waitorName }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">工单类型</div>
<el-form-item><span class="addinputInfo">{{ formobj.billType }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">科目</div>
<el-form-item><span class="addinputInfo">{{ formobj.subject }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">结算时间</div>
<el-form-item><span class="addinputInfo">{{ formobj.settleDate }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">客户名称</div>
<el-form-item><span class="addinputInfo">{{ formobj.customerName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">联系电话</div>
<el-form-item><span class="addinputInfo">{{ formobj.mobile }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">车牌号/车架号</div>
<el-form-item><span class="addinputInfo">{{ formobj.vehMark }}/{{ formobj.vinNo }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">客户单位</div>
<el-form-item><span class="addinputInfo">{{ formobj.customerOrg }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">服务项目</div>
<el-table :key="serviceKey" :data="formobj.sitemVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column prop="serviceItem" label="服务项目" align="center" width="200" />
<el-table-column prop="serviceType" label="工种" align="center" width="150" />
<el-table-column prop="subject" label="科目" align="center" width="150" />
<el-table-column prop="repairerName" label="维修人" width="100" align="center" />
<el-table-column prop="examineHourPrice" label="考核工时" align="center" width="100" />
<el-table-column prop="hourPrice" label="工时单价" align="center" width="150" />
<el-table-column prop="hours" label="工时数" align="center" width="100" />
<el-table-column prop="price" label="销售价" align="center" width="150" />
<el-table-column prop="discount" label="折扣" align="center" width="100" />
<el-table-column prop="discountAmount" label="优惠" align="center" width="150" />
<el-table-column prop="amount" label="销售金额" align="center" width="150" />
<el-table-column prop="remarks" label="备注" align="center" min-width="300" />
</el-table>
<div class="title">商品</div>
<el-table :key="tableKey" :data="formobj.goodsDetailsVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center" />
<el-table-column prop="goodsSpuName" label="商品名称" width="100" align="center" />
<el-table-column prop="goodsSkuCode" label="图号" width="100" align="center" />
<el-table-column prop="goodsSkuOwnSpec" label="规格" width="100" align="center" />
<el-table-column prop="unit" label="单位" width="100" align="center" />
<el-table-column prop="warehouseName" label="仓库" width="100" align="center" />
<el-table-column prop="warehouseRackCode" label="库位" width="100" align="center" />
<el-table-column prop="price" label="销售价" align="center" width="150" />
<el-table-column prop="count" label="数量" width="100" align="center" />
<el-table-column prop="discount" label="折扣" align="center" width="100" />
<el-table-column prop="discountAmount" label="优惠" width="100" align="center" />
<el-table-column prop="amount" label="金额" width="100" align="center" />
<el-table-column prop="remarks" label="备注" align="center" min-width="300" />
</el-table>
<div class="title">附加项目</div>
<el-table :key="subjoinKey" :data="formobj.aitemVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column prop="aitemName" label="附加项目" align="center" width="200" />
<el-table-column prop="price" label="销售价" align="center" width="150" />
<el-table-column prop="remarks" label="备注" align="center" min-width="200" />
</el-table>
<el-row>
<el-col :span="24">
<div class="span-sty">合计金额</div>
<el-form-item><span class="addinputInfo">{{ jeTotal }} = 工时费{{ gsfTotal }} + 材料费{{ clfTotal }} + 附加费{{ fjfTotal }} + 税额{{ seTotal }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">应收金额</div>
<el-form-item><span class="addinputInfo">{{ ysjeTotal }} = 合计金额{{ jeTotal }} - 优惠<span>{{ formobj.discountAmount }}</span> - 优惠券<span>{{ formobj.coupon }}</span> - 积分抵扣<span>{{ formobj.scoreDeduct }}</span></span></el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
</div>
</template>
<script>
import req from '@/api/operation/workslrsettlement'
export default {
name: 'WorkSLRSettlementInfo',
data() {
return {
viewTitle: '',
viewState: 1,
submitdisabled: false,
tableKey: 0,
index: 0,
// service
serviceKey: 1,
// subjoin
subjoinKey: 2,
formobj: {
sid: '',
createByName: '',
billNo: '',
billType: '',
subject: '',
waitorName: '',
customerName: '',
mobile: '',
customerOrg: '',
vehMark: '',
vinNo: '',
sitemVos: [],
aitemVos: [],
goodsDetailsVos: [],
orgPath: '',
deptSid: '',
dept: '',
useSid: '',
useOrgSid: '',
useOrgName: '',
reason: '',
applyDate: '',
sourceSid: '',
amount: '',
coupon: '',
scoreDeduct: '',
sourceBillDate: '',
settleDate: '',
taxRate: '',
taskId: '',
instanceId: ''
},
rules: {}
}
},
computed: {
// =
gsfTotal() {
let gsf = '0'
if (this.formobj.sitemVos.length > 0) {
this.formobj.sitemVos.forEach((e) => {
if (e.serviceItem !== '') {
gsf = Math.round((parseFloat(gsf) + parseFloat(e.price !== '' ? e.price : '0')) * 100) / 100
}
})
}
return gsf
},
// =
clfTotal() {
let clf = '0'
if (this.formobj.goodsDetailsVos.length > 0) {
this.formobj.goodsDetailsVos.forEach((e) => {
if (e.goodsSpuName !== '') {
clf = Math.round((parseFloat(clf) + parseFloat(e.price !== '' ? e.price : '0')) * 100) / 100
}
})
}
return clf
},
// ==
fjfTotal() {
let fjf = '0'
if (this.formobj.aitemVos.length > 0) {
this.formobj.aitemVos.forEach((e) => {
if (e.aitemName !== '') {
fjf = Math.round((parseFloat(fjf) + parseFloat(e.price !== '' ? e.price : '0')) * 100) / 100
}
})
}
return fjf
},
// = *
seTotal() {
let se = '0'
se = Math.round((parseFloat(this.clfTotal) * parseFloat(this.formobj.taxRate !== '' ? this.formobj.taxRate : '0')) * 100) / 100
return se
},
// = + + +
jeTotal() {
let je = '0'
je = Math.round((parseFloat(je) + parseFloat(this.gsfTotal) + parseFloat(this.clfTotal) + parseFloat(this.fjfTotal) + parseFloat(this.seTotal)) * 100) / 100
return je
},
//
ysjeTotal() {
let ysje = '0'
ysje = Math.round((parseFloat(ysje) + parseFloat(this.jeTotal) - parseFloat(this.formobj.discountAmount !== '' ? this.formobj.discountAmount : '0') - parseFloat(this.formobj.coupon !== '' ? this.formobj.coupon : '0') - parseFloat(this.formobj.scoreDeduct !== '' ? this.formobj.scoreDeduct : '0')) * 100) / 100
return ysje
}
},
methods: {
showInfo(row) {
this.viewTitle = '工单反结算详情'
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
req.fetchBySid(row.sid).then((res) => {
if (res.success) {
this.formobj = res.data
if (this.formobj.sitemVos.length > 0) {
this.formobj.sitemVos.forEach((e) => {
if (e.staffNameList.length > 0) {
e.repairerName = e.staffNameList.join(',')
}
})
}
}
})
},
handleReturn() {
this.formobj = {
sid: '',
createByName: '',
billNo: '',
billType: '',
subject: '',
waitorName: '',
customerName: '',
mobile: '',
customerOrg: '',
vehMark: '',
vinNo: '',
sitemVos: [],
aitemVos: [],
goodsDetailsVos: [],
orgPath: '',
deptSid: '',
dept: '',
useSid: '',
useOrgSid: '',
useOrgName: '',
reason: '',
applyDate: '',
sourceSid: '',
amount: '',
coupon: '',
scoreDeduct: '',
sourceBillDate: '',
settleDate: '',
taxRate: '',
taskId: '',
instanceId: ''
}
this.$emit('doback')
}
}
}
</script>
<style scoped>
.span-sty {
width: 130px !important;
}
.addinputInfo {
margin-left: 120px !important;
}
</style>

556
yxt-as-ui/src/views/workFlow/fanjiesuanFlow/workslrsettlementDaiBan.vue

@ -0,0 +1,556 @@
<template>
<div class="app-container">
<div v-show="viewState == 1">
<div class="tab-header webtop">
<div>{{ viewTitle }}</div>
<div>
<el-button type="primary" size="small" @click="openCountersign('加签')"> </el-button>
<el-button type="primary" size="small" @click="openAgree('同意')"> </el-button>
<el-button type="danger" size="small" @click="openReject('驳回')"> </el-button>
<el-button type="danger" size="small" @click="openStop('终止')"> </el-button>
</div>
</div>
<div class="">
<el-form ref="form_obj" :model="formobj" :rules="rules" class="formaddcopy02">
<el-row style="border-top: 1px solid #e0e3eb">
<el-col :span="8">
<div class="span-sty">申请人</div>
<el-form-item><span class="addinputInfo">{{ formobj.createByName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请部门</div>
<el-form-item><span class="addinputInfo">{{ formobj.dept }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请日期</div>
<el-form-item><span class="addinputInfo">{{ formobj.applyDate }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">反结算原因</div>
<el-form-item><span class="addinputInfo">{{ formobj.reason }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">维修工单信息</div>
<el-row>
<el-col :span="8">
<div class="span-sty">工单编号</div>
<el-form-item><span class="addinputInfo">{{ formobj.sourceBillNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">单据日期</div>
<el-form-item><span class="addinputInfo">{{ formobj.sourceBillDate }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">服务顾问</div>
<el-form-item><span class="addinputInfo">{{ formobj.waitorName }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">工单类型</div>
<el-form-item><span class="addinputInfo">{{ formobj.billType }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">科目</div>
<el-form-item><span class="addinputInfo">{{ formobj.subject }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">结算时间</div>
<el-form-item><span class="addinputInfo">{{ formobj.settleDate }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">客户名称</div>
<el-form-item><span class="addinputInfo">{{ formobj.customerName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">联系电话</div>
<el-form-item><span class="addinputInfo">{{ formobj.mobile }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">车牌号/车架号</div>
<el-form-item><span class="addinputInfo">{{ formobj.vehMark }}/{{ formobj.vinNo }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">客户单位</div>
<el-form-item><span class="addinputInfo">{{ formobj.customerOrg }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">服务项目</div>
<el-table :key="serviceKey" :data="formobj.sitemVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column prop="serviceItem" label="服务项目" align="center" width="200" />
<el-table-column prop="serviceType" label="工种" align="center" width="150" />
<el-table-column prop="subject" label="科目" align="center" width="150" />
<el-table-column prop="repairerName" label="维修人" width="100" align="center" />
<el-table-column prop="examineHourPrice" label="考核工时" align="center" width="100" />
<el-table-column prop="hourPrice" label="工时单价" align="center" width="150" />
<el-table-column prop="hours" label="工时数" align="center" width="100" />
<el-table-column prop="price" label="销售价" align="center" width="150" />
<el-table-column prop="discount" label="折扣" align="center" width="100" />
<el-table-column prop="discountAmount" label="优惠" align="center" width="150" />
<el-table-column prop="amount" label="销售金额" align="center" width="150" />
<el-table-column prop="remarks" label="备注" align="center" min-width="300" />
</el-table>
<div class="title">商品</div>
<el-table :key="tableKey" :data="formobj.goodsDetailsVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center" />
<el-table-column prop="goodsSpuName" label="商品名称" width="100" align="center" />
<el-table-column prop="goodsSkuCode" label="图号" width="100" align="center" />
<el-table-column prop="goodsSkuOwnSpec" label="规格" width="100" align="center" />
<el-table-column prop="unit" label="单位" width="100" align="center" />
<el-table-column prop="warehouseName" label="仓库" width="100" align="center" />
<el-table-column prop="warehouseRackCode" label="库位" width="100" align="center" />
<el-table-column prop="price" label="销售价" align="center" width="150" />
<el-table-column prop="count" label="数量" width="100" align="center" />
<el-table-column prop="discount" label="折扣" align="center" width="100" />
<el-table-column prop="discountAmount" label="优惠" width="100" align="center" />
<el-table-column prop="amount" label="金额" width="100" align="center" />
<el-table-column prop="remarks" label="备注" align="center" min-width="300" />
</el-table>
<div class="title">附加项目</div>
<el-table :key="subjoinKey" :data="formobj.aitemVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column prop="aitemName" label="附加项目" align="center" width="200" />
<el-table-column prop="price" label="销售价" align="center" width="150" />
<el-table-column prop="remarks" label="备注" align="center" min-width="200" />
</el-table>
<el-row>
<el-col :span="24">
<div class="span-sty">合计金额</div>
<el-form-item><span class="addinputInfo">{{ jeTotal }} = 工时费{{ gsfTotal }} + 材料费{{ clfTotal }} + 附加费{{ fjfTotal }} + 税额{{ seTotal }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">应收金额</div>
<el-form-item><span class="addinputInfo">{{ ysjeTotal }} = 合计金额{{ jeTotal }} - 优惠<span>{{ formobj.discountAmount }}</span> - 优惠券<span>{{ formobj.coupon }}</span> - 积分抵扣<span>{{ formobj.scoreDeduct }}</span></span></el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<!-- 选择待办人 的弹出框-->
<el-dialog title="填写审批意见" :visible.sync="nodeDialogVisible" width="80%">
<el-form class="formadd" >
<el-row v-show="countersignLink" style="border-top: 1px solid #e0e3eb">
<el-col :span="4" class="tleftb">
<span class="icon">*</span>加签人员:
</el-col>
<el-col :span="20">
<el-form-item>
<el-select v-model="countersign.assignee" placeholder="请选择" filterable>
<el-option v-for="item in options" :key="item.userSid" :label="item.staffName" :value="item.userSid">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-show="currentLink" style="border-top: 1px solid #e0e3eb">
<el-col :span="4" class="tleftb">
<span>当前环节:</span>
</el-col>
<el-col :span="20">
<el-form-item><span>{{ current.taskName }}->{{ nextNode.name }}</span></el-form-item>
</el-col>
</el-row>
<el-row :class="{rowClass:!currentLink}">
<el-col :span="4" class="tleftb">
<span>意见:</span>
</el-col>
<el-col :span="20">
<el-form-item><el-input size="small" v-model="dialogList.comment" placeholder="审批意见" class="addinputw" type="textarea" :autosize="{ minRows: 1, maxRows: 10}" clearable ></el-input></el-form-item>
</el-col>
</el-row>
<div style="text-align:center;margin-top: 20px;">
<el-button type="primary" size="mini" @click="reject"> </el-button>
<el-button type="info " size="mini" @click="nodeDialogVisible = false"> </el-button>
</div>
</el-form>
</el-dialog>
</div>
</template>
<script>
import req from '@/api/operation/workslrsettlement'
export default {
name: 'WorkSLRSettlementDaiBan',
data() {
return {
viewTitle: '',
viewState: 1,
submitdisabled: false,
tableKey: 0,
index: 0,
// service
serviceKey: 1,
// subjoin
subjoinKey: 2,
formobj: {
sid: '',
createByName: '',
billNo: '',
billType: '',
subject: '',
waitorName: '',
customerName: '',
mobile: '',
customerOrg: '',
vehMark: '',
vinNo: '',
sitemVos: [],
aitemVos: [],
goodsDetailsVos: [],
orgPath: '',
deptSid: '',
dept: '',
useSid: '',
useOrgSid: '',
useOrgName: '',
reason: '',
applyDate: '',
sourceSid: '',
amount: '',
coupon: '',
scoreDeduct: '',
sourceBillDate: '',
settleDate: '',
taxRate: '',
taskId: '',
instanceId: ''
},
rules: {},
options: [],
operation: '', //
dialogList: {
comment: ''
},
startTask: true,
current: {
taskDefKey: '',
taskName: '' //
},
nextNode: {}, //
nodeDialogVisible: false,
currentLink: true,
countersignLink: false,
//
linkByParameter: {
businessSid: '',
comment: '',
instanceId: '',
taskId: '',
orgSidPath: '',
taskDefKey: '',
userSid: ''
},
//
countersign: {
taskId: '',
assignee: '',
userSid: '',
instanceId: '',
views: ''
}
}
},
created() {
console.log('url:' + window.location.href)
var one = window.location.href.indexOf('&data') + 6
const data = window.location.href.substr(one) // urlunescape()web,使
const obj = JSON.parse(decodeURIComponent(data))
console.log('iframe页面获取的obj:', obj)
//
this.linkByParameter.businessSid = obj.businessSid
this.linkByParameter.instanceId = obj.instanceId
this.linkByParameter.taskId = obj.taskId
this.linkByParameter.taskDefKey = obj.taskDefKey
// this.linkByParameter.orgSidPath = window.sessionStorage.getItem('orgSidPath')
this.linkByParameter.userSid = window.sessionStorage.getItem('userSid')
this.current.taskDefKey = obj.taskDefKey
this.current.taskName = obj.taskName
//
this.countersign.taskId = obj.taskId
this.countersign.userSid = window.sessionStorage.getItem('userSid')
this.countersign.instanceId = obj.instanceId
//
this.showInfo(obj.businessSid)
},
mounted() {
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 2,
data: 500 + 'px'
}
}, '*')
},
computed: {
// =
gsfTotal() {
let gsf = '0'
if (this.formobj.sitemVos.length > 0) {
this.formobj.sitemVos.forEach((e) => {
if (e.serviceItem !== '') {
gsf = Math.round((parseFloat(gsf) + parseFloat(e.price !== '' ? e.price : '0')) * 100) / 100
}
})
}
return gsf
},
// =
clfTotal() {
let clf = '0'
if (this.formobj.goodsDetailsVos.length > 0) {
this.formobj.goodsDetailsVos.forEach((e) => {
if (e.goodsSpuName !== '') {
clf = Math.round((parseFloat(clf) + parseFloat(e.price !== '' ? e.price : '0')) * 100) / 100
}
})
}
return clf
},
// ==
fjfTotal() {
let fjf = '0'
if (this.formobj.aitemVos.length > 0) {
this.formobj.aitemVos.forEach((e) => {
if (e.aitemName !== '') {
fjf = Math.round((parseFloat(fjf) + parseFloat(e.price !== '' ? e.price : '0')) * 100) / 100
}
})
}
return fjf
},
// = *
seTotal() {
let se = '0'
se = Math.round((parseFloat(this.clfTotal) * parseFloat(this.formobj.taxRate !== '' ? this.formobj.taxRate : '0')) * 100) / 100
return se
},
// = + + +
jeTotal() {
let je = '0'
je = Math.round((parseFloat(je) + parseFloat(this.gsfTotal) + parseFloat(this.clfTotal) + parseFloat(this.fjfTotal) + parseFloat(this.seTotal)) * 100) / 100
return je
},
//
ysjeTotal() {
let ysje = '0'
ysje = Math.round((parseFloat(ysje) + parseFloat(this.jeTotal) - parseFloat(this.formobj.discountAmount !== '' ? this.formobj.discountAmount : '0') - parseFloat(this.formobj.coupon !== '' ? this.formobj.coupon : '0') - parseFloat(this.formobj.scoreDeduct !== '' ? this.formobj.scoreDeduct : '0')) * 100) / 100
return ysje
}
},
methods: {
showInfo(sid) {
this.viewTitle = '工单反结算详情'
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
req.fetchBySid(sid).then((res) => {
if (res.success) {
this.formobj = res.data
if (this.formobj.sitemVos.length > 0) {
this.formobj.sitemVos.forEach((e) => {
if (e.staffNameList.length > 0) {
e.repairerName = e.staffNameList.join(',')
}
})
}
}
})
},
//
openCountersign(val) {
this.operation = val
this.currentLink = true
this.countersignLink = true
this.dialogList.comment = ''
req.getNextNodesForSubmit({ taskDefKey: this.current.taskDefKey, businessSid: this.linkByParameter.businessSid }).then((resp) => {
if (resp.success) {
var arr = resp.data
this.nextNode = arr[0]
this.nodeDialogVisible = true
}
this.submitdisabled = false
})
},
//
openAgree(val) {
this.operation = val
this.currentLink = true
this.countersignLink = false
this.dialogList.comment = '同意'
req.getNextNodesForSubmit({ taskDefKey: this.current.taskDefKey, businessSid: this.linkByParameter.businessSid }).then((resp) => {
if (resp.success) {
var arr = resp.data
this.nextNode = arr[0]
this.nodeDialogVisible = true
}
this.submitdisabled = false
})
},
//
openReject(val) {
this.operation = val
this.currentLink = true
this.countersignLink = false
this.dialogList.comment = ''
req.getPreviousNodesForReject({ taskDefKey: this.current.taskDefKey, businessSid: this.linkByParameter.businessSid }).then((resp) => {
if (resp.success) {
var arr = resp.data
this.nextNode = arr[0]
this.nodeDialogVisible = true
}
this.submitdisabled = false
})
},
//
openStop(val) {
this.operation = val
this.currentLink = false
this.countersignLink = false
this.dialogList.comment = ''
this.nodeDialogVisible = true
},
reject() {
if (this.operation === '同意') {
this.handleAgree()
} else if (this.operation === '驳回') {
if (this.dialogList.comment === '') {
this.$message({ showClose: true, type: 'error', message: '请填写审批意见' })
} else {
this.handleReject()
}
} else if (this.operation === '终止') {
if (this.dialogList.comment === '') {
this.$message({ showClose: true, type: 'error', message: '请填写审批意见' })
} else {
this.handleStop()
}
} else if (this.operation === '加签') {
this.handleCountersign()
}
},
/** 加签 */
handleCountersign() {
if (this.countersign.assignee === '') {
this.$message({ showClose: true, type: 'error', message: '请选择加签人员' })
return
}
if (this.dialogList.comment === '') {
this.$message({ showClose: true, type: 'error', message: '请填写审批意见' })
return
}
this.countersign.views = this.dialogList.comment
req.delegate(this.countersign).then((response) => {
if (response.success) {
this.$notify({
title: '提示',
message: '执行成功',
type: 'success',
duration: 2000
})
this.nodeDialogVisible = false
//
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 1
}
}, '*')
}
})
},
/** 同意任务 */
handleAgree() {
this.linkByParameter.comment = this.dialogList.comment
req.complete(this.linkByParameter).then((response) => {
if (response.success) {
this.$notify({
title: '提示',
message: '执行成功',
type: 'success',
duration: 2000
})
this.nodeDialogVisible = false
//
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 1
}
}, '*')
}
})
},
/** 驳回任务 */
handleReject() {
this.linkByParameter.comment = this.dialogList.comment
req.reject(this.linkByParameter).then((response) => {
if (response.success) {
this.$notify({
title: '提示',
message: '执行成功',
type: 'success',
duration: 2000
})
this.nodeDialogVisible = false
//
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 1
}
}, '*')
}
})
},
/** 终止任务 */
handleStop() {
this.linkByParameter.comment = this.dialogList.comment
req.breakProcess(this.linkByParameter).then((response) => {
if (response.success) {
this.$notify({
title: '提示',
message: '执行成功',
type: 'success',
duration: 2000
})
this.nodeDialogVisible = false
//
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 1
}
}, '*')
}
})
}
}
}
</script>
<style scoped>
.span-sty {
width: 130px !important;
}
.addinputInfo {
margin-left: 120px !important;
}
.rowClass{
border-top: 1px solid #E0E3EB;
}
</style>

335
yxt-as-ui/src/views/workFlow/fanjiesuanFlow/workslrsettlementEdit.vue

@ -0,0 +1,335 @@
<template>
<div class="app-container">
<div v-show="viewState == 1">
<div class="tab-header webtop">
<div>{{ viewTitle }}</div>
<div>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="saveOrUpdate()">保存</el-button>
<el-button type="primary" size="small" :disabled="submitdisabled" @click="submit()">提交</el-button>
</div>
</div>
<div class="">
<el-form ref="form_obj" :model="formobj" :rules="rules" class="formaddcopy02">
<el-row style="border-top: 1px solid #e0e3eb">
<el-col :span="8">
<div class="span-sty">申请人</div>
<el-form-item><span class="addinputInfo">{{ formobj.createByName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请部门</div>
<el-form-item><span class="addinputInfo">{{ formobj.dept }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请日期</div>
<el-form-item><span class="addinputInfo">{{ formobj.applyDate }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">反结算原因</div>
<el-form-item><el-input class="addinputInfo addinputw" v-model="formobj.reason" clearable placeholder="" /></el-form-item>
</el-col>
</el-row>
<div class="title">维修工单信息</div>
<el-row>
<el-col :span="8">
<div class="span-sty">工单编号</div>
<el-form-item><span class="addinputInfo">{{ formobj.sourceBillNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">单据日期</div>
<el-form-item><span class="addinputInfo">{{ formobj.sourceBillDate }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">服务顾问</div>
<el-form-item><span class="addinputInfo">{{ formobj.waitorName }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">工单类型</div>
<el-form-item><span class="addinputInfo">{{ formobj.billType }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">科目</div>
<el-form-item><span class="addinputInfo">{{ formobj.subject }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">结算时间</div>
<el-form-item><span class="addinputInfo">{{ formobj.settleDate }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">客户名称</div>
<el-form-item><span class="addinputInfo">{{ formobj.customerName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">联系电话</div>
<el-form-item><span class="addinputInfo">{{ formobj.mobile }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">车牌号/车架号</div>
<el-form-item><span class="addinputInfo">{{ formobj.vehMark }}/{{ formobj.vinNo }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">客户单位</div>
<el-form-item><span class="addinputInfo">{{ formobj.customerOrg }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">合计金额</div>
<el-form-item><span class="addinputInfo">{{ jeTotal }} = 工时费{{ gsfTotal }} + 材料费{{ clfTotal }} + 附加费{{ fjfTotal }} + 税额{{ seTotal }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">应收金额</div>
<el-form-item><span class="addinputInfo">{{ ysjeTotal }} = 合计金额{{ jeTotal }} - 优惠<span>{{ formobj.discountAmount }}</span> - 优惠券<span>{{ formobj.coupon }}</span> - 积分抵扣<span>{{ formobj.scoreDeduct }}</span></span></el-form-item>
</el-col>
</el-row>
<div class="title">服务项目</div>
<el-table :key="serviceKey" :data="formobj.sitemVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column prop="serviceItem" label="服务项目" align="center" width="200" />
<el-table-column prop="serviceType" label="工种" align="center" width="150" />
<el-table-column prop="subject" label="科目" align="center" width="150" />
<el-table-column prop="repairerName" label="维修人" align="center" width="200" />
<el-table-column prop="examineHourPrice" label="考核工时" align="center" width="100" />
<el-table-column prop="hourPrice" label="工时单价" align="center" width="150" />
<el-table-column prop="hours" label="工时数" align="center" width="100" />
<el-table-column prop="price" label="销售价" align="center" width="150" />
<el-table-column prop="discount" label="折扣" align="center" width="100" />
<el-table-column prop="discountAmount" label="优惠" align="center" width="150" />
<el-table-column prop="amount" label="销售金额" align="center" width="150" />
<el-table-column prop="remarks" label="备注" align="center" min-width="300" />
</el-table>
<div class="title">商品</div>
<el-table :key="tableKey" :data="formobj.goodsDetailsVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center" />
<el-table-column prop="goodsSpuName" label="商品名称" width="100" align="center" />
<el-table-column prop="goodsSkuCode" label="图号" width="100" align="center" />
<el-table-column prop="goodsSkuOwnSpec" label="规格" width="100" align="center" />
<el-table-column prop="unit" label="单位" width="100" align="center" />
<el-table-column prop="warehouseName" label="仓库" width="100" align="center" />
<el-table-column prop="warehouseRackCode" label="库位" width="100" align="center" />
<el-table-column prop="price" label="销售价" align="center" width="150" />
<el-table-column prop="count" label="数量" width="100" align="center" />
<el-table-column prop="discount" label="折扣" align="center" width="100" />
<el-table-column prop="discountAmount" label="优惠" width="100" align="center" />
<el-table-column prop="amount" label="金额" width="100" align="center" />
<el-table-column prop="remarks" label="备注" align="center" min-width="300" />
</el-table>
<div class="title">附加项目</div>
<el-table :key="subjoinKey" :data="formobj.aitemVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column prop="aitemName" label="附加项目" align="center" width="200" />
<el-table-column prop="price" label="销售价" align="center" width="150" />
<el-table-column prop="remarks" label="备注" align="center" min-width="200" />
</el-table>
</el-form>
</div>
</div>
</div>
</template>
<script>
import req from '@/api/operation/workslrsettlement'
export default {
name: 'WorkSLRSettlementEdit',
data() {
return {
viewTitle: '',
viewState: 1,
submitdisabled: false,
tableKey: 0,
index: 0,
// service
serviceKey: 1,
// subjoin
subjoinKey: 2,
formobj: {
sid: '',
createByName: '',
billNo: '',
billType: '',
subject: '',
waitorName: '',
customerName: '',
mobile: '',
customerOrg: '',
vehMark: '',
vinNo: '',
sitemVos: [],
aitemVos: [],
goodsDetailsVos: [],
orgPath: '',
deptSid: '',
dept: '',
useSid: '',
useOrgSid: '',
useOrgName: '',
reason: '',
applyDate: '',
sourceSid: '',
amount: '',
coupon: '',
scoreDeduct: '',
sourceBillDate: '',
settleDate: '',
taxRate: '',
taskId: '',
instanceId: ''
},
rules: {}
}
},
created() {
console.log('url:' + window.location.href)
var one = window.location.href.indexOf('&data') + 6
const data = window.location.href.substr(one) // urlunescape()web,使
const obj = JSON.parse(decodeURIComponent(data))
this.showInfo(obj.businessSid)
},
mounted() {
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 2,
data: 500 + 'px'
}
}, '*')
},
computed: {
// =
gsfTotal() {
let gsf = '0'
if (this.formobj.sitemVos.length > 0) {
this.formobj.sitemVos.forEach((e) => {
if (e.serviceItem !== '') {
gsf = Math.round((parseFloat(gsf) + parseFloat(e.price !== '' ? e.price : '0')) * 100) / 100
}
})
}
return gsf
},
// =
clfTotal() {
let clf = '0'
if (this.formobj.goodsDetailsVos.length > 0) {
this.formobj.goodsDetailsVos.forEach((e) => {
if (e.goodsSpuName !== '') {
clf = Math.round((parseFloat(clf) + parseFloat(e.price !== '' ? e.price : '0')) * 100) / 100
}
})
}
return clf
},
// ==
fjfTotal() {
let fjf = '0'
if (this.formobj.aitemVos.length > 0) {
this.formobj.aitemVos.forEach((e) => {
if (e.aitemName !== '') {
fjf = Math.round((parseFloat(fjf) + parseFloat(e.price !== '' ? e.price : '0')) * 100) / 100
}
})
}
return fjf
},
// = *
seTotal() {
let se = '0'
se = Math.round((parseFloat(this.clfTotal) * parseFloat(this.formobj.taxRate !== '' ? this.formobj.taxRate : '0')) * 100) / 100
return se
},
// = + + +
jeTotal() {
let je = '0'
je = Math.round((parseFloat(je) + parseFloat(this.gsfTotal) + parseFloat(this.clfTotal) + parseFloat(this.fjfTotal) + parseFloat(this.seTotal)) * 100) / 100
return je
},
//
ysjeTotal() {
let ysje = '0'
ysje = Math.round((parseFloat(ysje) + parseFloat(this.jeTotal) - parseFloat(this.formobj.discountAmount !== '' ? this.formobj.discountAmount : '0') - parseFloat(this.formobj.coupon !== '' ? this.formobj.coupon : '0') - parseFloat(this.formobj.scoreDeduct !== '' ? this.formobj.scoreDeduct : '0')) * 100) / 100
return ysje
}
},
methods: {
showInfo(sid) {
this.viewTitle = '【编辑】工单反结算'
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
req.fetchBySid(sid).then((res) => {
if (res.success) {
this.formobj = res.data
}
})
},
saveOrUpdate() {
this.$refs['form_obj'].validate((valid) => {
if (valid) {
this.submitdisabled = true
req.saveOrUpdate(this.formobj).then((res) => {
if (res.success) {
this.$message({ showClose: true, type: 'success', message: '保存成功' })
// ()
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 1
}
}, '*')
} else {
this.submitdisabled = false
}
}).catch(() => {
this.submitdisabled = false
})
}
})
},
submit() {
this.$refs['form_obj'].validate((valid) => {
if (valid) {
this.submitdisabled = true
req.submit(this.formobj).then((res) => {
if (res.success) {
this.$message({ showClose: true, type: 'success', message: '提交成功' })
// ()
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 1
}
}, '*')
} else {
this.submitdisabled = false
}
}).catch(() => {
this.submitdisabled = false
})
}
})
}
}
}
</script>
<style scoped>
.span-sty {
width: 130px !important;
}
.addinputInfo {
margin-left: 120px !important;
}
</style>

348
yxt-as-ui/src/views/workFlow/fanjiesuanFlow/workslrsettlementYiBan.vue

@ -0,0 +1,348 @@
<template>
<div class="app-container">
<div v-show="viewState == 1">
<div class="tab-header webtop">
<div>{{ viewTitle }}</div>
<div>
<el-button type="danger" size="small" @click="openRevoke()">撤回</el-button>
</div>
</div>
<div class="">
<el-form ref="form_obj" :model="formobj" :rules="rules" class="formaddcopy02">
<el-row style="border-top: 1px solid #e0e3eb">
<el-col :span="8">
<div class="span-sty">申请人</div>
<el-form-item><span class="addinputInfo">{{ formobj.createByName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请部门</div>
<el-form-item><span class="addinputInfo">{{ formobj.dept }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">申请日期</div>
<el-form-item><span class="addinputInfo">{{ formobj.applyDate }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">反结算原因</div>
<el-form-item><span class="addinputInfo">{{ formobj.reason }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">维修工单信息</div>
<el-row>
<el-col :span="8">
<div class="span-sty">工单编号</div>
<el-form-item><span class="addinputInfo">{{ formobj.sourceBillNo }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">单据日期</div>
<el-form-item><span class="addinputInfo">{{ formobj.sourceBillDate }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">服务顾问</div>
<el-form-item><span class="addinputInfo">{{ formobj.waitorName }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">工单类型</div>
<el-form-item><span class="addinputInfo">{{ formobj.billType }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">科目</div>
<el-form-item><span class="addinputInfo">{{ formobj.subject }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">结算时间</div>
<el-form-item><span class="addinputInfo">{{ formobj.settleDate }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<div class="span-sty">客户名称</div>
<el-form-item><span class="addinputInfo">{{ formobj.customerName }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">联系电话</div>
<el-form-item><span class="addinputInfo">{{ formobj.mobile }}</span></el-form-item>
</el-col>
<el-col :span="8">
<div class="span-sty">车牌号/车架号</div>
<el-form-item><span class="addinputInfo">{{ formobj.vehMark }}/{{ formobj.vinNo }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">客户单位</div>
<el-form-item><span class="addinputInfo">{{ formobj.customerOrg }}</span></el-form-item>
</el-col>
</el-row>
<div class="title">服务项目</div>
<el-table :key="serviceKey" :data="formobj.sitemVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column prop="serviceItem" label="服务项目" align="center" width="200" />
<el-table-column prop="serviceType" label="工种" align="center" width="150" />
<el-table-column prop="subject" label="科目" align="center" width="150" />
<el-table-column prop="repairerName" label="维修人" width="100" align="center" />
<el-table-column prop="examineHourPrice" label="考核工时" align="center" width="100" />
<el-table-column prop="hourPrice" label="工时单价" align="center" width="150" />
<el-table-column prop="hours" label="工时数" align="center" width="100" />
<el-table-column prop="price" label="销售价" align="center" width="150" />
<el-table-column prop="discount" label="折扣" align="center" width="100" />
<el-table-column prop="discountAmount" label="优惠" align="center" width="150" />
<el-table-column prop="amount" label="销售金额" align="center" width="150" />
<el-table-column prop="remarks" label="备注" align="center" min-width="300" />
</el-table>
<div class="title">商品</div>
<el-table :key="tableKey" :data="formobj.goodsDetailsVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center" />
<el-table-column prop="goodsSpuName" label="商品名称" width="100" align="center" />
<el-table-column prop="goodsSkuCode" label="图号" width="100" align="center" />
<el-table-column prop="goodsSkuOwnSpec" label="规格" width="100" align="center" />
<el-table-column prop="unit" label="单位" width="100" align="center" />
<el-table-column prop="warehouseName" label="仓库" width="100" align="center" />
<el-table-column prop="warehouseRackCode" label="库位" width="100" align="center" />
<el-table-column prop="price" label="销售价" align="center" width="150" />
<el-table-column prop="count" label="数量" width="100" align="center" />
<el-table-column prop="discount" label="折扣" align="center" width="100" />
<el-table-column prop="discountAmount" label="优惠" width="100" align="center" />
<el-table-column prop="amount" label="金额" width="100" align="center" />
<el-table-column prop="remarks" label="备注" align="center" min-width="300" />
</el-table>
<div class="title">附加项目</div>
<el-table :key="subjoinKey" :data="formobj.aitemVos" :index="index" border style="width: 100%">
<el-table-column fixed width="60" label="序号" type="index" :index="index + 1" align="center"/>
<el-table-column prop="aitemName" label="附加项目" align="center" width="200" />
<el-table-column prop="price" label="销售价" align="center" width="150" />
<el-table-column prop="remarks" label="备注" align="center" min-width="200" />
</el-table>
<el-row>
<el-col :span="24">
<div class="span-sty">合计金额</div>
<el-form-item><span class="addinputInfo">{{ jeTotal }} = 工时费{{ gsfTotal }} + 材料费{{ clfTotal }} + 附加费{{ fjfTotal }} + 税额{{ seTotal }}</span></el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<div class="span-sty">应收金额</div>
<el-form-item><span class="addinputInfo">{{ ysjeTotal }} = 合计金额{{ jeTotal }} - 优惠<span>{{ formobj.discountAmount }}</span> - 优惠券<span>{{ formobj.coupon }}</span> - 积分抵扣<span>{{ formobj.scoreDeduct }}</span></span></el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
</div>
</template>
<script>
import req from '@/api/operation/workslrsettlement'
export default {
name: 'WorkSLRSettlementYiBan',
data() {
return {
viewTitle: '',
viewState: 1,
submitdisabled: false,
tableKey: 0,
index: 0,
// service
serviceKey: 1,
// subjoin
subjoinKey: 2,
formobj: {
sid: '',
createByName: '',
billNo: '',
billType: '',
subject: '',
waitorName: '',
customerName: '',
mobile: '',
customerOrg: '',
vehMark: '',
vinNo: '',
sitemVos: [],
aitemVos: [],
goodsDetailsVos: [],
orgPath: '',
deptSid: '',
dept: '',
useSid: '',
useOrgSid: '',
useOrgName: '',
reason: '',
applyDate: '',
sourceSid: '',
amount: '',
coupon: '',
scoreDeduct: '',
sourceBillDate: '',
settleDate: '',
taxRate: '',
taskId: '',
instanceId: ''
},
rules: {},
//
linkByParameter: {
businessSid: '',
comment: '',
instanceId: '',
taskId: '',
orgSidPath: '',
taskDefKey: '',
userSid: ''
}
}
},
created() {
console.log('url:' + window.location.href)
var one = window.location.href.indexOf('&data') + 6
const data = window.location.href.substr(one) // urlunescape()web,使
const obj = JSON.parse(decodeURIComponent(data))
console.log('iframe页面获取的obj:', obj)
//
this.linkByParameter.businessSid = obj.businessSid
this.linkByParameter.instanceId = obj.instanceId
this.linkByParameter.taskId = obj.taskId
this.linkByParameter.taskDefKey = obj.taskDefKey
this.linkByParameter.userSid = window.sessionStorage.getItem('userSid')
//
this.showInfo(obj.businessSid)
},
mounted() {
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 2,
data: 500 + 'px'
}
}, '*')
},
computed: {
// =
gsfTotal() {
let gsf = '0'
if (this.formobj.sitemVos.length > 0) {
this.formobj.sitemVos.forEach((e) => {
if (e.serviceItem !== '') {
gsf = Math.round((parseFloat(gsf) + parseFloat(e.price !== '' ? e.price : '0')) * 100) / 100
}
})
}
return gsf
},
// =
clfTotal() {
let clf = '0'
if (this.formobj.goodsDetailsVos.length > 0) {
this.formobj.goodsDetailsVos.forEach((e) => {
if (e.goodsSpuName !== '') {
clf = Math.round((parseFloat(clf) + parseFloat(e.price !== '' ? e.price : '0')) * 100) / 100
}
})
}
return clf
},
// ==
fjfTotal() {
let fjf = '0'
if (this.formobj.aitemVos.length > 0) {
this.formobj.aitemVos.forEach((e) => {
if (e.aitemName !== '') {
fjf = Math.round((parseFloat(fjf) + parseFloat(e.price !== '' ? e.price : '0')) * 100) / 100
}
})
}
return fjf
},
// = *
seTotal() {
let se = '0'
se = Math.round((parseFloat(this.clfTotal) * parseFloat(this.formobj.taxRate !== '' ? this.formobj.taxRate : '0')) * 100) / 100
return se
},
// = + + +
jeTotal() {
let je = '0'
je = Math.round((parseFloat(je) + parseFloat(this.gsfTotal) + parseFloat(this.clfTotal) + parseFloat(this.fjfTotal) + parseFloat(this.seTotal)) * 100) / 100
return je
},
//
ysjeTotal() {
let ysje = '0'
ysje = Math.round((parseFloat(ysje) + parseFloat(this.jeTotal) - parseFloat(this.formobj.discountAmount !== '' ? this.formobj.discountAmount : '0') - parseFloat(this.formobj.coupon !== '' ? this.formobj.coupon : '0') - parseFloat(this.formobj.scoreDeduct !== '' ? this.formobj.scoreDeduct : '0')) * 100) / 100
return ysje
}
},
methods: {
showInfo(sid) {
this.viewTitle = '工单反结算详情'
this.$nextTick(() => {
this.$refs['form_obj'].clearValidate()
})
req.fetchBySid(sid).then((res) => {
if (res.success) {
this.formobj = res.data
if (this.formobj.sitemVos.length > 0) {
this.formobj.sitemVos.forEach((e) => {
if (e.staffNameList.length > 0) {
e.repairerName = e.staffNameList.join(',')
}
})
}
}
})
},
/** 确认撤回任务 */
openRevoke() {
this.$confirm('是否确认执行撤回操作', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.handleRevoke()
}).catch(() => {
this.$message({
type: 'info',
message: '已取消撤回'
})
})
},
/** 撤回任务 */
handleRevoke() {
req.revokeProcess(this.linkByParameter).then((response) => {
if (response.success) {
this.$notify({
title: '提示',
message: '执行成功',
type: 'success',
duration: 2000
})
this.nodeDialogVisible = false
//
window.parent.postMessage({
cmd: 'returnHeight',
params: {
//
code: 1
}
}, '*')
}
})
}
}
}
</script>
<style scoped>
.span-sty {
width: 130px !important;
}
.addinputInfo {
margin-left: 120px !important;
}
</style>

69
yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusrepairbill/AsBusrepairBillService.java

@ -29,6 +29,8 @@ import com.yxt.anrui.as.biz.asbusrepairbillsitem.AsBusrepairBillSitemService;
import com.yxt.anrui.as.biz.asbusrepairbillsitemrepairer.AsBusrepairBillSitemRepairerService;
import com.yxt.anrui.as.biz.asbusrepairbillvech.AsBusrepairBillVechService;
import com.yxt.anrui.as.biz.asbusrepairinventorybilldetail.AsBusrepairInventorybillDetailService;
import com.yxt.anrui.as.feign.fin.finuncollectedreceivablesdetailed.FinUncollectedReceivablesDetailedDto;
import com.yxt.anrui.as.feign.fin.finuncollectedreceivablesdetailed.FinUncollectedReceivablesDetailedFeign;
import com.yxt.anrui.as.feign.fms.FmsReceivesettle;
import com.yxt.anrui.as.feign.fms.FmsReceivesettleDto;
import com.yxt.anrui.as.feign.fms.FmsReceivesettleFeign;
@ -37,6 +39,7 @@ import com.yxt.anrui.as.feign.portal.sysorganization.SysOrganizationFeign;
import com.yxt.anrui.as.feign.portal.sysorganization.SysOrganizationVo;
import com.yxt.anrui.as.feign.portal.sysstafforg.SysStaffOrgFeign;
import com.yxt.anrui.as.feign.portal.sysuser.SysUserFeign;
import com.yxt.anrui.as.feign.portal.sysuser.SysUserVo;
import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.PagerUtil;
import com.yxt.common.core.query.PagerQuery;
@ -89,7 +92,8 @@ public class AsBusrepairBillService extends MybatisBaseService<AsBusrepairBillMa
private AsBusrepairBillAitemService asBusrepairBillAitemService;
@Autowired
private AsBusrepairInventorybillDetailService asBusrepairInventorybillDetailService;
@Autowired
private FinUncollectedReceivablesDetailedFeign finUncollectedReceivablesDetailedFeign;
/**
* 维修领料获取派工单
*
@ -475,7 +479,7 @@ public class AsBusrepairBillService extends MybatisBaseService<AsBusrepairBillMa
SettleVo settleVo = new SettleVo(); //结算信息
BeanUtil.copyProperties(receivesettle, settleVo);
if (null != receivesettle.getSettleTime()) {
settleVo.setSettleTime(DateUtil.formatTime(receivesettle.getSettleTime()));
settleVo.setSettleTime(sdf.format(receivesettle.getSettleTime()));
}
vo.setSettleVo(settleVo);
}
@ -674,6 +678,9 @@ public class AsBusrepairBillService extends MybatisBaseService<AsBusrepairBillMa
AsBusrepairBill asBusrepairBill = fetchBySid(sid);
if (asBusrepairBill.getNodeCode() == 5) {
if (asBusrepairBill.getSubject().equals("保内")) {
if (asBusrepairBill.getOldIsInInventory() != 1) {
return rb.setMsg("请先完成旧件入库,再进行操作!");
}
asBusrepairBill.setNodeCode(6);
asBusrepairBill.setNodeName("出厂");
asBusrepairBill.setNodeTime(new DateTime());
@ -696,18 +703,23 @@ public class AsBusrepairBillService extends MybatisBaseService<AsBusrepairBillMa
String sid = dto.getSid();
AsBusrepairBill asBusrepairBill = fetchBySid(sid);
if (asBusrepairBill.getNodeCode() == 5) {
asBusrepairBill.setNodeCode(6);
asBusrepairBill.setNodeName("出厂");
asBusrepairBill.setNodeTime(new DateTime());
baseMapper.updateById(asBusrepairBill);
//新增工单环节信息
AsBusrepairBillNode billNode = new AsBusrepairBillNode();
billNode.setBillSid(sid);
billNode.setCreateByName(dto.getOperator());
billNode.setNodeName("出厂");
billNode.setCreateBySid(dto.getOperatorSid());
billNode.setNodeCode("6");
asBusrepairBillNodeService.insert(billNode);
if (asBusrepairBill.getSubject().equals("保内")) {
if (asBusrepairBill.getOldIsInInventory() != 1) {
return rb.setMsg("请先完成旧件入库,再进行操作!");
}
asBusrepairBill.setNodeCode(6);
asBusrepairBill.setNodeName("出厂");
asBusrepairBill.setNodeTime(new DateTime());
baseMapper.updateById(asBusrepairBill);
//新增工单环节信息
AsBusrepairBillNode billNode = new AsBusrepairBillNode();
billNode.setBillSid(sid);
billNode.setCreateByName(dto.getOperator());
billNode.setNodeName("出厂");
billNode.setCreateBySid(dto.getOperatorSid());
billNode.setNodeCode("6");
asBusrepairBillNodeService.insert(billNode);
}
SettleVo settleVo = dto.getSettleVo();
if (null != settleVo) {
FmsReceivesettleDto settleDto = new FmsReceivesettleDto();
@ -717,6 +729,35 @@ public class AsBusrepairBillService extends MybatisBaseService<AsBusrepairBillMa
settleDto.setSourceBillSid(dto.getSid());
settleDto.setSourceBillNo(asBusrepairBill.getBillNo());
fmsReceivesettleFeign.save(settleDto);
FinUncollectedReceivablesDetailedDto finUncollectedReceivablesDetailedDto = new FinUncollectedReceivablesDetailedDto();
finUncollectedReceivablesDetailedDto.setCreateByName(asBusrepairBill.getCreateByName());
finUncollectedReceivablesDetailedDto.setCreateBySid(asBusrepairBill.getCreateBySid());
finUncollectedReceivablesDetailedDto.setCustomerSid(asBusrepairBill.getCustomerSid());
finUncollectedReceivablesDetailedDto.setCustomerName(asBusrepairBill.getCustomerName());
AsBusrepairBillVech billVech = asBusrepairBillVechService.fetchByBillSid(asBusrepairBill.getSid());
if (null != billVech) {
if (StringUtils.isNotBlank(billVech.getVinNo())) {
finUncollectedReceivablesDetailedDto.setVIN(billVech.getVinNo());
}
}
finUncollectedReceivablesDetailedDto.setCustomerPhone(asBusrepairBill.getMobile());
finUncollectedReceivablesDetailedDto.setUseOrgSid(asBusrepairBill.getUseOrgSid());
finUncollectedReceivablesDetailedDto.setOrgSidPath(asBusrepairBill.getOrgSidPath());
finUncollectedReceivablesDetailedDto.setReceivablesName("工时费、材料费");
BigDecimal settleAmount = new BigDecimal("0");
BigDecimal otherSettleAmount = new BigDecimal("0");
if (StringUtils.isNotBlank(settleVo.getSettleAmount())) {
settleAmount = new BigDecimal(settleVo.getSettleAmount());
}
if (StringUtils.isNotBlank(settleVo.getOtherSettleAmount())) {
otherSettleAmount = new BigDecimal(settleVo.getOtherSettleAmount());
}
finUncollectedReceivablesDetailedDto.setCurrentReceivableMoney((settleAmount.add(otherSettleAmount)).toString());
finUncollectedReceivablesDetailedDto.setReveivableMoney((settleAmount.add(otherSettleAmount)).toString());
finUncollectedReceivablesDetailedDto.setUseOrgName(asBusrepairBill.getUseOrgName());
finUncollectedReceivablesDetailedDto.setKxState("01");
finUncollectedReceivablesDetailedFeign.saveOrUpdate(finUncollectedReceivablesDetailedDto);
}
}
return rb.success();

101
yxt-as/src/main/java/com/yxt/anrui/as/feign/fin/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedDto.java

@ -0,0 +1,101 @@
/*********************************************************
*********************************************************
******************** *******************
************* ************
******* _oo0oo_ *******
*** o8888888o ***
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/`---'\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||- \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' ___/-. / *
* ___'. .' /--.--\ `. .'___ *
* ."" '< `.___\_<|>_/___.' >' "". *
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
* \ \ `_. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/___.-`___.-'===== *
* `=---=' *
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
*********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
*********************************************************/
package com.yxt.anrui.as.feign.fin.finuncollectedreceivablesdetailed;
import com.yxt.common.core.dto.Dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* Project: anrui-fin(销售相关) <br/>
* File: FinUncollectedReceivablesDetailedDto.java <br/>
* Class: com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.FinUncollectedReceivablesDetailedDto <br/>
* Description: 应收未收款项明细表 数据传输对象. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2022-04-12 17:57:01 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@ApiModel(value = "应收未收款项明细表 数据传输对象", description = "应收未收款项明细表 数据传输对象")
@Data
public class FinUncollectedReceivablesDetailedDto implements Dto {
@ApiModelProperty("应收未收款项sid")
private String sid; // 应收未收款项sid
@ApiModelProperty("创建人接口")
private String createByName; // 创建人接口
@ApiModelProperty("创建人sid")
private String createBySid; // 创建人sid
@ApiModelProperty("合同sid")
private String contractSid; // 合同sid
@ApiModelProperty("合同编号")
private String contractNo; // 合同编号
@ApiModelProperty("客户sid")
private String customerSid; // 客户sid
@ApiModelProperty("客户名称")
private String customerName; // 客户名称
@ApiModelProperty("车架号")
private String VIN; // 车架号
@ApiModelProperty("分公司sid")
private String useOrgSid; // 分公司sid
@ApiModelProperty("联系电话")
private String customerPhone; // 联系电话
@ApiModelProperty("应收项目名称")
private String receivablesName; // 应收项目名称
@ApiModelProperty("当前应收金额")
private String currentReceivableMoney; // 当前应收金额
@ApiModelProperty("应收金额(不变)")
private String reveivableMoney;
private String busVinSid;
@ApiModelProperty("付款方式")
private String payTypeKey;
private String payType;
@ApiModelProperty("应收款项状态")
private String kxState;
@ApiModelProperty("分公司")
private String useOrgName;
@ApiModelProperty("申请人组织路径")
private String orgSidPath;
@ApiModelProperty("采购系统sid")
private String purchaseSystemSid;
@ApiModelProperty("采购系统名称")
private String purchaseSystemName;
@ApiModelProperty("销售专员")
private String staffName;
@ApiModelProperty("销售专员用户sid")
private String staffUserSid;
@ApiModelProperty("销售专员部门")
private String staffDeptName;
@ApiModelProperty("销售专员部门sid")
private String staffDeptSid;
}

64
yxt-as/src/main/java/com/yxt/anrui/as/feign/fin/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedFeign.java

@ -0,0 +1,64 @@
/*********************************************************
*********************************************************
******************** *******************
************* ************
******* _oo0oo_ *******
*** o8888888o ***
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/`---'\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||- \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' ___/-. / *
* ___'. .' /--.--\ `. .'___ *
* ."" '< `.___\_<|>_/___.' >' "". *
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
* \ \ `_. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/___.-`___.-'===== *
* `=---=' *
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
*********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
*********************************************************/
package com.yxt.anrui.as.feign.fin.finuncollectedreceivablesdetailed;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* Project: anrui-fin(应收未收款项明细表) <br/>
* File: FinUncollectedReceivablesDetailedFeign.java <br/>
* Class: com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.FinUncollectedReceivablesDetailedFeign <br/>
* Description: 应收未收款项明细表. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2022-04-12 17:57:01 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Api(tags = "应收未收款项明细表")
@FeignClient(
contextId = "anrui-fin-FinUncollectedReceivablesDetailed",
name = "anrui-fin",
path = "finuncollectedreceivablesdetailed",
fallback = FinUncollectedReceivablesDetailedFeignFallback.class)
public interface FinUncollectedReceivablesDetailedFeign {
@ApiOperation("新增或修改保存")
@PostMapping("/saveOrUpdate")
public ResultBean saveOrUpdate(@RequestBody FinUncollectedReceivablesDetailedDto dto);
}

60
yxt-as/src/main/java/com/yxt/anrui/as/feign/fin/finuncollectedreceivablesdetailed/FinUncollectedReceivablesDetailedFeignFallback.java

@ -0,0 +1,60 @@
/*********************************************************
*********************************************************
******************** *******************
************* ************
******* _oo0oo_ *******
*** o8888888o ***
* 88" . "88 *
* (| -_- |) *
* 0\ = /0 *
* ___/`---'\___ *
* .' \\| |// '. *
* / \\||| : |||// \ *
* / _||||| -:- |||||- \ *
* | | \\\ - /// | | *
* | \_| ''\---/'' |_/ | *
* \ .-\__ '-' ___/-. / *
* ___'. .' /--.--\ `. .'___ *
* ."" '< `.___\_<|>_/___.' >' "". *
* | | : `- \`.;`\ _ /`;.`/ - ` : | | *
* \ \ `_. \_ __\ /__ _/ .-` / / *
* =====`-.____`.___ \_____/___.-`___.-'===== *
* `=---=' *
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
*********__佛祖保佑__永无BUG__验收通过__钞票多多__*********
*********************************************************/
package com.yxt.anrui.as.feign.fin.finuncollectedreceivablesdetailed;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* Project: anrui-fin(销售相关) <br/>
* File: FinUncollectedReceivablesDetailedFeignFallback.java <br/>
* Class: com.yxt.anrui.fin.api.finuncollectedreceivablesdetailed.FinUncollectedReceivablesDetailedFeignFallback <br/>
* Description: 应收未收款项明细表. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2022-04-12 17:57:01 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Component
public class FinUncollectedReceivablesDetailedFeignFallback implements FinUncollectedReceivablesDetailedFeign {
@Override
public ResultBean saveOrUpdate(FinUncollectedReceivablesDetailedDto dto){
return ResultBean.fireFail().setMsg("接口anrui-fin/finuncollectedreceivablesdetailed/saveOrUpdate无法访问");
}
}

30
yxt-base-biz/src/main/java/com/yxt/base/apiadmin/base/BaseGoodsSpuRest.java

@ -1,9 +1,6 @@
package com.yxt.base.apiadmin.base;
import com.yxt.base.biz.base.basegoodsspu.BaseGoodsSpuDto;
import com.yxt.base.biz.base.basegoodsspu.BaseGoodsSpuQuery;
import com.yxt.base.biz.base.basegoodsspu.BaseGoodsSpuService;
import com.yxt.base.biz.base.basegoodsspu.BaseGoodsSpuVo;
import com.yxt.base.biz.base.basegoodsspu.*;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
@ -23,6 +20,31 @@ public class BaseGoodsSpuRest {
@Autowired
BaseGoodsSpuService baseGoodsSpuService;
@ApiOperation("商品管理分页列表")
@PostMapping("/goodsListPage")
public ResultBean<PagerVo<BaseGoodsSpuListVo>> goodsListPage(@RequestBody PagerQuery<BaseGoodsSpuListQuery> pq) {
return baseGoodsSpuService.goodsListPage(pq);
}
@ApiOperation("保存修改商品信息")
@PostMapping("/saveOrUpdateGoods")
public ResultBean<String> saveOrUpdateGoods(@RequestBody BaseGoodsDetailsDto dto) {
return baseGoodsSpuService.saveOrUpdateGoods(dto);
}
@ApiOperation("商品信息详情回显")
@GetMapping("/goodsDetails/{sid}")
public ResultBean<BaseGoodsDetailsVo> goodsDetails(@PathVariable("sid") String sid) {
return baseGoodsSpuService.goodsDetails(sid);
}
@ApiOperation("根据sid批量删除")
@DeleteMapping("/delGoodsBySids")
public ResultBean delBySids(@RequestBody String[] sids) {
return baseGoodsSpuService.deleteBySids(sids);
}
@ApiOperation("分页列表")
@PostMapping("/listPage")
public ResultBean<PagerVo<BaseGoodsSpuVo>> listPage(@RequestBody PagerQuery<BaseGoodsSpuQuery> pq) {

4
yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodssku/BaseGoodsSkuService.java

@ -48,6 +48,10 @@ public class BaseGoodsSkuService extends MybatisBaseService<BaseGoodsSkuMapper,
@Autowired
private WmsInventoryFeign wmsInventoryFeign;
public BaseGoodsSku getOneBySpuSid(String spuSid) {
return baseMapper.selectOne(new QueryWrapper<BaseGoodsSku>().eq("goodsSpuSid", spuSid));
}
public ResultBean<PagerVo<BaseGoodsSkuVo>> listPage(PagerQuery<BaseGoodsSkuQuery> pq) {
ResultBean rb = ResultBean.fireFail();
BaseGoodsSkuQuery query = pq.getParams();

5
yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsskuextend/BaseGoodsSkuExtendService.java

@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.base.biz.base.basegoodssku.BaseGoodsSku;
import com.yxt.common.base.config.component.FileUploadComponent;
import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.PagerUtil;
@ -41,6 +42,10 @@ public class BaseGoodsSkuExtendService extends MybatisBaseService<BaseGoodsSkuEx
@Autowired
BaseGoodsSpuDetailService baseGoodsSpuDetailService;
public BaseGoodsSkuExtend getOneBySKuSid(String skuSid) {
return baseMapper.selectOne(new QueryWrapper<BaseGoodsSkuExtend>().eq("goodsSkuSid", skuSid));
}
public ResultBean<PagerVo<BaseGoodsSkuExtendVo>> listPage(PagerQuery<BaseGoodsSkuExtendQuery> pq) {
ResultBean rb = ResultBean.fireFail();
BaseGoodsSkuExtendQuery query = pq.getParams();

47
yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsDetailsDto.java

@ -0,0 +1,47 @@
package com.yxt.base.biz.base.basegoodsspu;
import com.baomidou.mybatisplus.annotation.TableField;
import com.yxt.common.core.dto.Dto;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author Fan
* @description
* @date 2024/5/15 14:59
*/
@Data
public class BaseGoodsDetailsDto implements Dto {
private String sid;
private String userSid;
private String orgPath;
private String goodsName;//商品名称
private String goodsCode;//图号
private String goodsPY;//拼音缩写
private String barCode;//条形码
private String goodsUnitSid;//计量单位sid
private String goodsUnitName;//计量单位名称
private String goodsTypeSid;//商品分类sid
private String goodsTypeName;//商品分类sid
private String indexes;//规格
private String shelfLife;//保质期
private String brandSid;//品牌sid
private String brandName;//品牌
private String manufacturerSid;//厂家sid
private String manufacturerName;//厂家名称
private String isOriginalFactory;//是否原厂 1 是 2否
private String sortNo;//排序
private String skuRemarks;//备注
private String inventoryAlertUpperLimit;//库存上限
private String inventoryAlertLowerLimit;//库存下限
private String isLockingSalesPrice;//是否锁定销售价 1 是 2否
private String minimumSalesPrice;//销售底价
private String standardPurchasePrice;//三包价格
private String agencyPrice;//首保价格
private List<String> picPath = new ArrayList<>();//商品图片
}

46
yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsDetailsVo.java

@ -0,0 +1,46 @@
package com.yxt.base.biz.base.basegoodsspu;
import com.yxt.common.core.vo.Vo;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author Fan
* @description
* @date 2024/5/15 14:58
*/
@Data
public class BaseGoodsDetailsVo implements Vo {
private String sid;
private String userSid;
private String orgPath;
private String goodsName;//商品名称
private String goodsCode;//图号
private String goodsPY;//拼音缩写
private String barCode;//条形码
private String goodsUnitSid;//计量单位sid
private String goodsUnitName;//计量单位名称
private String goodsTypeSid;//商品分类sid
private String goodsTypeName;//商品分类sid
private String indexes;//规格
private String shelfLife;//保质期
private String brandSid;//品牌sid
private String brandName;//品牌
private String manufacturerSid;//厂家sid
private String manufacturerName;//厂家名称
private String isOriginalFactory;//是否原厂 1 是 2否
private String sortNo;//排序
private String skuRemarks;//备注
private String inventoryAlertUpperLimit;//库存上限
private String inventoryAlertLowerLimit;//库存下限
private String isLockingSalesPrice;//是否锁定销售价 1 是 2否
private String minimumSalesPrice;//销售底价
private String standardPurchasePrice;//三包价格
private String agencyPrice;//首保价格
private List<String> picPath = new ArrayList<>();//商品图片
}

4
yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpu.java

@ -12,7 +12,7 @@ public class BaseGoodsSpu extends BaseEntity {
private String goodsCode;//商品代码
private String barCode;//条形码
private String goodsName;//商品名称
private String subTitle;//商品名称
private String subTitle;//副标题
private String goodsPY;//拼音缩写
private String goodsShortName;//商品简称
private String goodsTypeSid;//商品分类sid
@ -30,4 +30,6 @@ public class BaseGoodsSpu extends BaseEntity {
private String isListed;//是否上架
private String useOrgSid;//使用组织sid
private String createOrgSid;//创建组织sid
private String useOrgName;//使用组织
private String createOrgName;//创建组织
}

24
yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuListQuery.java

@ -0,0 +1,24 @@
package com.yxt.base.biz.base.basegoodsspu;
import com.yxt.common.core.query.Query;
import lombok.Data;
/**
* @author Fan
* @description
* @date 2024/5/15 13:51
*/
@Data
public class BaseGoodsSpuListQuery implements Query {
private String orgPath; //组织全路径
private String useOrgName;//部门
private String createOrgName;//分公司
private String goodsName;//商品名称
private String goodsCode;//图号
private String goodsPY;//拼音缩写
private String goodsTypeName;//商品类别
private String brandName;//品牌
private String manufacturerName;//厂家
}

39
yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuListVo.java

@ -0,0 +1,39 @@
package com.yxt.base.biz.base.basegoodsspu;
import com.yxt.common.core.vo.Vo;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author Fan
* @description
* @date 2024/5/15 13:32
*/
@Data
public class BaseGoodsSpuListVo implements Vo {
private String sid; //spuSid
private String goodsName;//商品名称
private String goodsCode;//图号
private String goodsPY;//拼音缩写
private String barCode;//条形码
private String goodsUnitName;//计量单位
private String goodsTypeName;//商品类别
private String indexes;//规格
private String shelfLife;//保质期
private String brandName;//品牌
private String manufacturerName;//厂家
private String isOriginalFactory;//原厂标志( 1 是 2否)
private String InventoryAlertUpperLimit;//库存上限
private String InventoryAlertLowerLimit;//库存下限
private String isLockingSalesPrice;//锁定销售价( 1 是 2否)
private String minimumSalesPrice;//销售底价
private String standardPurchasePrice;//三包价格
private String agencyPrice;//首保价格
private String picUrl;
private List<String> picPath = new ArrayList<>();//商品图片
}

4
yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.java

@ -16,4 +16,8 @@ public interface BaseGoodsSpuMapper extends BaseMapper<BaseGoodsSpu> {
IPage<BaseGoodsSpuVo> listPage(IPage<BaseGoodsSpu> page, @Param(Constants.WRAPPER) QueryWrapper<BaseGoodsSpu> qw);
BaseGoodsSpuVo initialization(@Param("sid")String sid);
IPage<BaseGoodsSpuListVo> goodsListPage(IPage<BaseGoodsSpu> page,@Param(Constants.WRAPPER) QueryWrapper<BaseGoodsSpu> qw);
void delBySpuSid(@Param("sid") String sid);
}

62
yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuMapper.xml

@ -1,12 +1,23 @@
<?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.yxt.base.biz.base.basegoodsspu.BaseGoodsSpuMapper">
<delete id="delBySpuSid">
DELETE
p,pd,k,e
FROM
base_goods_spu AS p
LEFT JOIN base_goods_spu_detail AS pd ON p.sid = pd.goodSpuSid
LEFT JOIN base_goods_sku AS k ON p.sid = k.goodsSpuSid
LEFT JOIN base_goods_sku_extend AS e ON k.sid = e.goodsSkuSid
WHERE
p.sid = #{sid}
</delete>
<!-- <where> ${ew.sqlSegment} </where>-->
<!-- ${ew.customSqlSegment} -->
<select id="listPage" resultType="com.yxt.base.biz.base.basegoodsspu.BaseGoodsSpuVo">
select
s.*,a.goodsTypeName as typeName,b.brandName as brandName,c.manufacturerName as manufacturerName
s.*,a.goodsTypeName as typeName,b.brandName as brandName,c.manufacturerName as manufacturerName
from base_goods_spu s
left join base_goods_type a on a.sid=s.goodsTypeSid
left join base_brand_info b on b.sid=s.brandSid
@ -16,12 +27,47 @@
</where>
</select>
<select id="initialization" resultType="com.yxt.base.biz.base.basegoodsspu.BaseGoodsSpuVo">
select
s.*,a.goodsTypeName as typeName,b.brandName as brandName,c.manufacturerName as manufacturerName
select s.*,
a.goodsTypeName as typeName,
b.brandName as brandName,
c.manufacturerName as manufacturerName
from base_goods_spu s
left join base_goods_type a on a.sid=s.goodsTypeSid
left join base_brand_info b on b.sid=s.brandSid
left join base_manufacturer c on c.sid=s.manufacturerSid
where s.sid=#{sid}
left join base_goods_type a on a.sid = s.goodsTypeSid
left join base_brand_info b on b.sid = s.brandSid
left join base_manufacturer c on c.sid = s.manufacturerSid
where s.sid = #{sid}
</select>
<select id="goodsListPage" resultType="com.yxt.base.biz.base.basegoodsspu.BaseGoodsSpuListVo">
SELECT
p.sid,
p.goodsName,
p.goodsCode,
p.goodsPY,
p.barCode,
p.goodsUnitName,
t.goodsTypeName,
k.indexes,
p.shelfLife,
b.brandName,
m.manufacturerName,
ke.isOriginalFactory,
ke.InventoryAlertUpperLimit,
ke.InventoryAlertLowerLimit,
ke.isLockingSalesPrice,
ke.minimumSalesPrice,
ke.standardPurchasePrice,
ke.agencyPrice,
ke.picUrl
FROM
base_goods_spu AS p
LEFT JOIN base_goods_sku as k ON p.sid = k.goodsSpuSid
LEFT JOIN base_goods_sku_extend as ke ON k.sid = ke.goodsSkuSid
LEFT JOIN base_goods_type as t ON p.goodsTypeSid = t.sid
LEFT JOIN base_brand_info as b ON p.brandSid = b.sid
LEFT JOIN base_manufacturer as m ON p.manufacturerSid = m.sid
<where>
${ew.sqlSegment}
</where>
ORDER BY p.sortNo asc
</select>
</mapper>
</mapper>

364
yxt-base-biz/src/main/java/com/yxt/base/biz/base/basegoodsspu/BaseGoodsSpuService.java

@ -4,13 +4,18 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.base.biz.base.basegoodssku.BaseGoodsSku;
import com.yxt.base.biz.base.basegoodssku.BaseGoodsSkuVo;
import com.yxt.base.biz.base.basegoodsskuextend.BaseGoodsSkuExtend;
import com.yxt.base.biz.base.basegoodsskuextend.BaseGoodsSkuExtendService;
import com.yxt.base.biz.base.basegoodsskuextend.BaseGoodsSkuExtendVo;
import com.yxt.base.biz.base.basegoodsskuextend.UrlsVo;
import com.yxt.base.biz.base.basegoodsspudetail.BaseGoodsSpuDetailVo;
import com.yxt.base.biz.base.basegoodsunit.BaseGoodsUnit;
import com.yxt.base.biz.base.basegoodsunit.BaseGoodsUnitService;
import com.yxt.base.feign.portal.sysorganization.SysOrganizationFeign;
import com.yxt.base.feign.portal.sysorganization.SysOrganizationVo;
import com.yxt.base.feign.portal.sysstafforg.SysStaffOrgFeign;
import com.yxt.base.utils.PinYinUtils;
import com.yxt.common.base.config.component.FileUploadComponent;
import com.yxt.common.base.service.MybatisBaseService;
@ -32,10 +37,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
* @author wangpengfei
@ -53,14 +55,23 @@ public class BaseGoodsSpuService extends MybatisBaseService<BaseGoodsSpuMapper,
BaseGoodsUnitService baseGoodsUnitService;
@Autowired
BaseGoodsSkuExtendService baseGoodsSkuExtendService;
@Autowired
private SysStaffOrgFeign sysStaffOrgFeign;
@Autowired
private SysOrganizationFeign sysOrganizationFeign;
@Autowired
private BaseGoodsTypeService baseGoodsTypeService;
@Autowired
private BaseBrandInfoService baseBrandInfoService;
@Autowired
private BaseManufacturerService baseManufacturerService;
public ResultBean<PagerVo<BaseGoodsSpuVo>> listPage(PagerQuery<BaseGoodsSpuQuery> pq) {
ResultBean rb = ResultBean.fireFail();
BaseGoodsSpuQuery query = pq.getParams();
QueryWrapper<BaseGoodsSpu> qw = new QueryWrapper<>();
if(StringUtils.isNotBlank(query.getName())){
qw.like("goodsName",query.getName());
if (StringUtils.isNotBlank(query.getName())) {
qw.like("goodsName", query.getName());
}
IPage<BaseGoodsSpu> page = PagerUtil.queryToPage(pq);
IPage<BaseGoodsSpuVo> pagging = baseMapper.listPage(page, qw);
@ -76,18 +87,19 @@ public class BaseGoodsSpuService extends MybatisBaseService<BaseGoodsSpuMapper,
// }
return rb.success().setData(p);
}
@Transactional
public ResultBean<String> saveOrUpdate(BaseGoodsSpuDto dto) {
ResultBean rb = ResultBean.fireFail();
String sid = "";
BaseGoodsSpu spun= baseMapper.selectOne(new QueryWrapper<BaseGoodsSpu>().eq("sid",dto.getSid()));
BaseGoodsUnit baseGoodsUnit=baseGoodsUnitService.getOne(new QueryWrapper<BaseGoodsUnit>().eq("sid",dto.getGoodsUnitSid()));
if(null!=baseGoodsUnit){
BaseGoodsSpu spun = baseMapper.selectOne(new QueryWrapper<BaseGoodsSpu>().eq("sid", dto.getSid()));
BaseGoodsUnit baseGoodsUnit = baseGoodsUnitService.getOne(new QueryWrapper<BaseGoodsUnit>().eq("sid", dto.getGoodsUnitSid()));
if (null != baseGoodsUnit) {
dto.setGoodsUnitName(baseGoodsUnit.getUnitName());
}
if (spun!=null) {
if(!spun.getSid().equals(dto.getSid())){
if (spun != null) {
if (!spun.getSid().equals(dto.getSid())) {
return rb.setMsg("商品编码重复");
}
sid = dto.getSid();
@ -95,19 +107,20 @@ public class BaseGoodsSpuService extends MybatisBaseService<BaseGoodsSpuMapper,
BeanUtil.copyProperties(dto, wmsGoods);
wmsGoods.setModifyTime(new Date());
// wmsGoods.setGoodsPY(PinYinUtils.getPinYinName(wmsGoods.getGoodsName()));;
wmsGoods.setGoodsPY(PinYinUtils.sx(wmsGoods.getGoodsName()));;
wmsGoods.setGoodsPY(PinYinUtils.sx(wmsGoods.getGoodsName()));
;
baseMapper.updateById(wmsGoods);
//spu详情
dto.getBaseGoodsSpuDetail().setGoodSpuSid(wmsGoods.getSid());
baseGoodsSpuDetailService.saveOrUpdate(dto.getBaseGoodsSpuDetail());
//商品sku
dto.getBaseGoodsSkus().forEach(s->{
dto.getBaseGoodsSkus().forEach(s -> {
s.setGoodsSpuSid(wmsGoods.getSid());
});
baseGoodsSkuService.saveOrUpdate(dto.getBaseGoodsSkus());
} else {
BaseGoodsSpu spu=baseMapper.selectOne(new QueryWrapper<BaseGoodsSpu>().eq("goodsCode",dto.getGoodsCode()));
if(spu!=null){
BaseGoodsSpu spu = baseMapper.selectOne(new QueryWrapper<BaseGoodsSpu>().eq("goodsCode", dto.getGoodsCode()));
if (spu != null) {
return rb.setMsg("商品编码重复");
}
BaseGoodsSpu wmsGoods = new BaseGoodsSpu();
@ -120,7 +133,7 @@ public class BaseGoodsSpuService extends MybatisBaseService<BaseGoodsSpuMapper,
dto.getBaseGoodsSpuDetail().setGoodSpuSid(wmsGoods.getSid());
baseGoodsSpuDetailService.saveOrUpdate(dto.getBaseGoodsSpuDetail());
//商品sku
dto.getBaseGoodsSkus().forEach(s->{
dto.getBaseGoodsSkus().forEach(s -> {
s.setGoodsSpuSid(wmsGoods.getSid());
});
baseGoodsSkuService.saveOrUpdate(dto.getBaseGoodsSkus());
@ -132,16 +145,17 @@ public class BaseGoodsSpuService extends MybatisBaseService<BaseGoodsSpuMapper,
public ResultBean<BaseGoodsSpuVo> initialization(String sid) {
ResultBean rb = ResultBean.fireFail();
BaseGoodsSpuVo vo = baseMapper.initialization(sid);
BaseGoodsSpuDetailVo vo1=baseGoodsSpuDetailService.getSpuDetailsBySpuSid(vo.getSid()).getData();
BaseGoodsSpuDetailVo vo1 = baseGoodsSpuDetailService.getSpuDetailsBySpuSid(vo.getSid()).getData();
vo.setBaseGoodsSpuDetail(vo1);
List<BaseGoodsSkuVo> vos=baseGoodsSkuService.getSkusBySpuSid(vo.getSid()).getData();
List<BaseGoodsSkuVo> vos = baseGoodsSkuService.getSkusBySpuSid(vo.getSid()).getData();
for (BaseGoodsSkuVo baseGoodsSkuVo : vos) {
List<UrlsVo> ur=new ArrayList<>();
BaseGoodsSkuExtendVo vo2=baseGoodsSkuExtendService.getExtendBySkuSid(baseGoodsSkuVo.getSid()).getData();
if(StringUtils.isNotBlank(vo2.getPicUrl())){
List<UrlsVo> ur = new ArrayList<>();
BaseGoodsSkuExtendVo vo2 = baseGoodsSkuExtendService.getExtendBySkuSid(baseGoodsSkuVo.getSid()).getData();
if (StringUtils.isNotBlank(vo2.getPicUrl())) {
for (String url : vo2.getPicUrl().split(",")) {
url=fileUploadComponent.getUrlPrefix()+url;
UrlsVo vo3=new UrlsVo();vo3.setUrl(url);
url = fileUploadComponent.getUrlPrefix() + url;
UrlsVo vo3 = new UrlsVo();
vo3.setUrl(url);
ur.add(vo3);
}
}
@ -153,7 +167,6 @@ public class BaseGoodsSpuService extends MybatisBaseService<BaseGoodsSpuMapper,
}
public ResultBean delete(String sid) {
ResultBean rb = ResultBean.fireFail();
BaseGoodsSpu wmsGoods = fetchBySid(sid);
@ -163,7 +176,7 @@ public class BaseGoodsSpuService extends MybatisBaseService<BaseGoodsSpuMapper,
return rb.success();
}
public ResultBean updateIsEnable(String sid,String isEnable) {
public ResultBean updateIsEnable(String sid, String isEnable) {
ResultBean rb = ResultBean.fireFail();
BaseGoodsSpu wmsGoods = fetchBySid(sid);
if (null != wmsGoods) {
@ -172,4 +185,303 @@ public class BaseGoodsSpuService extends MybatisBaseService<BaseGoodsSpuMapper,
}
return rb.success().setMsg("成功");
}
public ResultBean<PagerVo<BaseGoodsSpuListVo>> goodsListPage(PagerQuery<BaseGoodsSpuListQuery> pq) {
ResultBean rb = ResultBean.fireFail();
BaseGoodsSpuListQuery query = pq.getParams();
QueryWrapper<BaseGoodsSpu> qw = new QueryWrapper<>();
if (StringUtils.isNotBlank(query.getOrgPath())) {
String createOrgSid = sysStaffOrgFeign.getOrgSidByPath(query.getOrgPath()).getData();
qw.eq("p.createOrgSid", createOrgSid);
}
if (StringUtils.isNotBlank(query.getGoodsPY())) {
qw.like("p.goodsPY", query.getGoodsPY());
}
if (StringUtils.isNotBlank(query.getCreateOrgName())) {
qw.like("p.createOrgName", query.getCreateOrgName());
}
if (StringUtils.isNotBlank(query.getUseOrgName())) {
qw.like("p.useOrgName", query.getUseOrgName());
}
if (StringUtils.isNotBlank(query.getGoodsName())) {
qw.like("p.goodsName", query.getGoodsName());
}
if (StringUtils.isNotBlank(query.getGoodsCode())) {
qw.like("p.goodsCode", query.getGoodsCode());
}
if (StringUtils.isNotBlank(query.getGoodsTypeName())) {
qw.like("t.goodsTypeName", query.getGoodsTypeName());
}
if (StringUtils.isNotBlank(query.getBrandName())) {
qw.like("b.brandName", query.getBrandName());
}
if (StringUtils.isNotBlank(query.getManufacturerName())) {
qw.like("m.manufacturerName", query.getManufacturerName());
}
IPage<BaseGoodsSpu> page = PagerUtil.queryToPage(pq);
IPage<BaseGoodsSpuListVo> pagging = baseMapper.goodsListPage(page, qw);
PagerVo<BaseGoodsSpuListVo> p = PagerUtil.pageToVo(pagging, null);
List<BaseGoodsSpuListVo> records = pagging.getRecords();
records.removeAll(Collections.singleton(null));
if (!records.isEmpty()) {
String urlPrefix = fileUploadComponent.getUrlPrefix();
for (BaseGoodsSpuListVo record : records) {
if (StringUtils.isNotBlank(record.getPicUrl())) {
List<String> files = new ArrayList<>();
String picUrl = record.getPicUrl();
String[] split = picUrl.split(",");
for (String s : split) {
files.add(urlPrefix + s);
}
record.setPicPath(files);
}
}
}
return rb.success().setData(p);
}
@Transactional
public ResultBean<String> saveOrUpdateGoods(BaseGoodsDetailsDto dto) {
ResultBean rb = ResultBean.fireFail();
String sid = "";
String orgPath = "";
if (StringUtils.isNotBlank(dto.getOrgPath())) {
orgPath = dto.getOrgPath();
}
BaseGoodsSpu spun = baseMapper.selectOne(new QueryWrapper<BaseGoodsSpu>().eq("sid", dto.getSid()));
if (spun != null) {
if (!spun.getSid().equals(dto.getSid())) {
return rb.setMsg("商品编码重复");
}
sid = dto.getSid();
BaseGoodsSpu wmsGoods = fetchBySid(dto.getSid());
BeanUtil.copyProperties(dto, wmsGoods, "id", "sid");
wmsGoods.setModifyTime(new Date());
wmsGoods.setGoodsPY(PinYinUtils.sx(wmsGoods.getGoodsName()));
baseMapper.updateById(wmsGoods);
//商品sku
BaseGoodsSku skuUpdate = baseGoodsSkuService.getOneBySpuSid(sid);
if (null != skuUpdate) {
if (StringUtils.isNotBlank(dto.getGoodsName())) {
skuUpdate.setTitle(dto.getGoodsName());
}
if (StringUtils.isNotBlank(dto.getGoodsCode())) {
skuUpdate.setGoodsSkuCode(dto.getGoodsCode());
}
if (StringUtils.isNotBlank(dto.getIndexes())) {
skuUpdate.setIndexes(dto.getIndexes());
}
skuUpdate.setModifyTime(new Date());
baseGoodsSkuService.updateById(skuUpdate);
BaseGoodsSkuExtend skuExtendUpdate = baseGoodsSkuExtendService.getOneBySKuSid(skuUpdate.getSid());
if (null != skuExtendUpdate) {
BeanUtil.copyProperties(dto, skuExtendUpdate, "id", "sid");
if (StringUtils.isNotBlank(dto.getSkuRemarks())) {
skuExtendUpdate.setRemarks(dto.getSkuRemarks());
}
List<String> picPath = dto.getPicPath();
if (!picPath.isEmpty()) {
StringBuilder sb = new StringBuilder();
String urlPrefix = fileUploadComponent.getUrlPrefix();
for (String filePath : picPath) {
String path = filePath.substring(urlPrefix.length());
sb.append(path).append(",");
}
sb.delete(sb.length() - 1, sb.length());
skuExtendUpdate.setPicUrl(sb.toString());
}
baseGoodsSkuExtendService.updateById(skuExtendUpdate);
} else {
BaseGoodsSkuExtend skuExtend = new BaseGoodsSkuExtend();
BeanUtil.copyProperties(dto, skuExtend, "id", "sid");
skuExtend.setGoodsSkuSid(skuUpdate.getSid());
if (StringUtils.isNotBlank(dto.getSkuRemarks())) {
skuExtend.setRemarks(dto.getSkuRemarks());
}
List<String> picPath = dto.getPicPath();
if (!picPath.isEmpty()) {
StringBuilder sb = new StringBuilder();
String urlPrefix = fileUploadComponent.getUrlPrefix();
for (String filePath : picPath) {
String path = filePath.substring(urlPrefix.length());
sb.append(path).append(",");
}
sb.delete(sb.length() - 1, sb.length());
skuExtend.setPicUrl(sb.toString());
}
baseGoodsSkuExtendService.insert(skuExtend);
}
} else {
//商品sku
BaseGoodsSku sku = new BaseGoodsSku();
sku.setGoodsSpuSid(sid);
if (StringUtils.isNotBlank(dto.getGoodsName())) {
sku.setTitle(dto.getGoodsName());
}
if (StringUtils.isNotBlank(dto.getGoodsCode())) {
sku.setGoodsSkuCode(dto.getGoodsCode());
}
if (StringUtils.isNotBlank(dto.getIndexes())) {
sku.setIndexes(dto.getIndexes());
}
baseGoodsSkuService.insert(sku);
//商品sku_extend
BaseGoodsSkuExtend skuExtend = new BaseGoodsSkuExtend();
BeanUtil.copyProperties(dto, skuExtend, "id", "sid");
skuExtend.setGoodsSkuSid(sku.getSid());
if (StringUtils.isNotBlank(dto.getSkuRemarks())) {
skuExtend.setRemarks(dto.getSkuRemarks());
}
List<String> picPath = dto.getPicPath();
if (!picPath.isEmpty()) {
StringBuilder sb = new StringBuilder();
String urlPrefix = fileUploadComponent.getUrlPrefix();
for (String filePath : picPath) {
String path = filePath.substring(urlPrefix.length());
sb.append(path).append(",");
}
sb.delete(sb.length() - 1, sb.length());
skuExtend.setPicUrl(sb.toString());
}
baseGoodsSkuExtendService.insert(skuExtend);
}
} else {
BaseGoodsSpu spu = baseMapper.selectOne(new QueryWrapper<BaseGoodsSpu>().eq("goodsCode", dto.getGoodsCode()));
if (spu != null) {
return rb.setMsg("商品编码重复");
}
BaseGoodsSpu wmsGoods = new BaseGoodsSpu();
sid = wmsGoods.getSid();
BeanUtil.copyProperties(dto, wmsGoods, "id", "sid");
wmsGoods.setCreateBySid(dto.getUserSid());
String deptName = "";
String deptSid = "";
String createOrgSid = "";
if (StringUtils.isNotBlank(orgPath)) {
List<String> split = Arrays.asList(orgPath.split("/"));
if (split.size() > 1) {
//获取本级sid获取本级部门信息
SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(split.get(split.size() - 2)).getData();
SysOrganizationVo sysOrganization1 = sysOrganizationFeign.fetchBySid(split.get(split.size() - 1)).getData();
deptName = sysOrganization.getName() + "/" + sysOrganization1.getName();
deptName = sysOrganization1.getName();
deptSid = sysOrganization1.getSid();
} else {
SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(split.get(0)).getData();
deptName = sysOrganization.getName();
deptName = sysOrganization.getName();
deptSid = sysOrganization.getSid();
}
wmsGoods.setUseOrgName(deptName);
wmsGoods.setUseOrgSid(deptSid);
createOrgSid = sysStaffOrgFeign.getOrgSidByPath(orgPath).getData();
//创建组织使用组织
ResultBean<SysOrganizationVo> organizationResultBean = sysOrganizationFeign.fetchBySid(createOrgSid);
if (organizationResultBean.getData() != null) {
wmsGoods.setCreateOrgName(organizationResultBean.getData().getName());
wmsGoods.setCreateOrgSid(createOrgSid);
}
}
wmsGoods.setGoodsPY(PinYinUtils.sx(wmsGoods.getGoodsName()));
baseMapper.insert(wmsGoods);
//商品sku
BaseGoodsSku sku = new BaseGoodsSku();
sku.setGoodsSpuSid(sid);
if (StringUtils.isNotBlank(dto.getGoodsName())) {
sku.setTitle(dto.getGoodsName());
}
if (StringUtils.isNotBlank(dto.getGoodsCode())) {
sku.setGoodsSkuCode(dto.getGoodsCode());
}
if (StringUtils.isNotBlank(dto.getIndexes())) {
sku.setIndexes(dto.getIndexes());
}
baseGoodsSkuService.insert(sku);
//商品sku_extend
BaseGoodsSkuExtend skuExtend = new BaseGoodsSkuExtend();
BeanUtil.copyProperties(dto, skuExtend, "id", "sid");
skuExtend.setGoodsSkuSid(sku.getSid());
if (StringUtils.isNotBlank(dto.getSkuRemarks())) {
skuExtend.setRemarks(dto.getSkuRemarks());
}
List<String> picPath = dto.getPicPath();
if (!picPath.isEmpty()) {
StringBuilder sb = new StringBuilder();
String urlPrefix = fileUploadComponent.getUrlPrefix();
for (String filePath : picPath) {
String path = filePath.substring(urlPrefix.length());
sb.append(path).append(",");
}
sb.delete(sb.length() - 1, sb.length());
skuExtend.setPicUrl(sb.toString());
}
baseGoodsSkuExtendService.insert(skuExtend);
}
return rb.success().setData(sid);
}
public ResultBean<BaseGoodsDetailsVo> goodsDetails(String sid) {
ResultBean rb = ResultBean.fireFail();
BaseGoodsDetailsVo vo = new BaseGoodsDetailsVo();
BaseGoodsSpu baseGoodsSpu = fetchBySid(sid);
if (null != baseGoodsSpu) {
BeanUtil.copyProperties(baseGoodsSpu, vo);
if (StringUtils.isNotBlank(baseGoodsSpu.getGoodsTypeSid())) {
BaseGoodsType baseGoodsType = baseGoodsTypeService.fetchBySid(baseGoodsSpu.getGoodsTypeSid());
if (null != baseGoodsType) {
if (StringUtils.isNotBlank(baseGoodsType.getGoodsTypeName())) {
vo.setGoodsTypeName(baseGoodsType.getGoodsTypeName());
}
}
}
if (StringUtils.isNotBlank(baseGoodsSpu.getBrandSid())) {
BaseBrandInfo baseBrandInfo = baseBrandInfoService.fetchBySid(baseGoodsSpu.getBrandSid());
if (null != baseBrandInfo) {
if (StringUtils.isNotBlank(baseBrandInfo.getBrandName())) {
vo.setBrandName(baseBrandInfo.getBrandName());
}
}
}
if (StringUtils.isNotBlank(baseGoodsSpu.getManufacturerSid())) {
BaseManufacturer manufacturer = baseManufacturerService.fetchBySid(baseGoodsSpu.getManufacturerSid());
if (null != manufacturer) {
if (StringUtils.isNotBlank(manufacturer.getManufacturerName())) {
vo.setManufacturerName(manufacturer.getManufacturerName());
}
}
}
}
BaseGoodsSku sku = baseGoodsSkuService.getOneBySpuSid(sid);
if (null != sku) {
if (StringUtils.isNotBlank(sku.getIndexes())) {
vo.setIndexes(sku.getIndexes());
}
BaseGoodsSkuExtend skuExtend = baseGoodsSkuExtendService.getOneBySKuSid(sku.getSid());
if (null != skuExtend) {
BeanUtil.copyProperties(skuExtend, vo, "sid");
if (StringUtils.isNotBlank(skuExtend.getRemarks())) {
vo.setSkuRemarks(skuExtend.getRemarks());
}
String urlPrefix = fileUploadComponent.getUrlPrefix();
if (StringUtils.isNotBlank(skuExtend.getPicUrl())) {
List<String> files = new ArrayList<>();
String picUrl = skuExtend.getPicUrl();
String[] split = picUrl.split(",");
for (String s : split) {
files.add(urlPrefix + s);
}
vo.setPicPath(files);
}
}
}
return rb.success().setData(vo);
}
public ResultBean deleteBySids(String[] sids) {
ResultBean rb = ResultBean.fireFail();
for (String sid : sids) {
baseMapper.delBySpuSid(sid);
}
return rb.success();
}
}

1
yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsreceiptbill/WmsReceiptBillDto2.java

@ -43,6 +43,7 @@ public class WmsReceiptBillDto2 {
//单据状态:新建/已完成
@ApiModelProperty("单据状态:待收货/部分收货/已收货(默认)")
private String billState;
private String billStateKey;
@ApiModelProperty("备注")
private String remarks;
@ApiModelProperty("使用组织sid")

10
yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsreceiptbill/WmsReceiptBillService.java

@ -120,6 +120,11 @@ public class WmsReceiptBillService extends MybatisBaseService<WmsReceiptBillMapp
if (!list.isEmpty()) {
wmsReceiptBillDetailService.saveOrUpdateDetailsList2(sid, list, pcList);
}
if("0".equals(dto.getBillStateKey())){
wmsReceiptBill.setBillState("0");
}else{
wmsReceiptBill.setBillState("1");
}
baseMapper.insert(wmsReceiptBill);
} else {
@ -135,6 +140,11 @@ public class WmsReceiptBillService extends MybatisBaseService<WmsReceiptBillMapp
if (!list.isEmpty()) {
wmsReceiptBillDetailService.saveOrUpdateDetailsList2(sid, list, pcList);
}
if("0".equals(dto.getBillStateKey())){
wmsReceiptBill.setBillState("0");
}else{
wmsReceiptBill.setBillState("1");
}
baseMapper.updateById(wmsReceiptBill);
}
return rb.success().setData(sid);

3
yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsreceiptbilldetail/WmsReceiptBillDetailVo.java

@ -19,7 +19,8 @@ public class WmsReceiptBillDetailVo {
@ApiModelProperty("商品Skusid")
private String goodsSkuSid;
@ApiModelProperty("商品Sku名称")
private String goodsSkuTitle;
// private String goodsSkuTitle;
private String goodsSpuName;
@ApiModelProperty("商品sku编码")
private String goodsSkuCode;
@ApiModelProperty("规格型号")

Loading…
Cancel
Save