Commit 6dd1b9bfa471041057e74bf76ff12af15f7c2dfe

Authored by 李宇
2 parents 91d339c2 2164125c

Merge branch 'master' of http://39.98.150.180/antissoft/lvqianmeiye_ERP

Showing 73 changed files with 2287 additions and 2421 deletions
antis-ncc-admin/.env.development
... ... @@ -3,5 +3,5 @@
3 3 VUE_CLI_BABEL_TRANSPILE_MODULES = true
4 4 VUE_APP_BASE_API = 'http://lvqian.antissoft.com'
5 5 # VUE_APP_BASE_API = 'http://erp_test.lvqianmeiye.com'
6   -# VUE_APP_BASE_API = 'http://localhost:2011'
  6 +VUE_APP_BASE_API = 'http://localhost:2011'
7 7 VUE_APP_BASE_WSS = 'ws://192.168.110.45:2011/websocket'
... ...
antis-ncc-admin/src/views/lqXhmxb/ExportBox.vue deleted
1   -<template>
2   - <el-dialog title="导出数据" :close-on-click-modal="false" :visible.sync="visible"
3   - class="NCC-dialog NCC-dialog_center" lock-scroll width="600px">
4   - <el-form label-position="top" label-width="80px">
5   - <el-form-item label="数据选择">
6   - <el-radio-group v-model="type">
7   - <el-radio :label="0">当前页面数据</el-radio>
8   - <el-radio :label="1">全部页面数据</el-radio>
9   - </el-radio-group>
10   - </el-form-item>
11   - <el-form-item label="导出字段">
12   - <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll"
13   - @change="handleCheckAllChange">全选</el-checkbox>
14   - <el-checkbox-group v-model="columns" @change="handleCheckedChange">
15   - <el-checkbox v-for="item in columnList" :label="item.prop" :key="item.prop">
16   - {{item.label}}
17   - </el-checkbox>
18   - </el-checkbox-group>
19   - </el-form-item>
20   - </el-form>
21   - <span slot="footer" class="dialog-footer">
22   - <el-button @click="visible=false">取 消</el-button>
23   - <el-button type="primary" @click="downLoad">导 出</el-button>
24   - </span>
25   - </el-dialog>
26   -</template>
27   -
28   -<script>
29   -export default {
30   - data() {
31   - return {
32   - visible: false,
33   - btnLoading: false,
34   - type: 0,
35   - columns: [],
36   - checkAll: true,
37   - isIndeterminate: false,
38   - columnList: []
39   - }
40   - },
41   - methods: {
42   - init(columnList) {
43   - this.visible = true
44   - this.columnList = columnList
45   - this.columns = columnList.map(o => o.prop)
46   - },
47   - handleCheckAllChange(val) {
48   - this.columns = val ? this.columnList.map(o => o.prop) : [];
49   - this.isIndeterminate = false;
50   - },
51   - handleCheckedChange(value) {
52   - let checkedCount = value.length;
53   - this.checkAll = checkedCount === this.columnList.length;
54   - this.isIndeterminate = checkedCount > 0 && checkedCount < this.columnList.length;
55   - },
56   - downLoad() {
57   - this.$emit('download', { dataType: this.type, selectKey: this.columns.join(',') })
58   - }
59   - }
60   -}
61   -</script>
62   -<style lang="scss" scoped>
63   ->>> .el-dialog__body {
64   - padding: 20px !important;
65   -}
66   -</style>
67 0 \ No newline at end of file
antis-ncc-admin/src/views/lqXhmxb/Form.vue deleted
1   -<template>
2   - <el-dialog :title="!dataForm.id ? '新建' : isDetail ? '详情':'编辑'" :close-on-click-modal="false" :visible.sync="visible" class="NCC-dialog NCC-dialog_center" lock-scroll width="600px">
3   - <el-row :gutter="15" class="" >
4   - <el-form ref="elForm" :model="dataForm" size="small" label-width="100px" label-position="right" :disabled="!!isDetail" :rules="rules">
5   - <el-col :span="24" v-if="false" >
6   - <el-form-item label="消耗编号" prop="id">
7   - <el-input v-model="dataForm.id" placeholder="请输入" clearable :style='{"width":"100%"}' >
8   - </el-input>
9   - </el-form-item>
10   - </el-col>
11   - <el-col :span="24">
12   - <el-form-item label="门店编号" prop="mdbh">
13   - <el-input v-model="dataForm.mdbh" placeholder="请输入" clearable :style='{"width":"100%"}' >
14   - </el-input>
15   - </el-form-item>
16   - </el-col>
17   - <el-col :span="24">
18   - <el-form-item label="门店名称" prop="mdmc">
19   - <el-input v-model="dataForm.mdmc" placeholder="请输入" clearable :style='{"width":"100%"}' >
20   - </el-input>
21   - </el-form-item>
22   - </el-col>
23   - <el-col :span="24">
24   - <el-form-item label="部门编号" prop="bmbh">
25   - <el-input v-model="dataForm.bmbh" placeholder="请输入" clearable :style='{"width":"100%"}' >
26   - </el-input>
27   - </el-form-item>
28   - </el-col>
29   - <el-col :span="24">
30   - <el-form-item label="部门名称" prop="bmmc">
31   - <el-input v-model="dataForm.bmmc" placeholder="请输入" clearable :style='{"width":"100%"}' >
32   - </el-input>
33   - </el-form-item>
34   - </el-col>
35   - <el-col :span="24">
36   - <el-form-item label="员工编号" prop="ygbh">
37   - <el-input v-model="dataForm.ygbh" placeholder="请输入" clearable :style='{"width":"100%"}' >
38   - </el-input>
39   - </el-form-item>
40   - </el-col>
41   - <el-col :span="24">
42   - <el-form-item label="员工名称" prop="ygmc">
43   - <el-input v-model="dataForm.ygmc" placeholder="请输入" clearable :style='{"width":"100%"}' >
44   - </el-input>
45   - </el-form-item>
46   - </el-col>
47   - <el-col :span="24">
48   - <el-form-item label="项目数" prop="xms">
49   - <el-input v-model="dataForm.xms" placeholder="请输入" clearable :style='{"width":"100%"}' >
50   - </el-input>
51   - </el-form-item>
52   - </el-col>
53   - <el-col :span="24">
54   - <el-form-item label="消耗" prop="xh">
55   - <el-input v-model="dataForm.xh" placeholder="请输入" clearable :style='{"width":"100%"}' >
56   - </el-input>
57   - </el-form-item>
58   - </el-col>
59   - <el-col :span="24">
60   - <el-form-item label="手工" prop="sg">
61   - <el-input v-model="dataForm.sg" placeholder="请输入" clearable :style='{"width":"100%"}' >
62   - </el-input>
63   - </el-form-item>
64   - </el-col>
65   - <el-col :span="24">
66   - <el-form-item label="其它手工1" prop="qtsg1">
67   - <el-input v-model="dataForm.qtsg1" placeholder="请输入" clearable :style='{"width":"100%"}' >
68   - </el-input>
69   - </el-form-item>
70   - </el-col>
71   - <el-col :span="24">
72   - <el-form-item label="其它手工2" prop="qtsg2">
73   - <el-input v-model="dataForm.qtsg2" placeholder="请输入" clearable :style='{"width":"100%"}' >
74   - </el-input>
75   - </el-form-item>
76   - </el-col>
77   - <el-col :span="24">
78   - <el-form-item label="其它手工3" prop="qtsg3">
79   - <el-input v-model="dataForm.qtsg3" placeholder="请输入" clearable :style='{"width":"100%"}' >
80   - </el-input>
81   - </el-form-item>
82   - </el-col>
83   - <el-col :span="24">
84   - <el-form-item label="手工合计" prop="sghj">
85   - <el-input v-model="dataForm.sghj" placeholder="请输入" clearable :style='{"width":"100%"}' >
86   - </el-input>
87   - </el-form-item>
88   - </el-col>
89   - </el-form>
90   - </el-row>
91   - <span slot="footer" class="dialog-footer">
92   - <el-button @click="visible = false">取 消</el-button>
93   - <el-button type="primary" @click="dataFormSubmit()" v-if="!isDetail">确 定</el-button>
94   - </span>
95   - </el-dialog>
96   -</template>
97   -<script>
98   - import request from '@/utils/request'
99   - import { getDictionaryDataSelector } from '@/api/systemData/dictionary'
100   - import { previewDataInterface } from '@/api/systemData/dataInterface'
101   - export default {
102   - components: {},
103   - props: [],
104   - data() {
105   - return {
106   - loading: false,
107   - visible: false,
108   - isDetail: false,
109   - dataForm: {
110   - id:'',
111   - id:undefined,
112   - mdbh:undefined,
113   - mdmc:undefined,
114   - bmbh:undefined,
115   - bmmc:undefined,
116   - ygbh:undefined,
117   - ygmc:undefined,
118   - xms:undefined,
119   - xh:undefined,
120   - sg:undefined,
121   - qtsg1:undefined,
122   - qtsg2:undefined,
123   - qtsg3:undefined,
124   - sghj:undefined,
125   - },
126   - rules: {
127   - },
128   - }
129   - },
130   - computed: {},
131   - watch: {},
132   - created() {
133   - },
134   - mounted() {
135   - },
136   - methods: {
137   - goBack() {
138   - this.$emit('refresh')
139   - },
140   - init(id, isDetail) {
141   - this.dataForm.id = id || 0;
142   - this.visible = true;
143   - this.isDetail = isDetail || false;
144   - this.$nextTick(() => {
145   - this.$refs['elForm'].resetFields();
146   - if (this.dataForm.id) {
147   - request({
148   - url: '/api/Extend/LqXhmxb/' + this.dataForm.id,
149   - method: 'get'
150   - }).then(res =>{
151   - this.dataForm = res.data;
152   - })
153   - }
154   - })
155   - },
156   - dataFormSubmit() {
157   - this.$refs['elForm'].validate((valid) => {
158   - if (valid) {
159   - if (!this.dataForm.id) {
160   - request({
161   - url: `/api/Extend/LqXhmxb`,
162   - method: 'post',
163   - data: this.dataForm,
164   - }).then((res) => {
165   - this.$message({
166   - message: res.msg,
167   - type: 'success',
168   - duration: 1000,
169   - onClose: () => {
170   - this.visible = false,
171   - this.$emit('refresh', true)
172   - }
173   - })
174   - })
175   - } else {
176   - request({
177   - url: '/api/Extend/LqXhmxb/' + this.dataForm.id,
178   - method: 'PUT',
179   - data: this.dataForm
180   - }).then((res) => {
181   - this.$message({
182   - message: res.msg,
183   - type: 'success',
184   - duration: 1000,
185   - onClose: () => {
186   - this.visible = false
187   - this.$emit('refresh', true)
188   - }
189   - })
190   - })
191   - }
192   - }
193   - })
194   - },
195   - }
196   - }
197   -</script>
antis-ncc-admin/src/views/lqXhmxb/index.vue deleted
1   -<template>
2   - <div class="NCC-common-layout">
3   - <div class="NCC-common-layout-center">
4   - <el-row class="NCC-common-search-box" :gutter="16">
5   - <el-form @submit.native.prevent>
6   - <el-col :span="6">
7   - <el-form-item label="消耗编号">
8   - <el-input v-model="query.id" placeholder="消耗编号" clearable />
9   - </el-form-item>
10   - </el-col>
11   - <el-col :span="6">
12   - <el-form-item label="门店编号">
13   - <el-input v-model="query.mdbh" placeholder="门店编号" clearable />
14   - </el-form-item>
15   - </el-col>
16   - <el-col :span="6">
17   - <el-form-item label="门店名称">
18   - <el-input v-model="query.mdmc" placeholder="门店名称" clearable />
19   - </el-form-item>
20   - </el-col>
21   - <template v-if="showAll">
22   - <el-col :span="6">
23   - <el-form-item label="部门编号">
24   - <el-input v-model="query.bmbh" placeholder="部门编号" clearable />
25   - </el-form-item>
26   - </el-col>
27   - <el-col :span="6">
28   - <el-form-item label="部门名称">
29   - <el-input v-model="query.bmmc" placeholder="部门名称" clearable />
30   - </el-form-item>
31   - </el-col>
32   - <el-col :span="6">
33   - <el-form-item label="员工编号">
34   - <el-input v-model="query.ygbh" placeholder="员工编号" clearable />
35   - </el-form-item>
36   - </el-col>
37   - <el-col :span="6">
38   - <el-form-item label="员工名称">
39   - <el-input v-model="query.ygmc" placeholder="员工名称" clearable />
40   - </el-form-item>
41   - </el-col>
42   - <el-col :span="6">
43   - <el-form-item label="项目数">
44   - <el-input v-model="query.xms" placeholder="项目数" clearable />
45   - </el-form-item>
46   - </el-col>
47   - <el-col :span="6">
48   - <el-form-item label="消耗">
49   - <el-input v-model="query.xh" placeholder="消耗" clearable />
50   - </el-form-item>
51   - </el-col>
52   - <el-col :span="6">
53   - <el-form-item label="手工">
54   - <el-input v-model="query.sg" placeholder="手工" clearable />
55   - </el-form-item>
56   - </el-col>
57   - <el-col :span="6">
58   - <el-form-item label="其它手工1">
59   - <el-input v-model="query.qtsg1" placeholder="其它手工1" clearable />
60   - </el-form-item>
61   - </el-col>
62   - <el-col :span="6">
63   - <el-form-item label="其它手工2">
64   - <el-input v-model="query.qtsg2" placeholder="其它手工2" clearable />
65   - </el-form-item>
66   - </el-col>
67   - <el-col :span="6">
68   - <el-form-item label="其它手工3">
69   - <el-input v-model="query.qtsg3" placeholder="其它手工3" clearable />
70   - </el-form-item>
71   - </el-col>
72   - <el-col :span="6">
73   - <el-form-item label="手工合计">
74   - <el-input v-model="query.sghj" placeholder="手工合计" clearable />
75   - </el-form-item>
76   - </el-col>
77   - </template>
78   - <el-col :span="6">
79   - <el-form-item>
80   - <el-button type="primary" icon="el-icon-search" @click="search()">查询</el-button>
81   - <el-button icon="el-icon-refresh-right" @click="reset()">重置</el-button>
82   - <el-button type="text" icon="el-icon-arrow-down" @click="showAll=true" v-if="!showAll">展开</el-button>
83   - <el-button type="text" icon="el-icon-arrow-up" @click="showAll=false" v-else>收起</el-button>
84   - </el-form-item>
85   - </el-col>
86   - </el-form>
87   - </el-row>
88   - <div class="NCC-common-layout-main NCC-flex-main">
89   - <div class="NCC-common-head">
90   - <div>
91   - <el-button type="primary" icon="el-icon-plus" @click="addOrUpdateHandle()">新增</el-button>
92   - <el-button type="text" icon="el-icon-download" @click="exportData()">导出</el-button>
93   - <el-button type="text" icon="el-icon-delete" @click="handleBatchRemoveDel()">批量删除</el-button>
94   - </div>
95   - <div class="NCC-common-head-right">
96   - <el-tooltip effect="dark" content="刷新" placement="top">
97   - <el-link icon="icon-ym icon-ym-Refresh NCC-common-head-icon" :underline="false" @click="reset()" />
98   - </el-tooltip>
99   - <screenfull isContainer />
100   - </div>
101   - </div>
102   - <NCC-table v-loading="listLoading" :data="list" has-c @selection-change="handleSelectionChange">
103   - <el-table-column prop="id" label="消耗编号" align="left" />
104   - <el-table-column prop="mdbh" label="门店编号" align="left" />
105   - <el-table-column prop="mdmc" label="门店名称" align="left" />
106   - <el-table-column prop="bmbh" label="部门编号" align="left" />
107   - <el-table-column prop="bmmc" label="部门名称" align="left" />
108   - <el-table-column prop="ygbh" label="员工编号" align="left" />
109   - <el-table-column prop="ygmc" label="员工名称" align="left" />
110   - <el-table-column prop="xms" label="项目数" align="left" />
111   - <el-table-column prop="xh" label="消耗" align="left" />
112   - <el-table-column prop="sg" label="手工" align="left" />
113   - <el-table-column prop="qtsg1" label="其它手工1" align="left" />
114   - <el-table-column prop="qtsg2" label="其它手工2" align="left" />
115   - <el-table-column prop="qtsg3" label="其它手工3" align="left" />
116   - <el-table-column prop="sghj" label="手工合计" align="left" />
117   - <el-table-column label="操作" fixed="right" width="100">
118   - <template slot-scope="scope">
119   - <el-button type="text" @click="addOrUpdateHandle(scope.row.id)" >编辑</el-button>
120   - <el-button type="text" @click="handleDel(scope.row.id)" class="NCC-table-delBtn" >删除</el-button>
121   - </template>
122   - </el-table-column>
123   - </NCC-table>
124   - <pagination :total="total" :page.sync="listQuery.currentPage" :limit.sync="listQuery.pageSize" @pagination="initData" />
125   - </div>
126   - </div>
127   - <NCC-Form v-if="formVisible" ref="NCCForm" @refresh="refresh" />
128   - <ExportBox v-if="exportBoxVisible" ref="ExportBox" @download="download" />
129   - </div>
130   -</template>
131   -<script>
132   - import request from '@/utils/request'
133   - import { getDictionaryDataSelector } from '@/api/systemData/dictionary'
134   - import NCCForm from './Form'
135   - import ExportBox from './ExportBox'
136   - import { previewDataInterface } from '@/api/systemData/dataInterface'
137   - export default {
138   - components: { NCCForm, ExportBox },
139   - data() {
140   - return {
141   - showAll: false,
142   - query: {
143   - id:undefined,
144   - mdbh:undefined,
145   - mdmc:undefined,
146   - bmbh:undefined,
147   - bmmc:undefined,
148   - ygbh:undefined,
149   - ygmc:undefined,
150   - xms:undefined,
151   - xh:undefined,
152   - sg:undefined,
153   - qtsg1:undefined,
154   - qtsg2:undefined,
155   - qtsg3:undefined,
156   - sghj:undefined,
157   - },
158   - list: [],
159   - listLoading: true,
160   - multipleSelection: [], total: 0,
161   - listQuery: {
162   - currentPage: 1,
163   - pageSize: 20,
164   - sort: "desc",
165   - sidx: "",
166   - },
167   - formVisible: false,
168   - exportBoxVisible: false,
169   - columnList: [
170   - { prop: 'id', label: '消耗编号' },
171   - { prop: 'mdbh', label: '门店编号' },
172   - { prop: 'mdmc', label: '门店名称' },
173   - { prop: 'bmbh', label: '部门编号' },
174   - { prop: 'bmmc', label: '部门名称' },
175   - { prop: 'ygbh', label: '员工编号' },
176   - { prop: 'ygmc', label: '员工名称' },
177   - { prop: 'xms', label: '项目数' },
178   - { prop: 'xh', label: '消耗' },
179   - { prop: 'sg', label: '手工' },
180   - { prop: 'qtsg1', label: '其它手工1' },
181   - { prop: 'qtsg2', label: '其它手工2' },
182   - { prop: 'qtsg3', label: '其它手工3' },
183   - { prop: 'sghj', label: '手工合计' },
184   - ],
185   - }
186   - },
187   - computed: {},
188   - created() {
189   - this.initData()
190   - },
191   - methods: {
192   - initData() {
193   - this.listLoading = true;
194   - let _query = {
195   - ...this.listQuery,
196   - ...this.query
197   - };
198   - let query = {}
199   - for (let key in _query) {
200   - if (Array.isArray(_query[key])) {
201   - query[key] = _query[key].join()
202   - } else {
203   - query[key] = _query[key]
204   - }
205   - }
206   - request({
207   - url: `/api/Extend/LqXhmxb`,
208   - method: 'GET',
209   - data: query
210   - }).then(res => {
211   - this.list = res.data.list
212   - this.total = res.data.pagination.total
213   - this.listLoading = false
214   - })
215   - },
216   - handleDel(id) {
217   - this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
218   - type: 'warning'
219   - }).then(() => {
220   - request({
221   - url: `/api/Extend/LqXhmxb/${id}`,
222   - method: 'DELETE'
223   - }).then(res => {
224   - this.$message({
225   - type: 'success',
226   - message: res.msg,
227   - onClose: () => {
228   - this.initData()
229   - }
230   - });
231   - })
232   - }).catch(() => {
233   - });
234   - },
235   - handleSelectionChange(val) {
236   - const res = val.map(item => item.id)
237   - this.multipleSelection = res
238   - },
239   - handleBatchRemoveDel() {
240   - if (!this.multipleSelection.length) {
241   - this.$message({
242   - type: 'error',
243   - message: '请选择一条数据',
244   - duration: 1500,
245   - })
246   - return
247   - }
248   - const ids = this.multipleSelection
249   - this.$confirm('您确定要删除这些数据吗, 是否继续?', '提示', {
250   - type: 'warning'
251   - }).then(() => {
252   - request({
253   - url: `/api/Extend/LqXhmxb/batchRemove`,
254   - method: 'POST',
255   - data: ids ,
256   - }).then(res => {
257   - this.$message({
258   - type: 'success',
259   - message: res.msg,
260   - onClose: () => {
261   - this.initData()
262   - }
263   - });
264   - })
265   - }).catch(() => { })
266   - },
267   - addOrUpdateHandle(id, isDetail) {
268   - this.formVisible = true
269   - this.$nextTick(() => {
270   - this.$refs.NCCForm.init(id, isDetail)
271   - })
272   - },
273   - exportData() {
274   - this.exportBoxVisible = true
275   - this.$nextTick(() => {
276   - this.$refs.ExportBox.init(this.columnList)
277   - })
278   - },
279   - download(data) {
280   - let query = { ...data, ...this.listQuery, ...this.query }
281   - request({
282   - url: `/api/Extend/LqXhmxb/Actions/Export`,
283   - method: 'GET',
284   - data: query
285   - }).then(res => {
286   - if (!res.data.url) return
287   - window.location.href = this.define.comUrl + res.data.url
288   - this.$refs.ExportBox.visible = false
289   - this.exportBoxVisible = false
290   - })
291   - },
292   - search() {
293   - this.listQuery = {
294   - currentPage: 1,
295   - pageSize: 20,
296   - sort: "desc",
297   - sidx: "",
298   - }
299   - this.initData()
300   - },
301   - refresh(isrRefresh) {
302   - this.formVisible = false
303   - if (isrRefresh) this.reset()
304   - },
305   - reset() {
306   - for (let key in this.query) {
307   - this.query[key] = undefined
308   - }
309   - this.listQuery = {
310   - currentPage: 1,
311   - pageSize: 20,
312   - sort: "desc",
313   - sidx: "",
314   - }
315   - this.initData()
316   - }
317   - }
318   - }
319   -</script>
320 0 \ No newline at end of file
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkHytk/LqHytkHytkListOutput.cs
... ... @@ -11,72 +11,72 @@ namespace NCC.Extend.Entitys.Dto.LqHytkHytk
11 11 /// 退卡编号
12 12 /// </summary>
13 13 public string id { get; set; }
14   -
  14 +
15 15 /// <summary>
16 16 /// 门店
17 17 /// </summary>
18 18 public string md { get; set; }
19   -
  19 +
20 20 /// <summary>
21 21 /// 门店编号
22 22 /// </summary>
23 23 public string mdbh { get; set; }
24   -
  24 +
25 25 /// <summary>
26 26 /// 门店名称
27 27 /// </summary>
28 28 public string mdmc { get; set; }
29   -
  29 +
30 30 /// <summary>
31 31 /// 会员
32 32 /// </summary>
33 33 public string hy { get; set; }
34   -
  34 +
35 35 /// <summary>
36 36 /// 会员姓名
37 37 /// </summary>
38 38 public string hymc { get; set; }
39   -
  39 +
40 40 /// <summary>
41 41 /// 会员账号
42 42 /// </summary>
43 43 public string hyzh { get; set; }
44   -
  44 +
45 45 /// <summary>
46 46 /// 顾客类型
47 47 /// </summary>
48 48 public string gklx { get; set; }
49   -
  49 +
50 50 /// <summary>
51 51 /// 退卡总金额
52 52 /// </summary>
53 53 public decimal? tkje { get; set; }
54   -
  54 +
55 55 /// <summary>
56 56 /// 手工费用
57 57 /// </summary>
58 58 public decimal? sgfy { get; set; }
59   -
  59 +
60 60 /// <summary>
61 61 /// 备注
62 62 /// </summary>
63 63 public string bz { get; set; }
64   -
  64 +
65 65 /// <summary>
66 66 /// 退卡时间
67 67 /// </summary>
68 68 public DateTime? tksj { get; set; }
69   -
  69 +
70 70 /// <summary>
71 71 /// 操作人员
72 72 /// </summary>
73 73 public string czry { get; set; }
74   -
  74 +
75 75 /// <summary>
76 76 /// 退卡状态
77 77 /// </summary>
78 78 public string tkzt { get; set; }
79   -
  79 +
80 80 /// <summary>
81 81 /// 退卡原因
82 82 /// </summary>
... ... @@ -86,6 +86,11 @@ namespace NCC.Extend.Entitys.Dto.LqHytkHytk
86 86 /// 退卡附件
87 87 /// </summary>
88 88 public string fileUrl { get; set; }
89   -
  89 +
  90 + /// <summary>
  91 + /// 是否有效
  92 + /// </summary>
  93 + public int isEffective { get; set; }
  94 +
90 95 }
91 96 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoInfoOutput.cs
... ... @@ -10,56 +10,62 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
10 10 /// <summary>
11 11 /// 主键
12 12 /// </summary>
13   - public string Id { get; set; }
  13 + public string id { get; set; }
14 14  
15 15 /// <summary>
16 16 /// 扣减类型
17 17 /// </summary>
18   - public string DeductType { get; set; }
  18 + public string deductType { get; set; }
19 19  
20 20 /// <summary>
21 21 /// 扣减类型名称
22 22 /// </summary>
23   - public string DeductTypeName { get; set; }
  23 + public string deductTypeName { get; set; }
24 24  
25 25 /// <summary>
26 26 /// 扣减关联ID
27 27 /// </summary>
28   - public string DeductId { get; set; }
  28 + public string deductId { get; set; }
29 29  
30 30 /// <summary>
31 31 /// 开单id
32 32 /// </summary>
33   - public string BillingId { get; set; }
  33 + public string billingId { get; set; }
34 34  
35 35 /// <summary>
36 36 /// 合计金额
37 37 /// </summary>
38   - public decimal? Amount { get; set; }
  38 + public decimal? amount { get; set; }
39 39  
40 40 /// <summary>
41 41 /// 是否有效
42 42 /// </summary>
43   - public int? IsEffective { get; set; }
  43 + public int? isEffective { get; set; }
44 44  
45 45 /// <summary>
46 46 /// 单价
47 47 /// </summary>
48   - public decimal? UnitPrice { get; set; }
  48 + public decimal? unitPrice { get; set; }
49 49  
50 50 /// <summary>
51 51 /// 品项名称
52 52 /// </summary>
53   - public string ItemName { get; set; }
  53 + public string itemName { get; set; }
54 54  
55 55 /// <summary>
56 56 /// 品项id
57 57 /// </summary>
58   - public string ItemId { get; set; }
  58 + public string itemId { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 项目数量
  62 + /// </summary>
  63 + public decimal? projectNumber { get; set; }
59 64  
60 65 /// <summary>
61 66 /// 创建时间
62 67 /// </summary>
63   - public DateTime? CreateTime { get; set; }
  68 + public DateTime? createTime { get; set; }
  69 +
64 70 }
65 71 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdJksyj/LqKdJksyjInfoOutput.cs
... ... @@ -12,45 +12,50 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
12 12 /// 业绩编号
13 13 /// </summary>
14 14 public string id { get; set; }
15   -
  15 +
16 16 /// <summary>
17 17 /// 关联开单编号
18 18 /// </summary>
19 19 public string glkdbh { get; set; }
20   -
  20 +
21 21 /// <summary>
22 22 /// 关联开单品项ID
23 23 /// </summary>
24 24 public string kdpxid { get; set; }
25   -
  25 +
26 26 /// <summary>
27 27 /// 健康师ID
28 28 /// </summary>
29 29 public string jks { get; set; }
30   -
  30 +
31 31 /// <summary>
32 32 /// 健康师姓名
33 33 /// </summary>
34 34 public string jksxm { get; set; }
35   -
  35 +
36 36 /// <summary>
37 37 /// 健康师账号
38 38 /// </summary>
39 39 public string jkszh { get; set; }
40   -
  40 +
41 41 /// <summary>
42 42 /// 健康师业绩
43 43 /// </summary>
44 44 public string jksyj { get; set; }
45   -
  45 +
46 46 /// <summary>
47 47 /// 业绩时间
48 48 /// </summary>
49 49 public DateTime? yjsj { get; set; }
50   -
  50 +
51 51 /// <summary>
52 52 /// 金三角ID
53 53 /// </summary>
54 54 public string jsj_id { get; set; }
  55 +
  56 + /// <summary>
  57 + /// 是否有效
  58 + /// </summary>
  59 + public int IsEffective { get; set; }
55 60 }
56 61 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/CancelBillingInput.cs 0 → 100644
  1 +using System.ComponentModel.DataAnnotations;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
  4 +{
  5 + /// <summary>
  6 + /// 作废开单记录输入
  7 + /// </summary>
  8 + public class CancelBillingInput
  9 + {
  10 + /// <summary>
  11 + /// 开单记录ID
  12 + /// </summary>
  13 + [Required(ErrorMessage = "开单记录ID不能为空")]
  14 + [Display(Name = "开单记录ID", Description = "需要作废的开单记录ID")]
  15 + public string Id { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 作废备注
  19 + /// </summary>
  20 + [Display(Name = "作废备注", Description = "作废开单记录的原因说明")]
  21 + public string Remarks { get; set; }
  22 + }
  23 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjUpInput.cs renamed to netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/DebtRecordQueryInput.cs
1   -using System;
2 1 using System.ComponentModel.DataAnnotations;
  2 +using NCC.Common.Filter;
3 3  
4   -namespace NCC.Extend.Entitys.Dto.LqKdQkbj
  4 +namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
5 5 {
6 6 /// <summary>
7   - /// 开单欠款补缴记录更新输入
  7 + /// 门店欠款记录查询输入
8 8 /// </summary>
9   - public class LqKdQkbjUpInput : LqKdQkbjCrInput
  9 + public class DebtRecordQueryInput : PageInputBase
10 10 {
11 11 /// <summary>
12   - /// 主键
  12 + /// 门店ID
13 13 /// </summary>
14   - [Required(ErrorMessage = "主键不能为空")]
15   - public string Id { get; set; }
  14 + [Required(ErrorMessage = "门店ID不能为空")]
  15 + [Display(Name = "门店ID", Description = "查询欠款记录的门店ID")]
  16 + public string StoreId { get; set; }
16 17 }
17 18 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbCrInput.cs
... ... @@ -146,6 +146,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
146 146 public string F_FIleUrl { get; set; }
147 147  
148 148 /// <summary>
  149 + /// 营销活动ID
  150 + /// </summary>
  151 + public string activityId { get; set; }
  152 +
  153 + /// <summary>
149 154 /// 作废关联id
150 155 /// </summary>
151 156 public string cancelRefId { get; set; }
... ... @@ -156,6 +161,16 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
156 161 public string cancelRefRemarks { get; set; }
157 162  
158 163 /// <summary>
  164 + /// 补缴开单ID
  165 + /// </summary>
  166 + public string supplementBillingId { get; set; }
  167 +
  168 + /// <summary>
  169 + /// 补缴金额
  170 + /// </summary>
  171 + public decimal supplementAmount { get; set; }
  172 +
  173 + /// <summary>
159 174 /// 扣款信息
160 175 /// </summary>
161 176 public List<LqKdDeductinfoCrInput> lqKdKdjlbDeductList { get; set; }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbInfoOutput.cs
1 1 using System;
2 2 using System.Collections.Generic;
3 3 using NCC.Common.Model;
  4 +using NCC.Extend.Entitys.Dto.LqKdDeductinfo;
4 5  
5 6 namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
6 7 {
... ... @@ -151,6 +152,32 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
151 152 public string F_FIleUrl { get; set; }
152 153  
153 154 /// <summary>
  155 + /// 是否有效
  156 + /// </summary>
  157 + public int IsEffective { get; set; }
  158 +
  159 + /// <summary>
  160 + /// 补缴开单ID
  161 + /// </summary>
  162 + public string SupplementBillingId { get; set; }
  163 +
  164 + /// <summary>
  165 + /// 补缴金额
  166 + /// </summary>
  167 + public decimal SupplementAmount { get; set; }
  168 +
  169 + /// <summary>
  170 + /// 已缴欠款
  171 + /// </summary>
  172 + public decimal PaidDebt { get; set; }
  173 +
  174 +
  175 + /// <summary>
  176 + /// 作废关联备注
  177 + /// </summary>
  178 + public string CancelRefRemarks { get; set; }
  179 +
  180 + /// <summary>
154 181 /// 健康师业绩
155 182 /// </summary>
156 183 public List<LqKdJksyjInfoOutput> lqKdJksyjList { get; set; }
... ... @@ -165,5 +192,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
165 192 /// </summary>
166 193 public List<LqKdPxmxInfoOutput> lqKdPxmxList { get; set; }
167 194  
  195 +
  196 + /// <summary>
  197 + /// 扣款信息列表
  198 + /// </summary>
  199 + public List<LqKdDeductinfoInfoOutput> lqKdDeductList { get; set; }
  200 +
168 201 }
169 202 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbListOutput.cs
... ... @@ -53,6 +53,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
53 53 public decimal qk { get; set; }
54 54  
55 55 /// <summary>
  56 + /// 已缴欠款
  57 + /// </summary>
  58 + public decimal PaidDebt { get; set; }
  59 +
  60 + /// <summary>
56 61 /// 储扣方式
57 62 /// </summary>
58 63 public string ckfs { get; set; }
... ... @@ -141,5 +146,15 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
141 146 /// 是否有效
142 147 /// </summary>
143 148 public int IsEffective { get; set; }
  149 +
  150 + /// <summary>
  151 + /// 开单用户
  152 + /// </summary>
  153 + public string CreateUser { get; set; }
  154 +
  155 + /// <summary>
  156 + /// 开单用户名称
  157 + /// </summary>
  158 + public string CreateUserName { get; set; }
144 159 }
145 160 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbListQueryInput.cs
... ... @@ -23,126 +23,131 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
23 23 /// 开单编号
24 24 /// </summary>
25 25 public string id { get; set; }
26   -
  26 +
27 27 /// <summary>
28 28 /// 单据门店
29 29 /// </summary>
30 30 public string djmd { get; set; }
31   -
  31 +
32 32 /// <summary>
33 33 /// 金三角
34 34 /// </summary>
35 35 public string jsj { get; set; }
36   -
  36 +
37 37 /// <summary>
38 38 /// 开单日期
39 39 /// </summary>
40 40 public string kdrq { get; set; }
41   -
  41 +
42 42 /// <summary>
43 43 /// 顾客类型
44 44 /// </summary>
45 45 public string gjlx { get; set; }
46   -
  46 +
47 47 /// <summary>
48 48 /// 合作机构
49 49 /// </summary>
50 50 public string hgjg { get; set; }
51   -
  51 +
52 52 /// <summary>
53 53 /// 整单业绩
54 54 /// </summary>
55 55 public string zdyj { get; set; }
56   -
  56 +
57 57 /// <summary>
58 58 /// 实付业绩
59 59 /// </summary>
60 60 public string sfyj { get; set; }
61   -
  61 +
62 62 /// <summary>
63 63 /// 欠款
64 64 /// </summary>
65 65 public string qk { get; set; }
66   -
  66 +
67 67 /// <summary>
68 68 /// 储扣方式
69 69 /// </summary>
70 70 public string ckfs { get; set; }
71   -
  71 +
72 72 /// <summary>
73 73 /// 付款方式
74 74 /// </summary>
75 75 public string fkfs { get; set; }
76   -
  76 +
77 77 /// <summary>
78 78 /// 付款医院
79 79 /// </summary>
80 80 public string fkyy { get; set; }
81   -
  81 +
82 82 /// <summary>
83 83 /// 付款判断
84 84 /// </summary>
85 85 public string fkpd { get; set; }
86   -
  86 +
87 87 /// <summary>
88 88 /// 客户来源
89 89 /// </summary>
90 90 public string khly { get; set; }
91   -
  91 +
92 92 /// <summary>
93 93 /// 推荐人
94 94 /// </summary>
95 95 public string tjr { get; set; }
96   -
  96 +
97 97 /// <summary>
98 98 /// 是否首开订单
99 99 /// </summary>
100 100 public string sfskdd { get; set; }
101   -
  101 +
102 102 /// <summary>
103 103 /// 简介
104 104 /// </summary>
105 105 public string jj { get; set; }
106   -
  106 +
107 107 /// <summary>
108 108 /// 备注
109 109 /// </summary>
110 110 public string bz { get; set; }
111   -
  111 +
112 112 /// <summary>
113 113 /// 开单会员
114 114 /// </summary>
115 115 public string kdhy { get; set; }
116   -
  116 +
117 117 /// <summary>
118 118 /// 开单会员名称
119 119 /// </summary>
120 120 public string kdhyc { get; set; }
121   -
  121 +
122 122 /// <summary>
123 123 /// 开单会员手机号
124 124 /// </summary>
125 125 public string kdhysjh { get; set; }
126   -
  126 +
127 127 /// <summary>
128 128 /// 健康师业绩
129 129 /// </summary>
130 130 public string jksyj { get; set; }
131   -
  131 +
132 132 /// <summary>
133 133 /// 科技部老师业绩
134 134 /// </summary>
135 135 public string kjblsyj { get; set; }
136   -
  136 +
137 137 /// <summary>
138 138 /// 品项信息
139 139 /// </summary>
140 140 public string pxxx { get; set; }
141   -
  141 +
142 142 /// <summary>
143 143 /// 方案其他
144 144 /// </summary>
145 145 public string F_FIleUrl { get; set; }
146   -
  146 +
  147 + /// <summary>
  148 + /// 开单用户
  149 + /// </summary>
  150 + public string CreateUser { get; set; }
  151 +
147 152 }
148 153 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbUpInput.cs
... ... @@ -12,6 +12,6 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
12 12 /// 开单编号
13 13 /// </summary>
14 14 public string id { get; set; }
15   -
  15 +
16 16 }
17 17 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKjbsyj/LqKdKjbsyjInfoOutput.cs
... ... @@ -12,40 +12,45 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
12 12 /// 业绩编号
13 13 /// </summary>
14 14 public string id { get; set; }
15   -
  15 +
16 16 /// <summary>
17 17 /// 关联开单编号
18 18 /// </summary>
19 19 public string glkdbh { get; set; }
20   -
  20 +
21 21 /// <summary>
22 22 /// 关联开单品项ID
23 23 /// </summary>
24 24 public string kdpxid { get; set; }
25   -
  25 +
26 26 /// <summary>
27 27 /// 科技部老师ID
28 28 /// </summary>
29 29 public string kjbls { get; set; }
30   -
  30 +
31 31 /// <summary>
32 32 /// 科技部老师姓名
33 33 /// </summary>
34 34 public string kjblsxm { get; set; }
35   -
  35 +
36 36 /// <summary>
37 37 /// 科技部老师账号
38 38 /// </summary>
39 39 public string kjblszh { get; set; }
40   -
  40 +
41 41 /// <summary>
42 42 /// 科技部老师业绩
43 43 /// </summary>
44 44 public string kjblsyj { get; set; }
45   -
  45 +
46 46 /// <summary>
47 47 /// 业绩时间
48 48 /// </summary>
49 49 public DateTime? yjsj { get; set; }
  50 +
  51 + /// <summary>
  52 + /// 是否有效
  53 + /// </summary>
  54 + public int IsEffective { get; set; }
50 55 }
51 56 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdPxmx/LqKdPxmxInfoOutput.cs
1 1 using System;
2 2 using System.Collections.Generic;
  3 +using NCC.Extend.Entitys.Dto.LqKdDeductinfo;
3 4  
4 5 namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
5 6 {
... ... @@ -75,6 +76,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
75 76 public string remark { get; set; }
76 77  
77 78 /// <summary>
  79 + /// 是否有效
  80 + /// </summary>
  81 + public int isEffective { get; set; }
  82 +
  83 + /// <summary>
78 84 /// 健康师业绩列表
79 85 /// </summary>
80 86 public List<LqKdJksyjInfoOutput> lqKdJksyjList { get; set; }
... ... @@ -83,5 +89,6 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
83 89 /// 科技部老师业绩列表
84 90 /// </summary>
85 91 public List<LqKdKjbsyjInfoOutput> lqKdKjbsyjList { get; set; }
  92 +
86 93 }
87 94 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjCrInput.cs deleted
1   -using System;
2   -using System.ComponentModel.DataAnnotations;
3   -
4   -namespace NCC.Extend.Entitys.Dto.LqKdQkbj
5   -{
6   - /// <summary>
7   - /// 开单欠款补缴记录创建输入
8   - /// </summary>
9   - public class LqKdQkbjCrInput
10   - {
11   - /// <summary>
12   - /// 开单ID
13   - /// </summary>
14   - [Required(ErrorMessage = "开单ID不能为空")]
15   - public string BillingId { get; set; }
16   -
17   - /// <summary>
18   - /// 补缴金额
19   - /// </summary>
20   - [Required(ErrorMessage = "补缴金额不能为空")]
21   - [Range(0.01, 999999.99, ErrorMessage = "补缴金额必须在0.01到999999.99之间")]
22   - public decimal PaymentAmount { get; set; }
23   -
24   - /// <summary>
25   - /// 补缴方式
26   - /// </summary>
27   - [Required(ErrorMessage = "补缴方式不能为空")]
28   - public string PaymentMethod { get; set; }
29   -
30   - /// <summary>
31   - /// 补缴时间
32   - /// </summary>
33   - [Required(ErrorMessage = "补缴时间不能为空")]
34   - public DateTime PaymentTime { get; set; }
35   -
36   - /// <summary>
37   - /// 补缴操作人
38   - /// </summary>
39   - public string PaymentUser { get; set; }
40   -
41   - /// <summary>
42   - /// 补缴账户
43   - /// </summary>
44   - public string PaymentAccount { get; set; }
45   -
46   - /// <summary>
47   - /// 补缴凭证号
48   - /// </summary>
49   - public string PaymentReference { get; set; }
50   -
51   - /// <summary>
52   - /// 补缴备注
53   - /// </summary>
54   - [StringLength(500, ErrorMessage = "补缴备注不能超过500个字符")]
55   - public string Remark { get; set; }
56   - }
57   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjListQueryInput.cs deleted
1   -using System;
2   -
3   -namespace NCC.Extend.Entitys.Dto.LqKdQkbj
4   -{
5   - /// <summary>
6   - /// 开单欠款补缴记录列表查询输入
7   - /// </summary>
8   - public class LqKdQkbjListQueryInput
9   - {
10   - /// <summary>
11   - /// 开单ID
12   - /// </summary>
13   - public string BillingId { get; set; }
14   -
15   - /// <summary>
16   - /// 补缴方式
17   - /// </summary>
18   - public string PaymentMethod { get; set; }
19   -
20   - /// <summary>
21   - /// 补缴操作人
22   - /// </summary>
23   - public string PaymentUser { get; set; }
24   -
25   - /// <summary>
26   - /// 最小补缴金额
27   - /// </summary>
28   - public decimal? MinPaymentAmount { get; set; }
29   -
30   - /// <summary>
31   - /// 最大补缴金额
32   - /// </summary>
33   - public decimal? MaxPaymentAmount { get; set; }
34   -
35   - /// <summary>
36   - /// 开始补缴时间
37   - /// </summary>
38   - public DateTime? StartPaymentTime { get; set; }
39   -
40   - /// <summary>
41   - /// 结束补缴时间
42   - /// </summary>
43   - public DateTime? EndPaymentTime { get; set; }
44   -
45   - /// <summary>
46   - /// 是否有效
47   - /// </summary>
48   - public int? IsEffective { get; set; }
49   -
50   - /// <summary>
51   - /// 补缴凭证号
52   - /// </summary>
53   - public string PaymentReference { get; set; }
54   - }
55   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageInfo/LqPackageInfoCrInput.cs 0 → 100644
  1 +using System;
  2 +using System.Collections.Generic;
  3 +using System.ComponentModel.DataAnnotations;
  4 +
  5 +namespace NCC.Extend.Entitys.Dto.LqPackageInfo
  6 +{
  7 + /// <summary>
  8 + /// 营销活动创建输入
  9 + /// </summary>
  10 + public class LqPackageInfoCrInput
  11 + {
  12 + /// <summary>
  13 + /// 活动名称
  14 + /// </summary>
  15 + [Required(ErrorMessage = "活动名称不能为空")]
  16 + [Display(Name = "活动名称", Description = "营销活动的名称")]
  17 + public string ActivityName { get; set; }
  18 +
  19 + /// <summary>
  20 + /// 活动描述
  21 + /// </summary>
  22 + [Display(Name = "活动描述", Description = "营销活动的详细描述")]
  23 + public string ActivityDesc { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 活动开始时间
  27 + /// </summary>
  28 + [Required(ErrorMessage = "活动开始时间不能为空")]
  29 + [Display(Name = "活动开始时间", Description = "营销活动的开始时间")]
  30 + public DateTime StartTime { get; set; }
  31 +
  32 + /// <summary>
  33 + /// 活动结束时间
  34 + /// </summary>
  35 + [Required(ErrorMessage = "活动结束时间不能为空")]
  36 + [Display(Name = "活动结束时间", Description = "营销活动的结束时间")]
  37 + public DateTime EndTime { get; set; }
  38 +
  39 + /// <summary>
  40 + /// 至少购买品项数量
  41 + /// </summary>
  42 + [Required(ErrorMessage = "至少购买品项数量不能为空")]
  43 + [Range(1, int.MaxValue, ErrorMessage = "至少购买品项数量必须大于0")]
  44 + [Display(Name = "至少购买品项数量", Description = "参与活动需要购买的最少品项数量")]
  45 + public int MinItemQuantity { get; set; } = 1;
  46 +
  47 + /// <summary>
  48 + /// 活动规则说明
  49 + /// </summary>
  50 + [Display(Name = "活动规则说明", Description = "营销活动的规则和说明")]
  51 + public string ActivityRules { get; set; }
  52 +
  53 + /// <summary>
  54 + /// 活动图片(JSON格式)
  55 + /// </summary>
  56 + [Display(Name = "活动图片", Description = "营销活动的图片,JSON格式存储")]
  57 + public string ActivityImages { get; set; }
  58 +
  59 + /// <summary>
  60 + /// 排序
  61 + /// </summary>
  62 + [Display(Name = "排序", Description = "营销活动的显示排序")]
  63 + public int SortOrder { get; set; } = 0;
  64 +
  65 + /// <summary>
  66 + /// 营销活动品项明细列表
  67 + /// </summary>
  68 + [Display(Name = "活动品项明细", Description = "营销活动包含的品项明细列表")]
  69 + public List<MarketingActivityItemDetailInput> ActivityItems { get; set; } = new List<MarketingActivityItemDetailInput>();
  70 + }
  71 +
  72 + /// <summary>
  73 + /// 营销活动品项明细输入
  74 + /// </summary>
  75 + public class MarketingActivityItemDetailInput
  76 + {
  77 + /// <summary>
  78 + /// 品项ID
  79 + /// </summary>
  80 + [Required(ErrorMessage = "品项ID不能为空")]
  81 + [Display(Name = "品项ID", Description = "品项的唯一标识")]
  82 + public string ItemId { get; set; }
  83 +
  84 + /// <summary>
  85 + /// 品项名称
  86 + /// </summary>
  87 + [Display(Name = "品项名称", Description = "品项的名称")]
  88 + public string ItemName { get; set; }
  89 +
  90 + /// <summary>
  91 + /// 品项分类
  92 + /// </summary>
  93 + [Display(Name = "品项分类", Description = "品项的分类")]
  94 + public string ItemCategory { get; set; }
  95 +
  96 + /// <summary>
  97 + /// 品项备注
  98 + /// </summary>
  99 + [Display(Name = "品项备注", Description = "品项的备注信息")]
  100 + public string ItemRemark { get; set; }
  101 + }
  102 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjInfoOutput.cs renamed to netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageInfo/LqPackageInfoInfoOutput.cs
1 1 using System;
  2 +using System.ComponentModel.DataAnnotations;
2 3  
3   -namespace NCC.Extend.Entitys.Dto.LqKdQkbj
  4 +namespace NCC.Extend.Entitys.Dto.LqPackageInfo
4 5 {
5 6 /// <summary>
6   - /// 开单欠款补缴记录详情输出
  7 + /// 套餐信息详情输出
7 8 /// </summary>
8   - public class LqKdQkbjInfoOutput
  9 + public class LqPackageInfoInfoOutput
9 10 {
10 11 /// <summary>
11   - /// 主键
  12 + /// 套餐ID
12 13 /// </summary>
13 14 public string Id { get; set; }
14 15  
15 16 /// <summary>
16   - /// 开单ID
  17 + /// 套餐编码
17 18 /// </summary>
18   - public string BillingId { get; set; }
  19 + public string PackageCode { get; set; }
19 20  
20 21 /// <summary>
21   - /// 补缴金额
  22 + /// 套餐名称
22 23 /// </summary>
23   - public decimal PaymentAmount { get; set; }
  24 + public string PackageName { get; set; }
24 25  
25 26 /// <summary>
26   - /// 补缴方式
  27 + /// 套餐描述
27 28 /// </summary>
28   - public string PaymentMethod { get; set; }
  29 + public string PackageDesc { get; set; }
29 30  
30 31 /// <summary>
31   - /// 补缴方式名称
  32 + /// 套餐价格
32 33 /// </summary>
33   - public string PaymentMethodName { get; set; }
  34 + public decimal PackagePrice { get; set; }
34 35  
35 36 /// <summary>
36   - /// 补缴时间
  37 + /// 优惠价格
37 38 /// </summary>
38   - public DateTime PaymentTime { get; set; }
  39 + public decimal? DiscountPrice { get; set; }
39 40  
40 41 /// <summary>
41   - /// 补缴操作人
  42 + /// 使用状态
42 43 /// </summary>
43   - public string PaymentUser { get; set; }
  44 + public string Status { get; set; }
44 45  
45 46 /// <summary>
46   - /// 补缴操作人姓名
  47 + /// 上架状态
47 48 /// </summary>
48   - public string PaymentUserName { get; set; }
  49 + public string ShelfStatus { get; set; }
49 50  
50 51 /// <summary>
51   - /// 补缴账户
  52 + /// 套餐类型
52 53 /// </summary>
53   - public string PaymentAccount { get; set; }
54   -
55   - /// <summary>
56   - /// 补缴凭证号
57   - /// </summary>
58   - public string PaymentReference { get; set; }
59   -
60   - /// <summary>
61   - /// 补缴备注
62   - /// </summary>
63   - public string Remark { get; set; }
  54 + public string PackageType { get; set; }
64 55  
65 56 /// <summary>
66 57 /// 创建时间
... ... @@ -73,8 +64,13 @@ namespace NCC.Extend.Entitys.Dto.LqKdQkbj
73 64 public DateTime UpdateTime { get; set; }
74 65  
75 66 /// <summary>
76   - /// 是否有效
  67 + /// 创建人
  68 + /// </summary>
  69 + public string CreateUser { get; set; }
  70 +
  71 + /// <summary>
  72 + /// 更新人
77 73 /// </summary>
78   - public int IsEffective { get; set; }
  74 + public string UpdateUser { get; set; }
79 75 }
80 76 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageInfo/LqPackageInfoListOutput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqPackageInfo
  5 +{
  6 + /// <summary>
  7 + /// 营销活动列表输出
  8 + /// </summary>
  9 + public class LqPackageInfoListOutput
  10 + {
  11 + /// <summary>
  12 + /// 营销活动ID
  13 + /// </summary>
  14 + [Display(Name = "营销活动ID", Description = "营销活动的唯一标识")]
  15 + public string Id { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 活动名称
  19 + /// </summary>
  20 + [Display(Name = "活动名称", Description = "营销活动的名称")]
  21 + public string ActivityName { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 活动描述
  25 + /// </summary>
  26 + [Display(Name = "活动描述", Description = "营销活动的描述")]
  27 + public string ActivityDesc { get; set; }
  28 +
  29 + /// <summary>
  30 + /// 活动开始时间
  31 + /// </summary>
  32 + [Display(Name = "活动开始时间", Description = "营销活动的开始时间")]
  33 + public DateTime StartTime { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 活动结束时间
  37 + /// </summary>
  38 + [Display(Name = "活动结束时间", Description = "营销活动的结束时间")]
  39 + public DateTime EndTime { get; set; }
  40 +
  41 + /// <summary>
  42 + /// 至少购买品项数量
  43 + /// </summary>
  44 + [Display(Name = "至少购买品项数量", Description = "参与活动需要购买的最少品项数量")]
  45 + public int MinItemQuantity { get; set; }
  46 +
  47 + /// <summary>
  48 + /// 活动规则说明
  49 + /// </summary>
  50 + [Display(Name = "活动规则说明", Description = "营销活动的规则说明")]
  51 + public string ActivityRules { get; set; }
  52 +
  53 + /// <summary>
  54 + /// 排序
  55 + /// </summary>
  56 + [Display(Name = "排序", Description = "营销活动的显示排序")]
  57 + public int SortOrder { get; set; }
  58 +
  59 + /// <summary>
  60 + /// 创建时间
  61 + /// </summary>
  62 + [Display(Name = "创建时间", Description = "营销活动的创建时间")]
  63 + public DateTime CreateTime { get; set; }
  64 + }
  65 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageInfo/LqPackageInfoListQueryInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +using NCC.Common.Filter;
  4 +
  5 +namespace NCC.Extend.Entitys.Dto.LqPackageInfo
  6 +{
  7 + /// <summary>
  8 + /// 营销活动列表查询输入
  9 + /// </summary>
  10 + public class LqPackageInfoListQueryInput : PageInputBase
  11 + {
  12 + /// <summary>
  13 + /// 活动名称
  14 + /// </summary>
  15 + [Display(Name = "活动名称", Description = "营销活动名称")]
  16 + public string ActivityName { get; set; }
  17 +
  18 + /// <summary>
  19 + /// 活动描述
  20 + /// </summary>
  21 + [Display(Name = "活动描述", Description = "营销活动描述")]
  22 + public string ActivityDesc { get; set; }
  23 +
  24 + /// <summary>
  25 + /// 活动开始时间开始
  26 + /// </summary>
  27 + [Display(Name = "活动开始时间开始", Description = "活动开始时间范围开始")]
  28 + public DateTime? StartTimeStart { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 活动开始时间结束
  32 + /// </summary>
  33 + [Display(Name = "活动开始时间结束", Description = "活动开始时间范围结束")]
  34 + public DateTime? StartTimeEnd { get; set; }
  35 +
  36 + /// <summary>
  37 + /// 活动结束时间开始
  38 + /// </summary>
  39 + [Display(Name = "活动结束时间开始", Description = "活动结束时间范围开始")]
  40 + public DateTime? EndTimeStart { get; set; }
  41 +
  42 + /// <summary>
  43 + /// 活动结束时间结束
  44 + /// </summary>
  45 + [Display(Name = "活动结束时间结束", Description = "活动结束时间范围结束")]
  46 + public DateTime? EndTimeEnd { get; set; }
  47 +
  48 + /// <summary>
  49 + /// 至少购买品项数量
  50 + /// </summary>
  51 + [Display(Name = "至少购买品项数量", Description = "至少购买品项数量")]
  52 + public int? MinItemQuantity { get; set; }
  53 +
  54 + /// <summary>
  55 + /// 创建时间开始
  56 + /// </summary>
  57 + [Display(Name = "创建时间开始", Description = "创建时间范围开始")]
  58 + public DateTime? CreateTimeStart { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 创建时间结束
  62 + /// </summary>
  63 + [Display(Name = "创建时间结束", Description = "创建时间范围结束")]
  64 + public DateTime? CreateTimeEnd { get; set; }
  65 + }
  66 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageInfo/LqPackageInfoUpInput.cs 0 → 100644
  1 +using System;
  2 +using System.Collections.Generic;
  3 +using System.ComponentModel.DataAnnotations;
  4 +
  5 +namespace NCC.Extend.Entitys.Dto.LqPackageInfo
  6 +{
  7 + /// <summary>
  8 + /// 营销活动更新输入
  9 + /// </summary>
  10 + public class LqPackageInfoUpInput
  11 + {
  12 + /// <summary>
  13 + /// 营销活动ID
  14 + /// </summary>
  15 + [Required(ErrorMessage = "营销活动ID不能为空")]
  16 + [Display(Name = "营销活动ID", Description = "营销活动的唯一标识")]
  17 + public string Id { get; set; }
  18 +
  19 + /// <summary>
  20 + /// 活动名称
  21 + /// </summary>
  22 + [Required(ErrorMessage = "活动名称不能为空")]
  23 + [Display(Name = "活动名称", Description = "营销活动的名称")]
  24 + public string ActivityName { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 活动描述
  28 + /// </summary>
  29 + [Display(Name = "活动描述", Description = "营销活动的详细描述")]
  30 + public string ActivityDesc { get; set; }
  31 +
  32 + /// <summary>
  33 + /// 活动开始时间
  34 + /// </summary>
  35 + [Required(ErrorMessage = "活动开始时间不能为空")]
  36 + [Display(Name = "活动开始时间", Description = "营销活动的开始时间")]
  37 + public DateTime StartTime { get; set; }
  38 +
  39 + /// <summary>
  40 + /// 活动结束时间
  41 + /// </summary>
  42 + [Required(ErrorMessage = "活动结束时间不能为空")]
  43 + [Display(Name = "活动结束时间", Description = "营销活动的结束时间")]
  44 + public DateTime EndTime { get; set; }
  45 +
  46 + /// <summary>
  47 + /// 至少购买品项数量
  48 + /// </summary>
  49 + [Required(ErrorMessage = "至少购买品项数量不能为空")]
  50 + [Range(1, int.MaxValue, ErrorMessage = "至少购买品项数量必须大于0")]
  51 + [Display(Name = "至少购买品项数量", Description = "参与活动需要购买的最少品项数量")]
  52 + public int MinItemQuantity { get; set; } = 1;
  53 +
  54 + /// <summary>
  55 + /// 活动规则说明
  56 + /// </summary>
  57 + [Display(Name = "活动规则说明", Description = "营销活动的规则和说明")]
  58 + public string ActivityRules { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 活动图片(JSON格式)
  62 + /// </summary>
  63 + [Display(Name = "活动图片", Description = "营销活动的图片,JSON格式存储")]
  64 + public string ActivityImages { get; set; }
  65 +
  66 + /// <summary>
  67 + /// 排序
  68 + /// </summary>
  69 + [Display(Name = "排序", Description = "营销活动的显示排序")]
  70 + public int SortOrder { get; set; } = 0;
  71 +
  72 + /// <summary>
  73 + /// 营销活动品项明细列表
  74 + /// </summary>
  75 + [Display(Name = "活动品项明细", Description = "营销活动包含的品项明细列表")]
  76 + public List<MarketingActivityItemDetailInput> ActivityItems { get; set; } = new List<MarketingActivityItemDetailInput>();
  77 + }
  78 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageItemDetail/LqPackageItemDetailCrInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqPackageItemDetail
  5 +{
  6 + /// <summary>
  7 + /// 套餐品项明细创建输入
  8 + /// </summary>
  9 + public class LqPackageItemDetailCrInput
  10 + {
  11 + /// <summary>
  12 + /// 套餐ID
  13 + /// </summary>
  14 + [Required(ErrorMessage = "套餐ID不能为空")]
  15 + public string PackageId { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 品项ID
  19 + /// </summary>
  20 + [Required(ErrorMessage = "品项ID不能为空")]
  21 + public string ItemId { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 品项数量
  25 + /// </summary>
  26 + [Required(ErrorMessage = "品项数量不能为空")]
  27 + [Range(1, int.MaxValue, ErrorMessage = "品项数量必须大于0")]
  28 + public int ItemQuantity { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 品项金额
  32 + /// </summary>
  33 + [Required(ErrorMessage = "品项金额不能为空")]
  34 + [Range(0, double.MaxValue, ErrorMessage = "品项金额必须大于等于0")]
  35 + public decimal ItemAmount { get; set; }
  36 +
  37 + /// <summary>
  38 + /// 品项备注
  39 + /// </summary>
  40 + public string ItemRemark { get; set; }
  41 +
  42 + /// <summary>
  43 + /// 排序
  44 + /// </summary>
  45 + public int SortOrder { get; set; } = 0;
  46 + }
  47 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjListOutput.cs renamed to netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageItemDetail/LqPackageItemDetailInfoOutput.cs
1 1 using System;
2 2  
3   -namespace NCC.Extend.Entitys.Dto.LqKdQkbj
  3 +namespace NCC.Extend.Entitys.Dto.LqPackageItemDetail
4 4 {
5 5 /// <summary>
6   - /// 开单欠款补缴记录列表输出
  6 + /// 套餐品项明细详情输出
7 7 /// </summary>
8   - public class LqKdQkbjListOutput
  8 + public class LqPackageItemDetailInfoOutput
9 9 {
10 10 /// <summary>
11   - /// 主键
  11 + /// 明细ID
12 12 /// </summary>
13 13 public string Id { get; set; }
14 14  
15 15 /// <summary>
16   - /// 开单ID
  16 + /// 套餐ID
17 17 /// </summary>
18   - public string BillingId { get; set; }
  18 + public string PackageId { get; set; }
19 19  
20 20 /// <summary>
21   - /// 补缴金额
  21 + /// 品项ID
22 22 /// </summary>
23   - public decimal PaymentAmount { get; set; }
  23 + public string ItemId { get; set; }
24 24  
25 25 /// <summary>
26   - /// 补缴方式
  26 + /// 品项数量
27 27 /// </summary>
28   - public string PaymentMethod { get; set; }
  28 + public int ItemQuantity { get; set; }
29 29  
30 30 /// <summary>
31   - /// 补缴方式名称
  31 + /// 品项金额
32 32 /// </summary>
33   - public string PaymentMethodName { get; set; }
  33 + public decimal ItemAmount { get; set; }
34 34  
35 35 /// <summary>
36   - /// 补缴时间
  36 + /// 品项备注
37 37 /// </summary>
38   - public DateTime PaymentTime { get; set; }
  38 + public string ItemRemark { get; set; }
39 39  
40 40 /// <summary>
41   - /// 补缴操作人
  41 + /// 排序
42 42 /// </summary>
43   - public string PaymentUser { get; set; }
  43 + public int SortOrder { get; set; }
44 44  
45 45 /// <summary>
46   - /// 补缴操作人姓名
47   - /// </summary>
48   - public string PaymentUserName { get; set; }
49   -
50   - /// <summary>
51   - /// 补缴账户
52   - /// </summary>
53   - public string PaymentAccount { get; set; }
54   -
55   - /// <summary>
56   - /// 补缴凭证号
57   - /// </summary>
58   - public string PaymentReference { get; set; }
59   -
60   - /// <summary>
61   - /// 补缴备注
  46 + /// 创建时间
62 47 /// </summary>
63   - public string Remark { get; set; }
  48 + public DateTime CreateTime { get; set; }
64 49  
65 50 /// <summary>
66   - /// 创建时间
  51 + /// 更新时间
67 52 /// </summary>
68   - public DateTime CreateTime { get; set; }
  53 + public DateTime UpdateTime { get; set; }
69 54  
70 55 /// <summary>
71 56 /// 是否有效
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaListQueryInput.cs renamed to netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageItemDetail/LqPackageItemDetailListOutput.cs
1   -using NCC.Common.Filter;
2   -using System.Collections.Generic;
  1 +using System;
3 2  
4   -namespace NCC.Extend.Entitys.Dto.LqYxhdfa
  3 +namespace NCC.Extend.Entitys.Dto.LqPackageItemDetail
5 4 {
6 5 /// <summary>
7   - /// 营销活动方案列表查询输入
  6 + /// 套餐品项明细列表输出
8 7 /// </summary>
9   - public class LqYxhdfaListQueryInput : PageInputBase
  8 + public class LqPackageItemDetailListOutput
10 9 {
11 10 /// <summary>
12   - /// 选择导出数据key
  11 + /// 明细ID
13 12 /// </summary>
14   - public string selectKey { get; set; }
  13 + public string Id { get; set; }
15 14  
16 15 /// <summary>
17   - ///
  16 + /// 套餐ID
18 17 /// </summary>
19   - public int dataType { get; set; }
20   -
  18 + public string PackageId { get; set; }
21 19  
22 20 /// <summary>
23   - /// 方案编号
  21 + /// 品项ID
24 22 /// </summary>
25   - public string id { get; set; }
26   -
  23 + public string ItemId { get; set; }
  24 +
27 25 /// <summary>
28   - /// 营销活动编号
  26 + /// 品项数量
29 27 /// </summary>
30   - public string yxhdbh { get; set; }
31   -
  28 + public int ItemQuantity { get; set; }
  29 +
32 30 /// <summary>
33   - /// 活动名称
  31 + /// 品项金额
34 32 /// </summary>
35   - public string hdmc { get; set; }
36   -
  33 + public decimal ItemAmount { get; set; }
  34 +
37 35 /// <summary>
38   - /// 张数奖
  36 + /// 排序
39 37 /// </summary>
40   - public string zsj { get; set; }
41   -
  38 + public int SortOrder { get; set; }
  39 +
42 40 /// <summary>
43   - /// 金额奖
  41 + /// 创建时间
44 42 /// </summary>
45   - public string jej { get; set; }
46   -
  43 + public DateTime CreateTime { get; set; }
47 44 }
48 45 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaInfoOutput.cs renamed to netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageItemDetail/LqPackageItemDetailListQueryInput.cs
1   -using System;
  1 +using System;
2 2  
3   -namespace NCC.Extend.Entitys.Dto.LqYxhdfa
  3 +namespace NCC.Extend.Entitys.Dto.LqPackageItemDetail
4 4 {
5 5 /// <summary>
6   - /// 营销活动方案输出参数
  6 + /// 套餐品项明细列表查询输入
7 7 /// </summary>
8   - public class LqYxhdfaInfoOutput
  8 + public class LqPackageItemDetailListQueryInput
9 9 {
10 10 /// <summary>
11   - /// 方案编号
  11 + /// 套餐ID
12 12 /// </summary>
13   - public string id { get; set; }
  13 + public string PackageId { get; set; }
14 14  
15 15 /// <summary>
16   - /// 营销活动编号
  16 + /// 品项ID
17 17 /// </summary>
18   - public string yxhdbh { get; set; }
  18 + public string ItemId { get; set; }
19 19  
20 20 /// <summary>
21   - /// 活动名称
  21 + /// 是否有效
22 22 /// </summary>
23   - public string hdmc { get; set; }
  23 + public int? IsEffective { get; set; }
24 24  
25 25 /// <summary>
26   - /// 张数奖
  26 + /// 创建时间开始
27 27 /// </summary>
28   - public string zsj { get; set; }
  28 + public DateTime? CreateTimeStart { get; set; }
29 29  
30 30 /// <summary>
31   - /// 金额奖
  31 + /// 创建时间结束
32 32 /// </summary>
33   - public string jej { get; set; }
  33 + public DateTime? CreateTimeEnd { get; set; }
34 34 }
35 35 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageItemDetail/LqPackageItemDetailUpInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqPackageItemDetail
  5 +{
  6 + /// <summary>
  7 + /// 套餐品项明细更新输入
  8 + /// </summary>
  9 + public class LqPackageItemDetailUpInput
  10 + {
  11 + /// <summary>
  12 + /// 明细ID
  13 + /// </summary>
  14 + [Required(ErrorMessage = "明细ID不能为空")]
  15 + public string Id { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 套餐ID
  19 + /// </summary>
  20 + [Required(ErrorMessage = "套餐ID不能为空")]
  21 + public string PackageId { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 品项ID
  25 + /// </summary>
  26 + [Required(ErrorMessage = "品项ID不能为空")]
  27 + public string ItemId { get; set; }
  28 +
  29 + /// <summary>
  30 + /// 品项数量
  31 + /// </summary>
  32 + [Required(ErrorMessage = "品项数量不能为空")]
  33 + [Range(1, int.MaxValue, ErrorMessage = "品项数量必须大于0")]
  34 + public int ItemQuantity { get; set; }
  35 +
  36 + /// <summary>
  37 + /// 品项金额
  38 + /// </summary>
  39 + [Required(ErrorMessage = "品项金额不能为空")]
  40 + [Range(0, double.MaxValue, ErrorMessage = "品项金额必须大于等于0")]
  41 + public decimal ItemAmount { get; set; }
  42 +
  43 + /// <summary>
  44 + /// 品项备注
  45 + /// </summary>
  46 + public string ItemRemark { get; set; }
  47 +
  48 + /// <summary>
  49 + /// 排序
  50 + /// </summary>
  51 + public int SortOrder { get; set; }
  52 + }
  53 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqSkzh/LqSkzhListQueryInput.cs
... ... @@ -23,16 +23,16 @@ namespace NCC.Extend.Entitys.Dto.LqSkzh
23 23 /// 收款途径编号
24 24 /// </summary>
25 25 public string id { get; set; }
26   -
  26 +
27 27 /// <summary>
28 28 /// 收款途径
29 29 /// </summary>
30 30 public string sktj { get; set; }
31   -
  31 +
32 32 /// <summary>
33 33 /// 收款账号
34 34 /// </summary>
35 35 public string skzh { get; set; }
36   -
  36 +
37 37 }
38 38 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkjlb/LqTkjlbInfoOutput.cs
... ... @@ -82,5 +82,10 @@ namespace NCC.Extend.Entitys.Dto.LqTkjlb
82 82 /// 拓客活动名称
83 83 /// </summary>
84 84 public string eventName { get; set; }
  85 +
  86 + /// <summary>
  87 + /// 是否有效
  88 + /// </summary>
  89 + public int isEffective { get; set; }
85 90 }
86 91 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkjlb/LqTkjlbListOutput.cs
... ... @@ -92,5 +92,10 @@ namespace NCC.Extend.Entitys.Dto.LqTkjlb
92 92 /// 拓客活动名称
93 93 /// </summary>
94 94 public string eventName { get; set; }
  95 +
  96 + /// <summary>
  97 + /// 是否有效
  98 + /// </summary>
  99 + public int isEffective { get; set; }
95 100 }
96 101 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkListOutput.cs
... ... @@ -11,66 +11,71 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk
11 11 /// 耗卡编号
12 12 /// </summary>
13 13 public string id { get; set; }
14   -
  14 +
15 15 /// <summary>
16 16 /// 门店
17 17 /// </summary>
18 18 public string md { get; set; }
19   -
  19 +
20 20 /// <summary>
21 21 /// 门店编号
22 22 /// </summary>
23 23 public string mdbh { get; set; }
24   -
  24 +
25 25 /// <summary>
26 26 /// 门店名称
27 27 /// </summary>
28 28 public string mdmc { get; set; }
29   -
  29 +
30 30 /// <summary>
31 31 /// 会员
32 32 /// </summary>
33 33 public string hy { get; set; }
34   -
  34 +
35 35 /// <summary>
36 36 /// 会员账号
37 37 /// </summary>
38 38 public string hyzh { get; set; }
39   -
  39 +
  40 + /// <summary>
  41 + /// 会员手机号
  42 + /// </summary>
  43 + public string memberPhone { get; set; }
  44 +
40 45 /// <summary>
41 46 /// 会员名称
42 47 /// </summary>
43 48 public string hymc { get; set; }
44   -
  49 +
45 50 /// <summary>
46 51 /// 顾客类型
47 52 /// </summary>
48 53 public string gklx { get; set; }
49   -
  54 +
50 55 /// <summary>
51 56 /// 消费金额
52 57 /// </summary>
53 58 public string xfje { get; set; }
54   -
  59 +
55 60 /// <summary>
56 61 /// 手工费用
57 62 /// </summary>
58 63 public string sgfy { get; set; }
59   -
  64 +
60 65 /// <summary>
61 66 /// 是否有科技部
62 67 /// </summary>
63 68 public string sfykjb { get; set; }
64   -
  69 +
65 70 /// <summary>
66 71 /// 耗卡时间
67 72 /// </summary>
68 73 public DateTime? hksj { get; set; }
69   -
  74 +
70 75 /// <summary>
71 76 /// 操作人员
72 77 /// </summary>
73 78 public string czry { get; set; }
74   -
  79 +
75 80 }
76 81 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkMemberCardUsageOutput.cs 0 → 100644
  1 +using System;
  2 +using System.Collections.Generic;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqXhHyhk
  5 +{
  6 + /// <summary>
  7 + /// 会员耗卡记录输出
  8 + /// </summary>
  9 + public class LqXhHyhkMemberCardUsageOutput
  10 + {
  11 + /// <summary>
  12 + /// 耗卡记录ID
  13 + /// </summary>
  14 + public string Id { get; set; }
  15 +
  16 + /// <summary>
  17 + /// 会员ID
  18 + /// </summary>
  19 + public string MemberId { get; set; }
  20 +
  21 + /// <summary>
  22 + /// 会员姓名
  23 + /// </summary>
  24 + public string MemberName { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 门店ID
  28 + /// </summary>
  29 + public string StoreId { get; set; }
  30 +
  31 + /// <summary>
  32 + /// 门店名称
  33 + /// </summary>
  34 + public string StoreName { get; set; }
  35 +
  36 + /// <summary>
  37 + /// 耗卡时间
  38 + /// </summary>
  39 + public DateTime? UsageDate { get; set; }
  40 +
  41 + /// <summary>
  42 + /// 消费金额
  43 + /// </summary>
  44 + public decimal? TotalAmount { get; set; }
  45 +
  46 + /// <summary>
  47 + /// 备注
  48 + /// </summary>
  49 + public string Remarks { get; set; }
  50 +
  51 + /// <summary>
  52 + /// 创建时间
  53 + /// </summary>
  54 + public DateTime? CreateTime { get; set; }
  55 +
  56 + /// <summary>
  57 + /// 品项明细列表
  58 + /// </summary>
  59 + public List<LqXhHyhkMemberCardUsageItemDetail> ItemDetails { get; set; } = new List<LqXhHyhkMemberCardUsageItemDetail>();
  60 + }
  61 +
  62 + /// <summary>
  63 + /// 会员耗卡记录品项明细
  64 + /// </summary>
  65 + public class LqXhHyhkMemberCardUsageItemDetail
  66 + {
  67 + /// <summary>
  68 + /// 明细ID
  69 + /// </summary>
  70 + public string Id { get; set; }
  71 +
  72 + /// <summary>
  73 + /// 品项ID
  74 + /// </summary>
  75 + public string ItemId { get; set; }
  76 +
  77 + /// <summary>
  78 + /// 品项名称
  79 + /// </summary>
  80 + public string ItemName { get; set; }
  81 +
  82 + /// <summary>
  83 + /// 单价
  84 + /// </summary>
  85 + public decimal? UnitPrice { get; set; }
  86 +
  87 + /// <summary>
  88 + /// 项目次数
  89 + /// </summary>
  90 + public int? ProjectNumber { get; set; }
  91 +
  92 + /// <summary>
  93 + /// 合计金额
  94 + /// </summary>
  95 + public decimal? TotalPrice { get; set; }
  96 +
  97 + /// <summary>
  98 + /// 来源类型
  99 + /// </summary>
  100 + public string SourceType { get; set; }
  101 +
  102 + /// <summary>
  103 + /// 创建时间
  104 + /// </summary>
  105 + public DateTime? CreateTime { get; set; }
  106 + }
  107 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkMemberCardUsageQueryInput.cs 0 → 100644
  1 +using NCC.Common.Filter;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqXhHyhk
  5 +{
  6 + /// <summary>
  7 + /// 会员耗卡记录查询输入
  8 + /// </summary>
  9 + public class LqXhHyhkMemberCardUsageQueryInput : PageInputBase
  10 + {
  11 + /// <summary>
  12 + /// 会员ID
  13 + /// </summary>
  14 + [Required(ErrorMessage = "会员ID不能为空")]
  15 + public string MemberId { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 门店ID
  19 + /// </summary>
  20 + public string StoreId { get; set; }
  21 +
  22 + /// <summary>
  23 + /// 开始时间
  24 + /// </summary>
  25 + public System.DateTime? StartTime { get; set; }
  26 +
  27 + /// <summary>
  28 + /// 结束时间
  29 + /// </summary>
  30 + public System.DateTime? EndTime { get; set; }
  31 + }
  32 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhJksyjQueryInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +using NCC.Common.Filter;
  4 +
  5 +namespace NCC.Extend.Entitys.Dto.LqXhHyhk
  6 +{
  7 + /// <summary>
  8 + /// 健康师业绩查询输入
  9 + /// </summary>
  10 + public class LqXhJksyjQueryInput : PageInputBase
  11 + {
  12 + /// <summary>
  13 + /// 开单记录ID
  14 + /// </summary>
  15 + [Display(Name = "开单记录ID", Description = "关联的开单记录ID")]
  16 + public string Glkdbh { get; set; }
  17 +
  18 + /// <summary>
  19 + /// 健康师ID
  20 + /// </summary>
  21 + [Display(Name = "健康师ID", Description = "健康师用户ID,可选")]
  22 + public string JksId { get; set; }
  23 +
  24 + /// <summary>
  25 + /// 开始时间
  26 + /// </summary>
  27 + [Display(Name = "开始时间", Description = "查询开始时间")]
  28 + public DateTime? StartTime { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 结束时间
  32 + /// </summary>
  33 + [Display(Name = "结束时间", Description = "查询结束时间")]
  34 + public DateTime? EndTime { get; set; }
  35 + }
  36 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhJksyj/LqXhJksyjInfoOutput.cs
... ... @@ -11,27 +11,27 @@ namespace NCC.Extend.Entitys.Dto.LqXhJksyj
11 11 /// 业绩编号
12 12 /// </summary>
13 13 public string id { get; set; }
14   -
  14 +
15 15 /// <summary>
16 16 /// 关联开单编号
17 17 /// </summary>
18 18 public string glkdbh { get; set; }
19   -
  19 +
20 20 /// <summary>
21 21 /// 健康师
22 22 /// </summary>
23 23 public string jks { get; set; }
24   -
  24 +
25 25 /// <summary>
26 26 /// 健康师姓名
27 27 /// </summary>
28 28 public string jksxm { get; set; }
29   -
  29 +
30 30 /// <summary>
31 31 /// 健康师账号
32 32 /// </summary>
33 33 public string jkszh { get; set; }
34   -
  34 +
35 35 /// <summary>
36 36 /// 健康师业绩
37 37 /// </summary>
... ... @@ -43,6 +43,11 @@ namespace NCC.Extend.Entitys.Dto.LqXhJksyj
43 43 public DateTime? yjsj { get; set; }
44 44  
45 45 /// <summary>
  46 + /// 门店
  47 + /// </summary>
  48 + public string storeName { get; set; }
  49 +
  50 + /// <summary>
46 51 /// 金三角id
47 52 /// </summary>
48 53 public string jsjId { get; set; }
... ... @@ -61,5 +66,16 @@ namespace NCC.Extend.Entitys.Dto.LqXhJksyj
61 66 /// 耗卡品项次数
62 67 /// </summary>
63 68 public decimal? kdpxNumber { get; set; }
  69 +
  70 + /// <summary>
  71 + /// 会员id
  72 + /// </summary>
  73 + public string memberId { get; set; }
  74 +
  75 +
  76 + /// <summary>
  77 + /// 会员名称
  78 + /// </summary>
  79 + public string memberName { get; set; }
64 80 }
65 81 }
66 82 \ No newline at end of file
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhmxb/LqXhmxbCrInput.cs deleted
1   -using System;
2   -using System.Collections.Generic;
3   -
4   -namespace NCC.Extend.Entitys.Dto.LqXhmxb
5   -{
6   - /// <summary>
7   - /// 消耗明细表修改输入参数
8   - /// </summary>
9   - public class LqXhmxbCrInput
10   - {
11   - /// <summary>
12   - /// 消耗编号
13   - /// </summary>
14   - public string id { get; set; }
15   -
16   - /// <summary>
17   - /// 门店编号
18   - /// </summary>
19   - public string mdbh { get; set; }
20   -
21   - /// <summary>
22   - /// 门店名称
23   - /// </summary>
24   - public string mdmc { get; set; }
25   -
26   - /// <summary>
27   - /// 部门编号
28   - /// </summary>
29   - public string bmbh { get; set; }
30   -
31   - /// <summary>
32   - /// 部门名称
33   - /// </summary>
34   - public string bmmc { get; set; }
35   -
36   - /// <summary>
37   - /// 员工编号
38   - /// </summary>
39   - public string ygbh { get; set; }
40   -
41   - /// <summary>
42   - /// 员工名称
43   - /// </summary>
44   - public string ygmc { get; set; }
45   -
46   - /// <summary>
47   - /// 项目数
48   - /// </summary>
49   - public string xms { get; set; }
50   -
51   - /// <summary>
52   - /// 消耗
53   - /// </summary>
54   - public string xh { get; set; }
55   -
56   - /// <summary>
57   - /// 手工
58   - /// </summary>
59   - public string sg { get; set; }
60   -
61   - /// <summary>
62   - /// 其它手工1
63   - /// </summary>
64   - public string qtsg1 { get; set; }
65   -
66   - /// <summary>
67   - /// 其它手工2
68   - /// </summary>
69   - public string qtsg2 { get; set; }
70   -
71   - /// <summary>
72   - /// 其它手工3
73   - /// </summary>
74   - public string qtsg3 { get; set; }
75   -
76   - /// <summary>
77   - /// 手工合计
78   - /// </summary>
79   - public string sghj { get; set; }
80   -
81   - }
82   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhmxb/LqXhmxbInfoOutput.cs deleted
1   -using System;
2   -using System.Collections.Generic;
3   -
4   -namespace NCC.Extend.Entitys.Dto.LqXhmxb
5   -{
6   - /// <summary>
7   - /// 消耗明细表输出参数
8   - /// </summary>
9   - public class LqXhmxbInfoOutput
10   - {
11   - /// <summary>
12   - /// 消耗编号
13   - /// </summary>
14   - public string id { get; set; }
15   -
16   - /// <summary>
17   - /// 门店编号
18   - /// </summary>
19   - public string mdbh { get; set; }
20   -
21   - /// <summary>
22   - /// 门店名称
23   - /// </summary>
24   - public string mdmc { get; set; }
25   -
26   - /// <summary>
27   - /// 部门编号
28   - /// </summary>
29   - public string bmbh { get; set; }
30   -
31   - /// <summary>
32   - /// 部门名称
33   - /// </summary>
34   - public string bmmc { get; set; }
35   -
36   - /// <summary>
37   - /// 员工编号
38   - /// </summary>
39   - public string ygbh { get; set; }
40   -
41   - /// <summary>
42   - /// 员工名称
43   - /// </summary>
44   - public string ygmc { get; set; }
45   -
46   - /// <summary>
47   - /// 项目数
48   - /// </summary>
49   - public string xms { get; set; }
50   -
51   - /// <summary>
52   - /// 消耗
53   - /// </summary>
54   - public string xh { get; set; }
55   -
56   - /// <summary>
57   - /// 手工
58   - /// </summary>
59   - public string sg { get; set; }
60   -
61   - /// <summary>
62   - /// 其它手工1
63   - /// </summary>
64   - public string qtsg1 { get; set; }
65   -
66   - /// <summary>
67   - /// 其它手工2
68   - /// </summary>
69   - public string qtsg2 { get; set; }
70   -
71   - /// <summary>
72   - /// 其它手工3
73   - /// </summary>
74   - public string qtsg3 { get; set; }
75   -
76   - /// <summary>
77   - /// 手工合计
78   - /// </summary>
79   - public string sghj { get; set; }
80   -
81   - }
82   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhmxb/LqXhmxbListOutput.cs deleted
1   -using System;
2   -
3   -namespace NCC.Extend.Entitys.Dto.LqXhmxb
4   -{
5   - /// <summary>
6   - /// 消耗明细表输入参数
7   - /// </summary>
8   - public class LqXhmxbListOutput
9   - {
10   - /// <summary>
11   - /// 消耗编号
12   - /// </summary>
13   - public string id { get; set; }
14   -
15   - /// <summary>
16   - /// 门店编号
17   - /// </summary>
18   - public string mdbh { get; set; }
19   -
20   - /// <summary>
21   - /// 门店名称
22   - /// </summary>
23   - public string mdmc { get; set; }
24   -
25   - /// <summary>
26   - /// 部门编号
27   - /// </summary>
28   - public string bmbh { get; set; }
29   -
30   - /// <summary>
31   - /// 部门名称
32   - /// </summary>
33   - public string bmmc { get; set; }
34   -
35   - /// <summary>
36   - /// 员工编号
37   - /// </summary>
38   - public string ygbh { get; set; }
39   -
40   - /// <summary>
41   - /// 员工名称
42   - /// </summary>
43   - public string ygmc { get; set; }
44   -
45   - /// <summary>
46   - /// 项目数
47   - /// </summary>
48   - public string xms { get; set; }
49   -
50   - /// <summary>
51   - /// 消耗
52   - /// </summary>
53   - public string xh { get; set; }
54   -
55   - /// <summary>
56   - /// 手工
57   - /// </summary>
58   - public string sg { get; set; }
59   -
60   - /// <summary>
61   - /// 其它手工1
62   - /// </summary>
63   - public string qtsg1 { get; set; }
64   -
65   - /// <summary>
66   - /// 其它手工2
67   - /// </summary>
68   - public string qtsg2 { get; set; }
69   -
70   - /// <summary>
71   - /// 其它手工3
72   - /// </summary>
73   - public string qtsg3 { get; set; }
74   -
75   - /// <summary>
76   - /// 手工合计
77   - /// </summary>
78   - public string sghj { get; set; }
79   -
80   - }
81   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhmxb/LqXhmxbListQueryInput.cs deleted
1   -using NCC.Common.Filter;
2   -using System.Collections.Generic;
3   -
4   -namespace NCC.Extend.Entitys.Dto.LqXhmxb
5   -{
6   - /// <summary>
7   - /// 消耗明细表列表查询输入
8   - /// </summary>
9   - public class LqXhmxbListQueryInput : PageInputBase
10   - {
11   - /// <summary>
12   - /// 选择导出数据key
13   - /// </summary>
14   - public string selectKey { get; set; }
15   -
16   - /// <summary>
17   - ///
18   - /// </summary>
19   - public int dataType { get; set; }
20   -
21   -
22   - /// <summary>
23   - /// 消耗编号
24   - /// </summary>
25   - public string id { get; set; }
26   -
27   - /// <summary>
28   - /// 门店编号
29   - /// </summary>
30   - public string mdbh { get; set; }
31   -
32   - /// <summary>
33   - /// 门店名称
34   - /// </summary>
35   - public string mdmc { get; set; }
36   -
37   - /// <summary>
38   - /// 部门编号
39   - /// </summary>
40   - public string bmbh { get; set; }
41   -
42   - /// <summary>
43   - /// 部门名称
44   - /// </summary>
45   - public string bmmc { get; set; }
46   -
47   - /// <summary>
48   - /// 员工编号
49   - /// </summary>
50   - public string ygbh { get; set; }
51   -
52   - /// <summary>
53   - /// 员工名称
54   - /// </summary>
55   - public string ygmc { get; set; }
56   -
57   - /// <summary>
58   - /// 项目数
59   - /// </summary>
60   - public string xms { get; set; }
61   -
62   - /// <summary>
63   - /// 消耗
64   - /// </summary>
65   - public string xh { get; set; }
66   -
67   - /// <summary>
68   - /// 手工
69   - /// </summary>
70   - public string sg { get; set; }
71   -
72   - /// <summary>
73   - /// 其它手工1
74   - /// </summary>
75   - public string qtsg1 { get; set; }
76   -
77   - /// <summary>
78   - /// 其它手工2
79   - /// </summary>
80   - public string qtsg2 { get; set; }
81   -
82   - /// <summary>
83   - /// 其它手工3
84   - /// </summary>
85   - public string qtsg3 { get; set; }
86   -
87   - /// <summary>
88   - /// 手工合计
89   - /// </summary>
90   - public string sghj { get; set; }
91   -
92   - }
93   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaCrInput.cs deleted
1   -using System;
2   -using System.ComponentModel.DataAnnotations;
3   -
4   -namespace NCC.Extend.Entitys.Dto.LqYxhdfa
5   -{
6   - /// <summary>
7   - /// 营销活动方案创建输入参数
8   - /// </summary>
9   - public class LqYxhdfaCrInput
10   - {
11   - /// <summary>
12   - /// 方案编号
13   - /// </summary>
14   - public string id { get; set; }
15   -
16   - /// <summary>
17   - /// 营销活动编号
18   - /// </summary>
19   - [Required(ErrorMessage = "营销活动编号不能为空")]
20   - public string yxhdbh { get; set; }
21   -
22   - /// <summary>
23   - /// 活动名称
24   - /// </summary>
25   - [Required(ErrorMessage = "活动名称不能为空")]
26   - [StringLength(200, ErrorMessage = "活动名称长度不能超过200个字符")]
27   - public string hdmc { get; set; }
28   -
29   - /// <summary>
30   - /// 张数奖
31   - /// </summary>
32   - public string zsj { get; set; }
33   -
34   - /// <summary>
35   - /// 金额奖
36   - /// </summary>
37   - public string jej { get; set; }
38   - }
39   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaListOutput.cs deleted
1   -using System;
2   -
3   -namespace NCC.Extend.Entitys.Dto.LqYxhdfa
4   -{
5   - /// <summary>
6   - /// 营销活动方案输入参数
7   - /// </summary>
8   - public class LqYxhdfaListOutput
9   - {
10   - /// <summary>
11   - /// 方案编号
12   - /// </summary>
13   - public string id { get; set; }
14   -
15   - /// <summary>
16   - /// 营销活动编号
17   - /// </summary>
18   - public string yxhdbh { get; set; }
19   -
20   - /// <summary>
21   - /// 活动名称
22   - /// </summary>
23   - public string hdmc { get; set; }
24   -
25   - /// <summary>
26   - /// 张数奖
27   - /// </summary>
28   - public string zsj { get; set; }
29   -
30   - /// <summary>
31   - /// 金额奖
32   - /// </summary>
33   - public string jej { get; set; }
34   -
35   - }
36   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaUpInput.cs deleted
1   -using System;
2   -using System.Collections.Generic;
3   -
4   -namespace NCC.Extend.Entitys.Dto.LqYxhdfa
5   -{
6   - /// <summary>
7   - /// 营销活动方案更新输入参数
8   - /// </summary>
9   - public class LqYxhdfaUpInput : LqYxhdfaCrInput
10   - {
11   - /// <summary>
12   - /// 方案编号
13   - /// </summary>
14   - public string id { get; set; }
15   -
16   - }
17   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/README.md
... ... @@ -65,7 +65,7 @@
65 65 - `lq_tkjlb/` - 拓客记录表
66 66 - (已删除) `lq_tk_xsc/` - 拓客记录表
67 67 - `lq_yaoyjl/` - 邀约记录
68   -- `lq_yxhdfa/` - 营销活动方案
  68 +- (已删除) `lq_yxhdfa/` - 营销活动方案
69 69 - `lq_yyjl/` - 预约记录
70 70 - `lq_cpxx/` - 产品资料
71 71 - `lq_gz/` - 工资全字段
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_hytk/LqHytkHytkEntity.cs
1 1 using NCC.Common.Const;
  2 +using NCC.Extend.Entitys.Enum;
2 3 using SqlSugar;
3 4 using System;
4 5  
... ... @@ -16,127 +17,125 @@ namespace NCC.Extend.Entitys.lq_hytk_hytk
16 17 /// </summary>
17 18 [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
18 19 public string Id { get; set; }
19   -
  20 +
20 21 /// <summary>
21 22 /// 门店
22 23 /// </summary>
23   - [SugarColumn(ColumnName = "md")]
  24 + [SugarColumn(ColumnName = "md")]
24 25 public string Md { get; set; }
25   -
  26 +
26 27 /// <summary>
27 28 /// 门店编号
28 29 /// </summary>
29   - [SugarColumn(ColumnName = "mdbh")]
  30 + [SugarColumn(ColumnName = "mdbh")]
30 31 public string Mdbh { get; set; }
31   -
  32 +
32 33 /// <summary>
33 34 /// 门店名称
34 35 /// </summary>
35   - [SugarColumn(ColumnName = "mdmc")]
  36 + [SugarColumn(ColumnName = "mdmc")]
36 37 public string Mdmc { get; set; }
37   -
  38 +
38 39 /// <summary>
39 40 /// 会员
40 41 /// </summary>
41   - [SugarColumn(ColumnName = "hy")]
  42 + [SugarColumn(ColumnName = "hy")]
42 43 public string Hy { get; set; }
43   -
  44 +
44 45 /// <summary>
45 46 /// 会员姓名
46 47 /// </summary>
47   - [SugarColumn(ColumnName = "hymc")]
  48 + [SugarColumn(ColumnName = "hymc")]
48 49 public string Hymc { get; set; }
49   -
  50 +
50 51 /// <summary>
51 52 /// 会员账号
52 53 /// </summary>
53   - [SugarColumn(ColumnName = "hyzh")]
  54 + [SugarColumn(ColumnName = "hyzh")]
54 55 public string Hyzh { get; set; }
55   -
  56 +
56 57 /// <summary>
57 58 /// 顾客类型
58 59 /// </summary>
59   - [SugarColumn(ColumnName = "gklx")]
  60 + [SugarColumn(ColumnName = "gklx")]
60 61 public string Gklx { get; set; }
61   -
  62 +
62 63 /// <summary>
63 64 /// 退卡总金额
64 65 /// </summary>
65   - [SugarColumn(ColumnName = "tkje")]
  66 + [SugarColumn(ColumnName = "tkje")]
66 67 public decimal? Tkje { get; set; }
67   -
  68 +
68 69 /// <summary>
69 70 /// 手工费用
70 71 /// </summary>
71   - [SugarColumn(ColumnName = "sgfy")]
  72 + [SugarColumn(ColumnName = "sgfy")]
72 73 public decimal? Sgfy { get; set; }
73   -
  74 +
74 75 /// <summary>
75 76 /// 备注
76 77 /// </summary>
77   - [SugarColumn(ColumnName = "bz")]
  78 + [SugarColumn(ColumnName = "bz")]
78 79 public string Bz { get; set; }
79   -
  80 +
80 81 /// <summary>
81 82 /// 退卡时间
82 83 /// </summary>
83   - [SugarColumn(ColumnName = "tksj")]
  84 + [SugarColumn(ColumnName = "tksj")]
84 85 public DateTime? Tksj { get; set; }
85   -
  86 +
86 87 /// <summary>
87 88 /// 操作人员
88 89 /// </summary>
89   - [SugarColumn(ColumnName = "czry")]
  90 + [SugarColumn(ColumnName = "czry")]
90 91 public string Czry { get; set; }
91   -
  92 +
92 93 /// <summary>
93 94 /// 退卡状态
94 95 /// </summary>
95   - [SugarColumn(ColumnName = "tkzt")]
  96 + [SugarColumn(ColumnName = "tkzt")]
96 97 public string Tkzt { get; set; }
97   -
  98 +
98 99 /// <summary>
99 100 /// 退卡原因
100 101 /// </summary>
101   - [SugarColumn(ColumnName = "tkyy")]
  102 + [SugarColumn(ColumnName = "tkyy")]
102 103 public string Tkyy { get; set; }
103 104  
104   -
105 105 /// <summary>
106 106 /// 退卡附件
107 107 /// </summary>
108   - [SugarColumn(ColumnName = "F_FileUrl")]
  108 + [SugarColumn(ColumnName = "F_FileUrl")]
109 109 public string FileUrl { get; set; }
110   -
  110 +
111 111 /// <summary>
112 112 /// 创建时间
113 113 /// </summary>
114   - [SugarColumn(ColumnName = "F_CreateTime")]
  114 + [SugarColumn(ColumnName = "F_CreateTime")]
115 115 public DateTime? F_CreateTime { get; set; }
116   -
  116 +
117 117 /// <summary>
118 118 /// 创建用户
119 119 /// </summary>
120   - [SugarColumn(ColumnName = "F_CreateUser")]
  120 + [SugarColumn(ColumnName = "F_CreateUser")]
121 121 public string F_CreateUser { get; set; }
122   -
  122 +
123 123 /// <summary>
124 124 /// 修改时间
125 125 /// </summary>
126   - [SugarColumn(ColumnName = "F_ModifyTime")]
  126 + [SugarColumn(ColumnName = "F_ModifyTime")]
127 127 public DateTime? F_ModifyTime { get; set; }
128   -
  128 +
129 129 /// <summary>
130 130 /// 修改用户
131 131 /// </summary>
132   - [SugarColumn(ColumnName = "F_ModifyUser")]
  132 + [SugarColumn(ColumnName = "F_ModifyUser")]
133 133 public string F_ModifyUser { get; set; }
134   -
  134 +
135 135 /// <summary>
136   - /// 删除标记
  136 + /// 是否有效
137 137 /// </summary>
138   - [SugarColumn(ColumnName = "F_DeleteMark")]
139   - public int? F_DeleteMark { get; set; }
140   -
  138 + [SugarColumn(ColumnName = "F_IsEffective")]
  139 + public int IsEffective { get; set; } = StatusEnum.有效.GetHashCode();
141 140 }
142 141 }
143 142 \ No newline at end of file
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_jksyj/LqHytkJksyjEntity.cs
1 1 using System;
2 2 using NCC.Common.Const;
  3 +using NCC.Extend.Entitys.Enum;
3 4 using SqlSugar;
4 5  
5 6 namespace NCC.Extend.Entitys.lq_hytk_jksyj
... ... @@ -102,15 +103,15 @@ namespace NCC.Extend.Entitys.lq_hytk_jksyj
102 103 public string F_ModifyUser { get; set; }
103 104  
104 105 /// <summary>
105   - /// 删除标记
  106 + /// 退卡品相表id
106 107 /// </summary>
107   - [SugarColumn(ColumnName = "F_DeleteMark")]
108   - public int? F_DeleteMark { get; set; }
  108 + [SugarColumn(ColumnName = "F_CardReturn")]
  109 + public string CardReturn { get; set; }
109 110  
110 111 /// <summary>
111   - /// 退卡品项明细id
  112 + /// 是否有效
112 113 /// </summary>
113   - [SugarColumn(ColumnName = "F_CardReturn")]
114   - public string CardReturn { get; set; }
  114 + [SugarColumn(ColumnName = "F_IsEffective")]
  115 + public int IsEffective { get; set; } = StatusEnum.有效.GetHashCode();
115 116 }
116 117 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_kjbsyj/LqHytkKjbsyjEntity.cs
1 1 using System;
2 2 using NCC.Common.Const;
  3 +using NCC.Extend.Entitys.Enum;
3 4 using SqlSugar;
4 5  
5 6 namespace NCC.Extend.Entitys.lq_hytk_kjbsyj
... ... @@ -95,16 +96,17 @@ namespace NCC.Extend.Entitys.lq_hytk_kjbsyj
95 96 [SugarColumn(ColumnName = "F_ModifyUser")]
96 97 public string F_ModifyUser { get; set; }
97 98  
98   - /// <summary>
99   - /// 删除标记
100   - /// </summary>
101   - [SugarColumn(ColumnName = "F_DeleteMark")]
102   - public int? F_DeleteMark { get; set; }
103 99  
104 100 /// <summary>
105   - /// 退卡品项明细id
  101 + /// 退卡品项明细ID
106 102 /// </summary>
107 103 [SugarColumn(ColumnName = "F_CardReturn")]
108 104 public string CardReturn { get; set; }
  105 +
  106 + /// <summary>
  107 + /// 是否有效
  108 + /// </summary>
  109 + [SugarColumn(ColumnName = "F_IsEffective")]
  110 + public int IsEffective { get; set; } = StatusEnum.有效.GetHashCode();
109 111 }
110 112 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_mx/LqHytkMxEntity.cs
... ... @@ -25,7 +25,7 @@ namespace NCC.Extend.Entitys.lq_hytk_mx
25 25 public string RefundInfoId { get; set; }
26 26  
27 27 /// <summary>
28   - /// 退卡记录Id
  28 + /// 开单品项明细表id
29 29 /// </summary>
30 30 [SugarColumn(ColumnName = "F_BillingItemId")]
31 31 public string BillingItemId { get; set; }
... ... @@ -68,12 +68,6 @@ namespace NCC.Extend.Entitys.lq_hytk_mx
68 68 public int ProjectNumber { get; set; }
69 69  
70 70 /// <summary>
71   - /// 是否有效
72   - /// </summary>
73   - [SugarColumn(ColumnName = "F_IsEnabled")]
74   - public int IsEnabled { get; set; } = StatusEnum.有效.GetHashCode();
75   -
76   - /// <summary>
77 71 /// 来源类型
78 72 /// </summary>
79 73 [SugarColumn(ColumnName = "F_SourceType")]
... ... @@ -110,9 +104,9 @@ namespace NCC.Extend.Entitys.lq_hytk_mx
110 104 public string ModifyUser { get; set; }
111 105  
112 106 /// <summary>
113   - /// 删除标记
  107 + /// 是否有效
114 108 /// </summary>
115   - [SugarColumn(ColumnName = "F_DeleteMark")]
116   - public int? DeleteMark { get; set; }
  109 + [SugarColumn(ColumnName = "F_IsEffective")]
  110 + public int IsEffective { get; set; } = StatusEnum.有效.GetHashCode();
117 111 }
118 112 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_jksyj/LqKdJksyjEntity.cs
... ... @@ -70,5 +70,11 @@ namespace NCC.Extend.Entitys.lq_kd_jksyj
70 70 /// </summary>
71 71 [SugarColumn(ColumnName = "F_IsEffective")]
72 72 public int IsEffective { get; set; } = 1;
  73 +
  74 + /// <summary>
  75 + /// 营销活动ID
  76 + /// </summary>
  77 + [SugarColumn(ColumnName = "F_ActivityId")]
  78 + public string ActivityId { get; set; }
73 79 }
74 80 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kdjlb/LqKdKdjlbEntity.cs
... ... @@ -217,5 +217,29 @@ namespace NCC.Extend.Entitys.lq_kd_kdjlb
217 217 [SugarColumn(ColumnName = "F_CancelRefRemarks")]
218 218 public string CancelRefRemarks { get; set; }
219 219  
  220 +
  221 + /// <summary>
  222 + /// 营销活动ID
  223 + /// </summary>
  224 + [SugarColumn(ColumnName = "F_ActivityId")]
  225 + public string ActivityId { get; set; }
  226 +
  227 + /// <summary>
  228 + /// 已缴欠款
  229 + /// </summary>
  230 + [SugarColumn(ColumnName = "F_PaidDebt")]
  231 + public decimal PaidDebt { get; set; }
  232 +
  233 + /// <summary>
  234 + /// 补缴开单ID
  235 + /// </summary>
  236 + [SugarColumn(ColumnName = "F_SupplementBillingId")]
  237 + public string SupplementBillingId { get; set; }
  238 +
  239 + /// <summary>
  240 + /// 补缴金额
  241 + /// </summary>
  242 + [SugarColumn(ColumnName = "F_SupplementAmount")]
  243 + public decimal SupplementAmount { get; set; }
220 244 }
221 245 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kjbsyj/LqKdKjbsyjEntity.cs
... ... @@ -70,5 +70,11 @@ namespace NCC.Extend.Entitys.lq_kd_kjbsyj
70 70 /// </summary>
71 71 [SugarColumn(ColumnName = "F_IsEffective")]
72 72 public int IsEffective { get; set; } = 1;
  73 +
  74 + /// <summary>
  75 + /// 营销活动ID
  76 + /// </summary>
  77 + [SugarColumn(ColumnName = "F_ActivityId")]
  78 + public string ActivityId { get; set; }
73 79 }
74 80 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_pxmx/LqKdPxmxEntity.cs
... ... @@ -101,5 +101,11 @@ namespace NCC.Extend.Entitys.lq_kd_pxmx
101 101 /// </summary>
102 102 [SugarColumn(ColumnName = "F_Remark")]
103 103 public string Remark { get; set; }
  104 +
  105 + /// <summary>
  106 + /// 营销活动ID
  107 + /// </summary>
  108 + [SugarColumn(ColumnName = "F_ActivityId")]
  109 + public string ActivityId { get; set; }
104 110 }
105 111 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_khxx/LqKhxxEntity.cs
1 1 using System;
2 2 using NCC.Common.Const;
  3 +using NCC.Extend.Entitys.Enum;
3 4 using SqlSugar;
4 5  
5 6 namespace NCC.Extend.Entitys.lq_khxx
... ... @@ -140,5 +141,11 @@ namespace NCC.Extend.Entitys.lq_khxx
140 141 [SugarColumn(ColumnName = "F_SubHealthUser")]
141 142 public string SubHealthUser { get; set; }
142 143  
  144 + /// <summary>
  145 + /// 是否有效
  146 + /// </summary>
  147 + [SugarColumn(ColumnName = "F_IsEffective")]
  148 + public int IsEffective { get; set; } = StatusEnum.有效.GetHashCode();
  149 +
143 150 }
144 151 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_package_info/LqPackageInfoEntity.cs 0 → 100644
  1 +using NCC.Common.Const;
  2 +using SqlSugar;
  3 +using System;
  4 +
  5 +namespace NCC.Extend.Entitys.lq_package_info
  6 +{
  7 + /// <summary>
  8 + /// 营销活动表
  9 + /// </summary>
  10 + [SugarTable("lq_marketing_activity")]
  11 + [Tenant(ClaimConst.TENANT_ID)]
  12 + public class LqPackageInfoEntity
  13 + {
  14 + /// <summary>
  15 + /// 营销活动ID
  16 + /// </summary>
  17 + [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
  18 + public string Id { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 活动名称
  22 + /// </summary>
  23 + [SugarColumn(ColumnName = "F_ActivityName")]
  24 + public string ActivityName { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 活动描述
  28 + /// </summary>
  29 + [SugarColumn(ColumnName = "F_ActivityDesc")]
  30 + public string ActivityDesc { get; set; }
  31 +
  32 + /// <summary>
  33 + /// 活动开始时间
  34 + /// </summary>
  35 + [SugarColumn(ColumnName = "F_StartTime")]
  36 + public DateTime StartTime { get; set; }
  37 +
  38 + /// <summary>
  39 + /// 活动结束时间
  40 + /// </summary>
  41 + [SugarColumn(ColumnName = "F_EndTime")]
  42 + public DateTime EndTime { get; set; }
  43 +
  44 + /// <summary>
  45 + /// 至少购买品项数量
  46 + /// </summary>
  47 + [SugarColumn(ColumnName = "F_MinItemQuantity")]
  48 + public int MinItemQuantity { get; set; } = 1;
  49 +
  50 + /// <summary>
  51 + /// 活动规则说明
  52 + /// </summary>
  53 + [SugarColumn(ColumnName = "F_ActivityRules")]
  54 + public string ActivityRules { get; set; }
  55 +
  56 + /// <summary>
  57 + /// 活动图片(JSON格式)
  58 + /// </summary>
  59 + [SugarColumn(ColumnName = "F_ActivityImages")]
  60 + public string ActivityImages { get; set; }
  61 +
  62 + /// <summary>
  63 + /// 排序
  64 + /// </summary>
  65 + [SugarColumn(ColumnName = "F_SortOrder")]
  66 + public int SortOrder { get; set; } = 0;
  67 +
  68 + /// <summary>
  69 + /// 创建时间
  70 + /// </summary>
  71 + [SugarColumn(ColumnName = "F_CreateTime")]
  72 + public DateTime CreateTime { get; set; }
  73 +
  74 + /// <summary>
  75 + /// 更新时间
  76 + /// </summary>
  77 + [SugarColumn(ColumnName = "F_UpdateTime")]
  78 + public DateTime UpdateTime { get; set; }
  79 +
  80 + /// <summary>
  81 + /// 创建人
  82 + /// </summary>
  83 + [SugarColumn(ColumnName = "F_CreateUser")]
  84 + public string CreateUser { get; set; }
  85 +
  86 + /// <summary>
  87 + /// 更新人
  88 + /// </summary>
  89 + [SugarColumn(ColumnName = "F_UpdateUser")]
  90 + public string UpdateUser { get; set; }
  91 +
  92 + /// <summary>
  93 + /// 是否有效
  94 + /// </summary>
  95 + [SugarColumn(ColumnName = "F_IsEffective")]
  96 + public int IsEffective { get; set; } = 1;
  97 + }
  98 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_qkbj/LqKdQkbjEntity.cs renamed to netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_package_item_detail/LqPackageItemDetailEntity.cs
1   -using System;
2 1 using NCC.Common.Const;
3 2 using SqlSugar;
  3 +using System;
4 4  
5   -namespace NCC.Extend.Entitys.lq_kd_qkbj
  5 +namespace NCC.Extend.Entitys.lq_package_item_detail
6 6 {
7 7 /// <summary>
8   - /// 开单欠款补缴记录
  8 + /// 营销活动品项明细
9 9 /// </summary>
10   - [SugarTable("lq_kd_qkbj")]
  10 + [SugarTable("lq_marketing_activity_item_detail")]
11 11 [Tenant(ClaimConst.TENANT_ID)]
12   - public class LqKdQkbjEntity
  12 + public class LqPackageItemDetailEntity
13 13 {
14 14 /// <summary>
15   - /// 主键
  15 + /// 明细ID
16 16 /// </summary>
17 17 [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
18 18 public string Id { get; set; }
19 19  
20 20 /// <summary>
21   - /// 开单ID
22   - /// </summary>
23   - [SugarColumn(ColumnName = "F_BillingId")]
24   - public string BillingId { get; set; }
25   -
26   - /// <summary>
27   - /// 补缴金额
28   - /// </summary>
29   - [SugarColumn(ColumnName = "F_PaymentAmount")]
30   - public decimal PaymentAmount { get; set; }
31   -
32   - /// <summary>
33   - /// 补缴方式
34   - /// </summary>
35   - [SugarColumn(ColumnName = "F_PaymentMethod")]
36   - public string PaymentMethod { get; set; }
37   -
38   - /// <summary>
39   - /// 补缴时间
  21 + /// 营销活动ID
40 22 /// </summary>
41   - [SugarColumn(ColumnName = "F_PaymentTime")]
42   - public DateTime PaymentTime { get; set; }
  23 + [SugarColumn(ColumnName = "F_ActivityId")]
  24 + public string ActivityId { get; set; }
43 25  
44 26 /// <summary>
45   - /// 补缴操作人
  27 + /// 品项ID
46 28 /// </summary>
47   - [SugarColumn(ColumnName = "F_PaymentUser")]
48   - public string PaymentUser { get; set; }
  29 + [SugarColumn(ColumnName = "F_ItemId")]
  30 + public string ItemId { get; set; }
49 31  
50 32 /// <summary>
51   - /// 补缴账户
  33 + /// 品项名称
52 34 /// </summary>
53   - [SugarColumn(ColumnName = "F_PaymentAccount")]
54   - public string PaymentAccount { get; set; }
  35 + [SugarColumn(ColumnName = "F_ItemName")]
  36 + public string ItemName { get; set; }
55 37  
56 38 /// <summary>
57   - /// 补缴凭证号
  39 + /// 品项分类
58 40 /// </summary>
59   - [SugarColumn(ColumnName = "F_PaymentReference")]
60   - public string PaymentReference { get; set; }
  41 + [SugarColumn(ColumnName = "F_ItemCategory")]
  42 + public string ItemCategory { get; set; }
61 43  
62 44 /// <summary>
63   - /// 补缴备注
  45 + /// 品项备注
64 46 /// </summary>
65   - [SugarColumn(ColumnName = "F_Remark")]
66   - public string Remark { get; set; }
  47 + [SugarColumn(ColumnName = "F_ItemRemark")]
  48 + public string ItemRemark { get; set; }
67 49  
68 50 /// <summary>
69 51 /// 创建时间
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_tkjlb/LqTkjlbEntity.cs
1 1 using System;
  2 +using NCC.Common.Enum;
  3 +using NCC.Extend.Entitys.Enum;
2 4 using SqlSugar;
3 5  
4 6 namespace NCC.Extend.Entitys.lq_tkjlb
... ... @@ -92,5 +94,6 @@ namespace NCC.Extend.Entitys.lq_tkjlb
92 94 /// </summary>
93 95 [SugarColumn(ColumnName = "F_CreateTime")]
94 96 public DateTime CreateTime { get; set; } = DateTime.Now;
  97 +
95 98 }
96 99 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_hyhk/LqXhHyhkEntity.cs
1 1 using System;
2 2 using NCC.Common.Const;
  3 +using NCC.Extend.Entitys.Enum;
3 4 using SqlSugar;
4 5  
5 6 namespace NCC.Extend.Entitys.lq_xh_hyhk
... ... @@ -48,6 +49,12 @@ namespace NCC.Extend.Entitys.lq_xh_hyhk
48 49 public string Hyzh { get; set; }
49 50  
50 51 /// <summary>
  52 + /// 会员手机号
  53 + /// </summary>
  54 + [SugarColumn(ColumnName = "F_MemberPhone")]
  55 + public string MemberPhone { get; set; }
  56 +
  57 + /// <summary>
51 58 /// 会员名称
52 59 /// </summary>
53 60 [SugarColumn(ColumnName = "hymc")]
... ... @@ -112,6 +119,6 @@ namespace NCC.Extend.Entitys.lq_xh_hyhk
112 119 /// 是否有效
113 120 /// </summary>
114 121 [SugarColumn(ColumnName = "F_IsEffective")]
115   - public int? IsEffective { get; set; } = 1;
  122 + public int IsEffective { get; set; } = StatusEnum.有效.GetHashCode();
116 123 }
117 124 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xhmxb/LqXhmxbEntity.cs deleted
1   -using NCC.Common.Const;
2   -using SqlSugar;
3   -using System;
4   -
5   -namespace NCC.Extend.Entitys.lq_xhmxb
6   -{
7   - /// <summary>
8   - /// 消耗明细表
9   - /// </summary>
10   - [SugarTable("lq_xhmxb")]
11   - [Tenant(ClaimConst.TENANT_ID)]
12   - public class LqXhmxbEntity
13   - {
14   - /// <summary>
15   - /// 消耗编号
16   - /// </summary>
17   - [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
18   - public string Id { get; set; }
19   -
20   - /// <summary>
21   - /// 门店编号
22   - /// </summary>
23   - [SugarColumn(ColumnName = "mdbh")]
24   - public string Mdbh { get; set; }
25   -
26   - /// <summary>
27   - /// 门店名称
28   - /// </summary>
29   - [SugarColumn(ColumnName = "mdmc")]
30   - public string Mdmc { get; set; }
31   -
32   - /// <summary>
33   - /// 部门编号
34   - /// </summary>
35   - [SugarColumn(ColumnName = "bmbh")]
36   - public string Bmbh { get; set; }
37   -
38   - /// <summary>
39   - /// 部门名称
40   - /// </summary>
41   - [SugarColumn(ColumnName = "bmmc")]
42   - public string Bmmc { get; set; }
43   -
44   - /// <summary>
45   - /// 员工编号
46   - /// </summary>
47   - [SugarColumn(ColumnName = "ygbh")]
48   - public string Ygbh { get; set; }
49   -
50   - /// <summary>
51   - /// 员工名称
52   - /// </summary>
53   - [SugarColumn(ColumnName = "ygmc")]
54   - public string Ygmc { get; set; }
55   -
56   - /// <summary>
57   - /// 项目数
58   - /// </summary>
59   - [SugarColumn(ColumnName = "xms")]
60   - public string Xms { get; set; }
61   -
62   - /// <summary>
63   - /// 消耗
64   - /// </summary>
65   - [SugarColumn(ColumnName = "xh")]
66   - public string Xh { get; set; }
67   -
68   - /// <summary>
69   - /// 手工
70   - /// </summary>
71   - [SugarColumn(ColumnName = "sg")]
72   - public string Sg { get; set; }
73   -
74   - /// <summary>
75   - /// 其它手工1
76   - /// </summary>
77   - [SugarColumn(ColumnName = "qtsg1")]
78   - public string Qtsg1 { get; set; }
79   -
80   - /// <summary>
81   - /// 其它手工2
82   - /// </summary>
83   - [SugarColumn(ColumnName = "qtsg2")]
84   - public string Qtsg2 { get; set; }
85   -
86   - /// <summary>
87   - /// 其它手工3
88   - /// </summary>
89   - [SugarColumn(ColumnName = "qtsg3")]
90   - public string Qtsg3 { get; set; }
91   -
92   - /// <summary>
93   - /// 手工合计
94   - /// </summary>
95   - [SugarColumn(ColumnName = "sghj")]
96   - public string Sghj { get; set; }
97   -
98   - }
99   -}
100 0 \ No newline at end of file
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_yxhdfa/LqYxhdfaEntity.cs deleted
1   -using NCC.Common.Const;
2   -using SqlSugar;
3   -using System;
4   -
5   -namespace NCC.Extend.Entitys.lq_yxhdfa
6   -{
7   - /// <summary>
8   - /// 营销活动方案
9   - /// </summary>
10   - [SugarTable("lq_yxhdfa")]
11   - [Tenant(ClaimConst.TENANT_ID)]
12   - public class LqYxhdfaEntity
13   - {
14   - /// <summary>
15   - /// 方案编号
16   - /// </summary>
17   - [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
18   - public string Id { get; set; }
19   -
20   - /// <summary>
21   - /// 营销活动编号
22   - /// </summary>
23   - [SugarColumn(ColumnName = "yxhdbh")]
24   - public string Yxhdbh { get; set; }
25   -
26   - /// <summary>
27   - /// 活动名称
28   - /// </summary>
29   - [SugarColumn(ColumnName = "hdmc")]
30   - public string Hdmc { get; set; }
31   -
32   - /// <summary>
33   - /// 张数奖
34   - /// </summary>
35   - [SugarColumn(ColumnName = "zsj")]
36   - public string Zsj { get; set; }
37   -
38   - /// <summary>
39   - /// 金额奖
40   - /// </summary>
41   - [SugarColumn(ColumnName = "jej")]
42   - public string Jej { get; set; }
43   -
44   - }
45   -}
46 0 \ No newline at end of file
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Mapper/LqXhmxbMapper.cs deleted
1   -using NCC.Common.Helper;
2   -using NCC.Extend.Entitys.Dto.LqXhmxb;
3   -using Mapster;
4   -using System.Collections.Generic;
5   -
6   -namespace NCC.Extend.Entitys.Mapper.LqXhmxb
7   -{
8   - public class Mapper : IRegister
9   - {
10   - public void Register(TypeAdapterConfig config)
11   - {
12   - }
13   - }
14   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Mapper/LqYxhdfaMapper.cs deleted
1   -using NCC.Common.Helper;
2   -using NCC.Extend.Entitys.Dto.LqYxhdfa;
3   -using Mapster;
4   -using System.Collections.Generic;
5   -
6   -namespace NCC.Extend.Entitys.Mapper.LqYxhdfa
7   -{
8   - public class Mapper : IRegister
9   - {
10   - public void Register(TypeAdapterConfig config)
11   - {
12   - }
13   - }
14   -}
netcore/src/Modularity/Extend/NCC.Extend.Interfaces/ILqXhmxbService.cs deleted
1   -namespace NCC.Extend.Interfaces.LqXhmxb
2   -{
3   - public interface ILqXhmxbService
4   - {
5   - }
6   -}
7 0 \ No newline at end of file
netcore/src/Modularity/Extend/NCC.Extend.Interfaces/ILqYxhdfaService.cs deleted
1   -namespace NCC.Extend.Interfaces.LqYxhdfa
2   -{
3   - public interface ILqYxhdfaService
4   - {
5   - }
6   -}
7 0 \ No newline at end of file
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhmxb/LqXhmxbUpInput.cs renamed to netcore/src/Modularity/Extend/NCC.Extend.Interfaces/LqPackageInfo/ILqPackageInfoService.cs
1   -using System;
2   -using System.Collections.Generic;
  1 +using NCC.Extend.Entitys.Dto.LqPackageInfo;
  2 +using System.Threading.Tasks;
3 3  
4   -namespace NCC.Extend.Entitys.Dto.LqXhmxb
  4 +namespace NCC.Extend.Interfaces.LqPackageInfo
5 5 {
6 6 /// <summary>
7   - /// 消耗明细表更新输入参数
  7 + /// 营销活动服务接口
8 8 /// </summary>
9   - public class LqXhmxbUpInput : LqXhmxbCrInput
  9 + public interface ILqPackageInfoService
10 10 {
11 11 /// <summary>
12   - /// 消耗编号
  12 + /// 添加营销活动
13 13 /// </summary>
14   - public string id { get; set; }
15   -
  14 + /// <param name="input">营销活动创建输入</param>
  15 + /// <returns>营销活动ID</returns>
  16 + Task<string> CreatePackageInfoAsync(LqPackageInfoCrInput input);
16 17 }
17 18 }
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs
... ... @@ -19,6 +19,7 @@ using NCC.Extend.Entitys.Dto.LqHytkHytk;
19 19 using NCC.Extend.Entitys.Dto.LqHytkJksyj;
20 20 using NCC.Extend.Entitys.Dto.LqHytkKjbsyj;
21 21 using NCC.Extend.Entitys.Dto.LqHytkMx;
  22 +using NCC.Extend.Entitys.Enum;
22 23 using NCC.Extend.Entitys.lq_hytk_hytk;
23 24 using NCC.Extend.Entitys.lq_hytk_jksyj;
24 25 using NCC.Extend.Entitys.lq_hytk_kjbsyj;
... ... @@ -113,6 +114,7 @@ namespace NCC.Extend.LqHytkHytk
113 114 tksj = it.Tksj,
114 115 czry = it.Czry,
115 116 fileUrl = it.FileUrl,
  117 + isEffective = it.IsEffective,
116 118 })
117 119 .MergeTable()
118 120 .OrderBy(sidx + " " + input.sort)
... ... @@ -198,7 +200,7 @@ namespace NCC.Extend.LqHytkHytk
198 200 entity.Id = YitIdHelper.NextId().ToString();
199 201 entity.F_CreateTime = DateTime.Now;
200 202 entity.F_CreateUser = userInfo.userId;
201   - entity.F_DeleteMark = 0;
  203 + entity.IsEffective = StatusEnum.有效.GetHashCode();
202 204 entity.Czry = userInfo.userId;
203 205  
204 206 try
... ... @@ -227,15 +229,14 @@ namespace NCC.Extend.LqHytkHytk
227 229 BillingItemId = item.billingItemId,
228 230 CreateTime = DateTime.Now,
229 231 CreateUser = userInfo.userId,
230   - DeleteMark = 0,
231 232 Px = item.px,
232 233 Pxmc = item.pxmc,
233 234 Pxjg = item.pxjg,
234 235 Tkje = item.tkje,
235 236 ProjectNumber = item.F_ProjectNumber ?? 1,
236   - IsEnabled = item.F_IsEnabled ?? 1,
237 237 SourceType = item.F_SourceType,
238 238 TotalPrice = item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)),
  239 + IsEffective = StatusEnum.有效.GetHashCode(),
239 240 };
240 241 allMxEntities.Add(lqHytkMxEntity);
241 242  
... ... @@ -244,25 +245,24 @@ namespace NCC.Extend.LqHytkHytk
244 245 {
245 246 foreach (var ijks_tem in item.lqHytkJksyjList)
246 247 {
247   - allJksyjEntities.Add(
248   - new LqHytkJksyjEntity
249   - {
250   - Id = YitIdHelper.NextId().ToString(),
251   - Gltkbh = newEntity.Id,
252   - Jks = ijks_tem.jks,
253   - Jksxm = ijks_tem.jksxm,
254   - Jkszh = ijks_tem.jkszh,
255   - Jksyj = ijks_tem.jksyj,
256   - Tksj = DateTime.Now,
257   - F_jsjid = ijks_tem.F_jsjid,
258   - F_tkpxid = ijks_tem.F_tkpxid,
259   - F_LaborCost = ijks_tem.F_LaborCost,
260   - F_tkpxNumber = ijks_tem.F_tkpxNumber,
261   - F_CreateTime = DateTime.Now,
262   - F_CreateUser = userInfo.userId,
263   - F_DeleteMark = 0,
264   - CardReturn = lqHytkMxEntity.Id,
265   - }
  248 + allJksyjEntities.Add(new LqHytkJksyjEntity
  249 + {
  250 + Id = YitIdHelper.NextId().ToString(),
  251 + Gltkbh = newEntity.Id,
  252 + Jks = ijks_tem.jks,
  253 + Jksxm = ijks_tem.jksxm,
  254 + Jkszh = ijks_tem.jkszh,
  255 + Jksyj = ijks_tem.jksyj,
  256 + Tksj = DateTime.Now,
  257 + F_jsjid = ijks_tem.F_jsjid,
  258 + F_tkpxid = ijks_tem.F_tkpxid,
  259 + F_LaborCost = ijks_tem.F_LaborCost,
  260 + F_tkpxNumber = ijks_tem.F_tkpxNumber,
  261 + F_CreateTime = DateTime.Now,
  262 + F_CreateUser = userInfo.userId,
  263 + CardReturn = lqHytkMxEntity.Id,
  264 + IsEffective = StatusEnum.有效.GetHashCode(),
  265 + }
266 266 );
267 267 }
268 268 }
... ... @@ -287,8 +287,8 @@ namespace NCC.Extend.LqHytkHytk
287 287 F_tkpxNumber = ikjbs_tem.F_tkpxNumber,
288 288 F_CreateTime = DateTime.Now,
289 289 F_CreateUser = userInfo.userId,
290   - F_DeleteMark = 0,
291 290 CardReturn = lqHytkMxEntity.Id,
  291 + IsEffective = StatusEnum.有效.GetHashCode(),
292 292 }
293 293 );
294 294 }
... ... @@ -380,13 +380,11 @@ namespace NCC.Extend.LqHytkHytk
380 380 CreateTime = DateTime.Now,
381 381 CreateUser = userInfo.userId,
382 382 Tksj = input.tksj,
383   - DeleteMark = 0,
384 383 Px = item.px,
385 384 Pxmc = item.pxmc,
386 385 Pxjg = item.pxjg,
387 386 Tkje = item.tkje,
388 387 ProjectNumber = item.F_ProjectNumber ?? 1,
389   - IsEnabled = item.F_IsEnabled ?? 1,
390 388 SourceType = item.F_SourceType,
391 389 TotalPrice = item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)),
392 390 };
... ... @@ -413,7 +411,6 @@ namespace NCC.Extend.LqHytkHytk
413 411 F_tkpxNumber = ijks_tem.F_tkpxNumber,
414 412 F_CreateTime = DateTime.Now,
415 413 F_CreateUser = userInfo.userId,
416   - F_DeleteMark = 0,
417 414 }
418 415 );
419 416 }
... ... @@ -439,7 +436,6 @@ namespace NCC.Extend.LqHytkHytk
439 436 F_tkpxNumber = ikjbs_tem.F_tkpxNumber,
440 437 F_CreateTime = DateTime.Now,
441 438 F_CreateUser = userInfo.userId,
442   - F_DeleteMark = 0,
443 439 }
444 440 );
445 441 }
... ... @@ -474,20 +470,42 @@ namespace NCC.Extend.LqHytkHytk
474 470 }
475 471 #endregion
476 472  
477   - #region 删除退卡信息
  473 + #region 作废退卡信息
478 474 /// <summary>
479   - /// 删除退卡信息(逻辑删除)
  475 + /// 作废退卡信息
480 476 /// </summary>
481 477 /// <param name="id">主键</param>
482 478 /// <returns></returns>
483   - [HttpDelete("{id}")]
484   - public async Task Delete(string id)
  479 + [HttpPut("VoidRefundCardInfo/{id}")]
  480 + public async Task<dynamic> VoidRefundCardInfo(string id)
485 481 {
486   - var entity = await _db.Queryable<LqHytkHytkEntity>().FirstAsync(p => p.Id == id);
487   - if (entity != null)
  482 + try
488 483 {
489   - entity.F_DeleteMark = 1;
490   - await _lqHytkHytkRepository.UpdateAsync(entity);
  484 + var entity = await _db.Queryable<LqHytkHytkEntity>().FirstAsync(p => p.Id == id && p.IsEffective == StatusEnum.有效.GetHashCode());
  485 + if (entity == null)
  486 + {
  487 + throw NCCException.Oh("退卡信息不存在或已被作废");
  488 + }
  489 + // 开启事务
  490 + _db.BeginTran();
  491 + // 更新主表
  492 + entity.IsEffective = StatusEnum.无效.GetHashCode();
  493 + entity.F_ModifyTime = DateTime.Now;
  494 + await _db.Updateable(entity).ExecuteCommandAsync();
  495 + // 更新明细表
  496 + await _db.Updateable<LqHytkMxEntity>().SetColumns(it => new LqHytkMxEntity { IsEffective = StatusEnum.无效.GetHashCode() }).Where(w => w.RefundInfoId == id).ExecuteCommandAsync();
  497 + // 更新健康师业绩表
  498 + await _db.Updateable<LqHytkJksyjEntity>().SetColumns(it => new LqHytkJksyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).Where(w => w.Gltkbh == id).ExecuteCommandAsync();
  499 + // 更新科技部业绩表
  500 + await _db.Updateable<LqHytkKjbsyjEntity>().SetColumns(it => new LqHytkKjbsyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).Where(w => w.Gltkbh == id).ExecuteCommandAsync();
  501 + // 提交事务
  502 + _db.CommitTran();
  503 + return entity;
  504 + }
  505 + catch (Exception ex)
  506 + {
  507 + _db.RollbackTran();
  508 + throw NCCException.Oh($"删除退卡信息失败: {ex.Message}");
491 509 }
492 510 }
493 511 #endregion
... ... @@ -590,10 +608,10 @@ namespace NCC.Extend.LqHytkHytk
590 608 try
591 609 {
592 610 // 1. 查询主表信息
593   - var entity = await _db.Queryable<LqHytkHytkEntity>().FirstAsync(p => p.Id == id);
  611 + var entity = await _db.Queryable<LqHytkHytkEntity>().Where(p => p.Id == id && p.IsEffective == StatusEnum.有效.GetHashCode()).FirstAsync();
594 612 if (entity == null)
595 613 {
596   - throw NCCException.Oh(ErrorCode.COM1005, "退卡记录不存在");
  614 + throw NCCException.Oh(ErrorCode.COM1005, "退卡记录不存在或已作废");
597 615 }
598 616  
599 617 var output = entity.Adapt<LqHytkHytkInfoOutput>();
... ... @@ -621,7 +639,6 @@ namespace NCC.Extend.LqHytkHytk
621 639 pxjg = mx.Pxjg,
622 640 tkje = mx.Tkje,
623 641 projectNumber = mx.ProjectNumber,
624   - isEnabled = mx.IsEnabled,
625 642 sourceType = mx.SourceType,
626 643 totalPrice = mx.TotalPrice,
627 644 };
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
... ... @@ -17,8 +17,10 @@ using NCC.DataEncryption;
17 17 using NCC.Dependency;
18 18 using NCC.DynamicApiController;
19 19 using NCC.Extend.Entitys.Dto.Common;
  20 +using NCC.Extend.Entitys.Dto.LqKdDeductinfo;
20 21 using NCC.Extend.Entitys.Dto.LqKdKdjlb;
21 22 using NCC.Extend.Entitys.Enum;
  23 +using NCC.Extend.Entitys.lq_hytk_mx;
22 24 using NCC.Extend.Entitys.lq_jinsanjiao_user;
23 25 using NCC.Extend.Entitys.lq_kd_deductinfo;
24 26 using NCC.Extend.Entitys.lq_kd_jksyj;
... ... @@ -26,6 +28,7 @@ using NCC.Extend.Entitys.lq_kd_kdjlb;
26 28 using NCC.Extend.Entitys.lq_kd_kjbsyj;
27 29 using NCC.Extend.Entitys.lq_kd_pxmx;
28 30 using NCC.Extend.Entitys.lq_khxx;
  31 +using NCC.Extend.Entitys.lq_xh_pxmx;
29 32 using NCC.Extend.Entitys.lq_xmzl;
30 33 using NCC.Extend.Interfaces.LqKdKdjlb;
31 34 using NCC.Extend.Utils;
... ... @@ -118,6 +121,9 @@ namespace NCC.Extend.LqKdKdjlb
118 121 // 4. 查询科技部老师业绩列表
119 122 var lqKdKjbsyjList = await _db.Queryable<LqKdKjbsyjEntity>().Where(w => w.Glkdbh == entity.Id).ToListAsync();
120 123  
  124 + // 5. 查询扣款信息列表
  125 + var lqKdDeductList = await _db.Queryable<LqKdDeductinfoEntity>().Where(w => w.BillingId == entity.Id).ToListAsync();
  126 +
121 127 // 5. 构建品项明细输出,每个品项关联对应的业绩信息
122 128 var pxmxOutputList = new List<LqKdPxmxInfoOutput>();
123 129 foreach (var pxmx in lqKdPxmxList)
... ... @@ -137,6 +143,7 @@ namespace NCC.Extend.LqKdKdjlb
137 143 totalPrice = pxmx.TotalPrice,
138 144 actualPrice = pxmx.ActualPrice,
139 145 remark = pxmx.Remark,
  146 + isEffective = pxmx.IsEffective,
140 147 };
141 148  
142 149 // 关联该品项的健康师业绩
... ... @@ -147,6 +154,7 @@ namespace NCC.Extend.LqKdKdjlb
147 154 var kjbsyjForPx = lqKdKjbsyjList.Where(k => k.Kdpxid == pxmx.Id).ToList();
148 155 pxmxOutput.lqKdKjbsyjList = kjbsyjForPx.Adapt<List<LqKdKjbsyjInfoOutput>>();
149 156  
  157 +
150 158 pxmxOutputList.Add(pxmxOutput);
151 159 }
152 160  
... ... @@ -156,6 +164,8 @@ namespace NCC.Extend.LqKdKdjlb
156 164 // 7. 设置全局业绩列表(用于兼容性,但主要使用品项关联的业绩)
157 165 output.lqKdJksyjList = lqKdJksyjList.Adapt<List<LqKdJksyjInfoOutput>>();
158 166 output.lqKdKjbsyjList = lqKdKjbsyjList.Adapt<List<LqKdKjbsyjInfoOutput>>();
  167 + // 8. 设置扣款信息列表
  168 + output.lqKdDeductList = lqKdDeductList.Adapt<List<LqKdDeductinfoInfoOutput>>();
159 169  
160 170 return output;
161 171 }
... ... @@ -182,6 +192,7 @@ namespace NCC.Extend.LqKdKdjlb
182 192 DateTime? startKdrq = queryKdrq != null ? Ext.GetDateTime(queryKdrq.First()) : null;
183 193 DateTime? endKdrq = queryKdrq != null ? Ext.GetDateTime(queryKdrq.Last()) : null;
184 194 var data = await _db.Queryable<LqKdKdjlbEntity>()
  195 + .WhereIF(!string.IsNullOrEmpty(input.keyword), p => p.Kdhyc.Contains(input.keyword) || p.Kdhysjh.Contains(input.keyword))
185 196 .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
186 197 .WhereIF(!string.IsNullOrEmpty(input.djmd), p => p.Djmd.Equals(input.djmd))
187 198 .WhereIF(!string.IsNullOrEmpty(input.jsj), p => p.Jsj.Equals(input.jsj))
... ... @@ -208,6 +219,7 @@ namespace NCC.Extend.LqKdKdjlb
208 219 .WhereIF(!string.IsNullOrEmpty(input.kjblsyj), p => p.Kjblsyj.Contains(input.kjblsyj))
209 220 .WhereIF(!string.IsNullOrEmpty(input.pxxx), p => p.Pxxx.Contains(input.pxxx))
210 221 .WhereIF(!string.IsNullOrEmpty(input.F_FIleUrl), p => p.F_FIleUrl.Contains(input.F_FIleUrl))
  222 + .WhereIF(!string.IsNullOrEmpty(input.CreateUser), p => p.CreateUser.Equals(input.CreateUser))
211 223 .Select(it => new LqKdKdjlbListOutput
212 224 {
213 225 id = it.Id,
... ... @@ -236,6 +248,8 @@ namespace NCC.Extend.LqKdKdjlb
236 248 kjblsyj = it.Kjblsyj,
237 249 pxxx = it.Pxxx,
238 250 IsEffective = it.IsEffective,
  251 + CreateUser = it.CreateUser,
  252 + CreateUserName = SqlFunc.Subqueryable<UserEntity>().Where(x => x.Id == it.CreateUser).Select(x => x.RealName),
239 253 })
240 254 .MergeTable()
241 255 .OrderBy(sidx + " " + input.sort)
... ... @@ -265,25 +279,49 @@ namespace NCC.Extend.LqKdKdjlb
265 279 //开启事务
266 280 _db.BeginTran();
267 281 //判断是否有作废关联id
268   - if (!string.IsNullOrEmpty(input.cancelRefId))
  282 + //暂时先不需要
  283 + // if (!string.IsNullOrEmpty(input.cancelRefId))
  284 + // {
  285 + // //查询作废关联id
  286 + // var cancelRefEntity = await _db.Queryable<LqKdKdjlbEntity>().FirstAsync(p => p.Id == input.cancelRefId);
  287 + // if (cancelRefEntity == null || cancelRefEntity.IsEffective == StatusEnum.无效.GetHashCode())
  288 + // {
  289 + // throw NCCException.Oh("该开单记录已经作废");
  290 + // }
  291 + // // 检查作废关联记录是否可以作废
  292 + // var (canCancel, errorMessage) = await CheckBillingCanCancelAsync(input.cancelRefId);
  293 + // if (!canCancel)
  294 + // {
  295 + // throw NCCException.Oh(errorMessage);
  296 + // }
  297 +
  298 + // //将作废关联id的IsEffective设置为无效
  299 + // cancelRefEntity.IsEffective = StatusEnum.无效.GetHashCode();
  300 + // await _db.Updateable(cancelRefEntity).ExecuteCommandAsync();
  301 + // //把品项明细表的IsEffective设置为无效
  302 + // await _db.Updateable<LqKdPxmxEntity>().Where(p => p.Glkdbh == input.cancelRefId).UpdateColumns(p => new LqKdPxmxEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync();
  303 + // //把健康师业绩表的IsEffective设置为无效
  304 + // await _db.Updateable<LqKdJksyjEntity>().Where(p => p.Glkdbh == input.cancelRefId).UpdateColumns(p => new LqKdJksyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync();
  305 + // //把科技部老师业绩表的IsEffective设置为无效
  306 + // await _db.Updateable<LqKdKjbsyjEntity>().Where(p => p.Glkdbh == input.cancelRefId).UpdateColumns(p => new LqKdKjbsyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync();
  307 + // //把扣款信息表的IsEffective设置为无效
  308 + // await _db.Updateable<LqKdDeductinfoEntity>().Where(p => p.BillingId == input.cancelRefId).UpdateColumns(p => new LqKdDeductinfoEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync();
  309 + // }
  310 +
  311 + //判断是否有补缴开单ID
  312 + if (!string.IsNullOrEmpty(input.supplementBillingId))
269 313 {
270   - //查询作废关联id
271   - var cancelRefEntity = await _db.Queryable<LqKdKdjlbEntity>().FirstAsync(p => p.Id == input.cancelRefId);
272   - if (cancelRefEntity == null)
  314 + //查询补缴开单ID
  315 + var supplementBillingEntity = await _db.Queryable<LqKdKdjlbEntity>().FirstAsync(p => p.Id == input.supplementBillingId);
  316 + if (supplementBillingEntity == null || supplementBillingEntity.IsEffective == StatusEnum.无效.GetHashCode())
273 317 {
274   - throw NCCException.Oh("作废关联id不存在");
  318 + throw NCCException.Oh("补缴开单记录不存在或已作废");
275 319 }
276   - //将作废关联id的IsEffective设置为0
277   - cancelRefEntity.IsEffective = StatusEnum.无效.GetHashCode();
278   - await _db.Updateable(cancelRefEntity).ExecuteCommandAsync();
279   - //把品项明细表的IsEffective设置为0
280   - await _db.Updateable<LqKdPxmxEntity>().Where(p => p.Glkdbh == input.cancelRefId).UpdateColumns(p => new LqKdPxmxEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync();
281   - //把健康师业绩表的IsEffective设置为0
282   - await _db.Updateable<LqKdJksyjEntity>().Where(p => p.Glkdbh == input.cancelRefId).UpdateColumns(p => new LqKdJksyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync();
283   - //把科技部老师业绩表的IsEffective设置为0
284   - await _db.Updateable<LqKdKjbsyjEntity>().Where(p => p.Glkdbh == input.cancelRefId).UpdateColumns(p => new LqKdKjbsyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync();
285   - //把扣款信息表的IsEffective设置为0
286   - await _db.Updateable<LqKdDeductinfoEntity>().Where(p => p.BillingId == input.cancelRefId).UpdateColumns(p => new LqKdDeductinfoEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync();
  320 + //然后对之前的开单表的补缴金额进行累加
  321 + //需要判断补缴金额是否超过欠款金额,只记录应缴金额
  322 + var supplementAmount = supplementBillingEntity.Qk - supplementBillingEntity.PaidDebt;
  323 + entity.PaidDebt += input.supplementAmount > supplementAmount ? supplementAmount : input.supplementAmount;
  324 + await _db.Updateable(entity).ExecuteCommandAsync();
287 325 }
288 326  
289 327 //新增开单记录表记录
... ... @@ -336,6 +374,7 @@ namespace NCC.Extend.LqKdKdjlb
336 374 ActualPrice = item.actualPrice,
337 375 Remark = item.remark,
338 376 IsEffective = StatusEnum.有效.GetHashCode(),
  377 + ActivityId = input.activityId,
339 378 };
340 379 allPxmxEntities.Add(lqKdPxmxEntity);
341 380  
... ... @@ -358,6 +397,7 @@ namespace NCC.Extend.LqKdKdjlb
358 397 Jsj_id = ijks_tem.jsj_id,
359 398 Kdpxid = lqKdPxmxEntity.Id,
360 399 IsEffective = StatusEnum.有效.GetHashCode(),
  400 + ActivityId = input.activityId,
361 401 });
362 402 }
363 403 }
... ... @@ -367,19 +407,19 @@ namespace NCC.Extend.LqKdKdjlb
367 407 {
368 408 foreach (var ikjbs_tem in item.lqKdKjbsyjList)
369 409 {
370   - allKjbsyjEntities.Add(
371   - new LqKdKjbsyjEntity
372   - {
373   - Id = YitIdHelper.NextId().ToString(),
374   - Glkdbh = newEntity.Id,
375   - Kjbls = ikjbs_tem.kjbls,
376   - Kjblsxm = ikjbs_tem.kjblsxm,
377   - Kjblszh = ikjbs_tem.kjblszh,
378   - Kjblsyj = ikjbs_tem.kjblsyj,
379   - Yjsj = input.kdrq,
380   - Kdpxid = lqKdPxmxEntity.Id,
381   - IsEffective = StatusEnum.有效.GetHashCode(),
382   - }
  410 + allKjbsyjEntities.Add(new LqKdKjbsyjEntity
  411 + {
  412 + Id = YitIdHelper.NextId().ToString(),
  413 + Glkdbh = newEntity.Id,
  414 + Kjbls = ikjbs_tem.kjbls,
  415 + Kjblsxm = ikjbs_tem.kjblsxm,
  416 + Kjblszh = ikjbs_tem.kjblszh,
  417 + Kjblsyj = ikjbs_tem.kjblsyj,
  418 + Yjsj = input.kdrq,
  419 + Kdpxid = lqKdPxmxEntity.Id,
  420 + IsEffective = StatusEnum.有效.GetHashCode(),
  421 + ActivityId = input.activityId,
  422 + }
383 423 );
384 424 }
385 425 }
... ... @@ -1042,9 +1082,9 @@ namespace NCC.Extend.LqKdKdjlb
1042 1082 }
1043 1083 #endregion
1044 1084  
1045   - #region 修改开单记录,不做删除,仅健康师业绩、科技部老师业绩信息
  1085 + #region 修改开单记录
1046 1086 /// <summary>
1047   - /// 修改开单记录,不做删除,仅健康师业绩、科技部老师业绩信息
  1087 + /// 修改开单记录
1048 1088 /// </summary>
1049 1089 /// <remarks>
1050 1090 /// 更新开单记录及其关联的品项明细、健康师业绩、科技部老师业绩信息
... ... @@ -1090,152 +1130,159 @@ namespace NCC.Extend.LqKdKdjlb
1090 1130 {
1091 1131 var entity = input.Adapt<LqKdKdjlbEntity>();
1092 1132 entity.Id = id; // 确保ID正确设置
1093   -
1094 1133 try
1095 1134 {
  1135 + //检查开单记录是否可以操作
  1136 + var (canCancel, errorMessage) = await CheckBillingCanCancelAsync(id);
  1137 + if (!canCancel)
  1138 + {
  1139 + throw NCCException.Oh(errorMessage);
  1140 + }
1096 1141 //开启事务
1097 1142 _db.BeginTran();
1098   -
1099 1143 // 更新开单记录主表
1100   - await _db.Updateable(entity)
1101   - .IgnoreColumns(ignoreAllNullColumns: true)
1102   - .IgnoreColumns(x => x.CreateTime) // 不更新创建时间
1103   - .ExecuteCommandAsync();
1104   -
1105   - // 处理品项明细列表 - 更新或插入
1106   - if (input.lqKdPxmxList != null && input.lqKdPxmxList.Any())
  1144 + await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).IgnoreColumns(x => x.CreateTime).ExecuteCommandAsync();
  1145 + //清空原有品项明细
  1146 + await _db.Deleteable<LqKdPxmxEntity>().Where(x => x.Glkdbh == id).ExecuteCommandAsync();
  1147 + //清空原有健康师业绩
  1148 + await _db.Deleteable<LqKdJksyjEntity>().Where(x => x.Glkdbh == id).ExecuteCommandAsync();
  1149 + //清空原有科技部老师业绩
  1150 + await _db.Deleteable<LqKdKjbsyjEntity>().Where(x => x.Glkdbh == id).ExecuteCommandAsync();
  1151 + //清空原有扣款信息
  1152 + await _db.Deleteable<LqKdDeductinfoEntity>().Where(x => x.BillingId == id).ExecuteCommandAsync();
  1153 + //循环品相信息
  1154 + // 收集所有需要插入的实体,然后批量插入
  1155 + var allPxmxEntities = new List<LqKdPxmxEntity>();
  1156 + var allJksyjEntities = new List<LqKdJksyjEntity>();
  1157 + var allKjbsyjEntities = new List<LqKdKjbsyjEntity>();
  1158 + var allDeductEntities = new List<LqKdDeductinfoEntity>();
  1159 + // 处理扣款信息列表
  1160 + foreach (var item in input.lqKdKdjlbDeductList)
1107 1161 {
1108   - foreach (var item in input.lqKdPxmxList)
  1162 + var lqKdDeductEntity = new LqKdDeductinfoEntity
  1163 + {
  1164 + Id = YitIdHelper.NextId().ToString(),
  1165 + BillingId = id,
  1166 + DeductId = item.DeductId,
  1167 + DeductType = item.DeductType,
  1168 + Amount = item.Amount,
  1169 + ProjectNumber = item.ProjectNumber,
  1170 + UnitPrice = item.UnitPrice,
  1171 + ItemName = item.ItemName,
  1172 + ItemId = item.ItemId,
  1173 + IsEffective = StatusEnum.有效.GetHashCode(), // 设置为有效
  1174 + CreateTime = DateTime.Now, // 设置创建时间
  1175 + };
  1176 + allDeductEntities.Add(lqKdDeductEntity);
  1177 + }
  1178 + // 处理品项明细列表
  1179 + foreach (var item in input.lqKdPxmxList)
  1180 + {
  1181 + // 创建品项明细实体
  1182 + var lqKdPxmxEntity = new LqKdPxmxEntity
1109 1183 {
1110   - // 检查品项明细是否已存在
1111   - var existingPxmx = await _db.Queryable<LqKdPxmxEntity>()
1112   - .Where(x => x.Glkdbh == id && x.Px == item.px)
1113   - .FirstAsync();
  1184 + Id = YitIdHelper.NextId().ToString(),
  1185 + Glkdbh = id,
  1186 + Yjsj = input.kdrq,
  1187 + CreateTIme = DateTime.Now,
  1188 + MemberId = entity.Kdhy,
  1189 + IsEnabled = StatusEnum.有效.GetHashCode(),
  1190 + ProjectNumber = item.projectNumber,
  1191 + TotalPrice = (decimal)(item.pxjg * item.projectNumber),
  1192 + Px = item.px,
  1193 + Pxmc = item.pxmc,
  1194 + Pxjg = item.pxjg,
  1195 + SourceType = item.sourceType,
  1196 + ActualPrice = item.actualPrice,
  1197 + Remark = item.remark,
  1198 + IsEffective = StatusEnum.有效.GetHashCode(),
  1199 + ActivityId = input.activityId,
  1200 + };
  1201 + allPxmxEntities.Add(lqKdPxmxEntity);
1114 1202  
1115   - if (existingPxmx != null)
  1203 + // 收集该品项关联的健康师业绩
  1204 + if (item.lqKdJksyjList != null && item.lqKdJksyjList.Any())
  1205 + {
  1206 + //把jksxm保存到HealthInstructorNames
  1207 + foreach (var ijks_tem in item.lqKdJksyjList)
1116 1208 {
1117   - // 更新现有品项明细
1118   - existingPxmx.ProjectNumber = item.projectNumber == 0 ? 1 : item.projectNumber;
1119   - existingPxmx.TotalPrice = (decimal)(item.pxjg * (item.projectNumber == 0 ? 1 : item.projectNumber));
1120   - existingPxmx.Pxmc = item.pxmc;
1121   - existingPxmx.Pxjg = item.pxjg;
1122   - existingPxmx.SourceType = item.sourceType;
1123   - await _db.Updateable(existingPxmx).ExecuteCommandAsync();
1124   -
1125   - // 更新该品项关联的健康师业绩
1126   - if (item.lqKdJksyjList != null && item.lqKdJksyjList.Any())
1127   - {
1128   - // 先删除该品项的所有健康师业绩
1129   - await _db.Deleteable<LqKdJksyjEntity>()
1130   - .Where(x => x.Kdpxid == existingPxmx.Id)
1131   - .ExecuteCommandAsync();
1132   -
1133   - // 重新插入健康师业绩
1134   - var jksyjEntities = item.lqKdJksyjList.Select(ijks_tem => new LqKdJksyjEntity
1135   - {
1136   - Id = YitIdHelper.NextId().ToString(),
1137   - Glkdbh = entity.Id,
1138   - Jks = ijks_tem.jks,
1139   - Jksxm = ijks_tem.jksxm,
1140   - Jkszh = ijks_tem.jkszh,
1141   - Jksyj = ijks_tem.jksyj,
1142   - Yjsj = DateTime.Now,
1143   - Jsj_id = ijks_tem.jsj_id,
1144   - Kdpxid = existingPxmx.Id,
1145   - }).ToList();
1146   -
1147   - if (jksyjEntities.Any())
1148   - {
1149   - await _db.Insertable(jksyjEntities).ExecuteCommandAsync();
1150   - }
1151   - }
1152   -
1153   - // 更新该品项关联的科技部老师业绩
1154   - if (item.lqKdKjbsyjList != null && item.lqKdKjbsyjList.Any())
  1209 + allJksyjEntities.Add(new LqKdJksyjEntity
1155 1210 {
1156   - // 先删除该品项的所有科技部老师业绩
1157   - await _db.Deleteable<LqKdKjbsyjEntity>()
1158   - .Where(x => x.Kdpxid == existingPxmx.Id)
1159   - .ExecuteCommandAsync();
1160   -
1161   - // 重新插入科技部老师业绩
1162   - var kjbsyjEntities = item.lqKdKjbsyjList.Select(ikjbs_tem => new LqKdKjbsyjEntity
1163   - {
1164   - Id = YitIdHelper.NextId().ToString(),
1165   - Glkdbh = entity.Id,
1166   - Kjbls = ikjbs_tem.kjbls,
1167   - Kjblsxm = ikjbs_tem.kjblsxm,
1168   - Kjblszh = ikjbs_tem.kjblszh,
1169   - Kjblsyj = ikjbs_tem.kjblsyj,
1170   - Yjsj = DateTime.Now,
1171   - Kdpxid = existingPxmx.Id,
1172   - }).ToList();
1173   -
1174   - if (kjbsyjEntities.Any())
1175   - {
1176   - await _db.Insertable(kjbsyjEntities).ExecuteCommandAsync();
1177   - }
1178   - }
  1211 + Id = YitIdHelper.NextId().ToString(),
  1212 + Glkdbh = id,
  1213 + Jks = ijks_tem.jks,
  1214 + Jksxm = ijks_tem.jksxm,
  1215 + Jkszh = ijks_tem.jkszh,
  1216 + Jksyj = ijks_tem.jksyj,
  1217 + Yjsj = input.kdrq,
  1218 + Jsj_id = ijks_tem.jsj_id,
  1219 + Kdpxid = lqKdPxmxEntity.Id,
  1220 + IsEffective = StatusEnum.有效.GetHashCode(),
  1221 + ActivityId = input.activityId,
  1222 + });
1179 1223 }
1180   - else
  1224 + }
  1225 +
  1226 + // 收集该品项关联的科技部老师业绩
  1227 + if (item.lqKdKjbsyjList != null && item.lqKdKjbsyjList.Any())
  1228 + {
  1229 + foreach (var ikjbs_tem in item.lqKdKjbsyjList)
1181 1230 {
1182   - // 插入新的品项明细
1183   - var newPxmxEntity = new LqKdPxmxEntity
  1231 + allKjbsyjEntities.Add(new LqKdKjbsyjEntity
1184 1232 {
1185 1233 Id = YitIdHelper.NextId().ToString(),
1186   - Glkdbh = entity.Id,
1187   - CreateTIme = DateTime.Now,
1188   - MemberId = entity.Kdhy,
1189   - IsEnabled = 0,
1190   - ProjectNumber = item.projectNumber == 0 ? 1 : item.projectNumber,
1191   - TotalPrice = (decimal)(item.pxjg * (item.projectNumber == 0 ? 1 : item.projectNumber)),
1192   - Px = item.px,
1193   - Pxmc = item.pxmc,
1194   - Pxjg = item.pxjg,
1195   - SourceType = item.sourceType,
1196   - };
1197   - await _db.Insertable(newPxmxEntity).ExecuteCommandAsync();
1198   -
1199   - // 插入该品项关联的健康师业绩
1200   - if (item.lqKdJksyjList != null && item.lqKdJksyjList.Any())
1201   - {
1202   - var jksyjEntities = item.lqKdJksyjList.Select(ijks_tem => new LqKdJksyjEntity
1203   - {
1204   - Id = YitIdHelper.NextId().ToString(),
1205   - Glkdbh = entity.Id,
1206   - Jks = ijks_tem.jks,
1207   - Jksxm = ijks_tem.jksxm,
1208   - Jkszh = ijks_tem.jkszh,
1209   - Jksyj = ijks_tem.jksyj,
1210   - Yjsj = DateTime.Now,
1211   - Jsj_id = ijks_tem.jsj_id,
1212   - Kdpxid = newPxmxEntity.Id,
1213   - }).ToList();
1214   -
1215   - await _db.Insertable(jksyjEntities).ExecuteCommandAsync();
1216   - }
1217   -
1218   - // 插入该品项关联的科技部老师业绩
1219   - if (item.lqKdKjbsyjList != null && item.lqKdKjbsyjList.Any())
1220   - {
1221   - var kjbsyjEntities = item.lqKdKjbsyjList.Select(ikjbs_tem => new LqKdKjbsyjEntity
1222   - {
1223   - Id = YitIdHelper.NextId().ToString(),
1224   - Glkdbh = entity.Id,
1225   - Kjbls = ikjbs_tem.kjbls,
1226   - Kjblsxm = ikjbs_tem.kjblsxm,
1227   - Kjblszh = ikjbs_tem.kjblszh,
1228   - Kjblsyj = ikjbs_tem.kjblsyj,
1229   - Yjsj = DateTime.Now,
1230   - Kdpxid = newPxmxEntity.Id,
1231   - }).ToList();
1232   -
1233   - await _db.Insertable(kjbsyjEntities).ExecuteCommandAsync();
  1234 + Glkdbh = id,
  1235 + Kjbls = ikjbs_tem.kjbls,
  1236 + Kjblsxm = ikjbs_tem.kjblsxm,
  1237 + Kjblszh = ikjbs_tem.kjblszh,
  1238 + Kjblsyj = ikjbs_tem.kjblsyj,
  1239 + Yjsj = input.kdrq,
  1240 + Kdpxid = lqKdPxmxEntity.Id,
  1241 + IsEffective = StatusEnum.有效.GetHashCode(),
  1242 + ActivityId = input.activityId,
1234 1243 }
  1244 + );
1235 1245 }
1236 1246 }
1237 1247 }
1238 1248  
  1249 +
  1250 +
  1251 + //通过会员id查询会员信息
  1252 + var memberInfo = await _db.Queryable<LqKhxxEntity>().Where(u => u.Id == entity.Kdhy).FirstAsync();
  1253 + //通过开单记录表查询这个会员开单金额
  1254 + var kdAmount = await _db.Queryable<LqKdKdjlbEntity>().Where(u => u.Kdhy == entity.Kdhy).SumAsync(u => u.Sfyj);
  1255 + //如果开单金额小于500,为散客,如果大于500,为会员
  1256 + if (kdAmount < 500)
  1257 + {
  1258 + memberInfo.Khlx = MemberTypeEnum.散客.GetHashCode().ToString();
  1259 + }
  1260 + else
  1261 + {
  1262 + memberInfo.Khlx = MemberTypeEnum.会员.GetHashCode().ToString();
  1263 + }
  1264 + await _db.Updateable(memberInfo).ExecuteCommandAsync();
  1265 + // 批量插入扣款信息
  1266 + if (allDeductEntities.Any())
  1267 + {
  1268 + await _db.Insertable(allDeductEntities).ExecuteCommandAsync();
  1269 + }
  1270 + // 批量插入品项明细
  1271 + if (allPxmxEntities.Any())
  1272 + {
  1273 + await _db.Insertable(allPxmxEntities).ExecuteCommandAsync();
  1274 + }
  1275 + // 批量插入健康师业绩
  1276 + if (allJksyjEntities.Any())
  1277 + {
  1278 + await _db.Insertable(allJksyjEntities).ExecuteCommandAsync();
  1279 + }
  1280 + // 批量插入科技部老师业绩
  1281 + if (allKjbsyjEntities.Any())
  1282 + {
  1283 + await _db.Insertable(allKjbsyjEntities).ExecuteCommandAsync();
  1284 + }
  1285 +
1239 1286 //关闭事务
1240 1287 _db.CommitTran();
1241 1288 }
... ... @@ -1252,57 +1299,90 @@ namespace NCC.Extend.LqKdKdjlb
1252 1299 /// <summary>
1253 1300 /// 作废开单记录
1254 1301 /// </summary>
1255   - /// <param name="id">开单记录主键ID</param>
  1302 + /// <param name="input">作废开单记录输入</param>
1256 1303 /// <returns>无返回值</returns>
  1304 + /// <remarks>
  1305 + /// 作废指定的开单记录,包括相关的品项明细、业绩记录等
  1306 + ///
  1307 + /// 示例请求:
  1308 + /// ```json
  1309 + /// {
  1310 + /// "id": "123456789",
  1311 + /// "remarks": "客户要求作废此订单"
  1312 + /// }
  1313 + /// ```
  1314 + ///
  1315 + /// 参数说明:
  1316 + /// - id: 开单记录主键ID(必填)
  1317 + /// - remarks: 作废备注说明
  1318 + /// </remarks>
1257 1319 /// <response code="200">作废成功</response>
1258 1320 /// <response code="400">参数错误,开单记录ID不能为空</response>
1259 1321 /// <response code="404">开单记录不存在</response>
1260 1322 /// <response code="500">服务器内部错误</response>
1261   - [HttpPut("Cancel/{id}")]
1262   - public async Task Cancel(string id)
  1323 + [HttpPut("Cancel")]
  1324 + public async Task Cancel(CancelBillingInput input)
1263 1325 {
1264   - if (string.IsNullOrEmpty(id))
  1326 + if (string.IsNullOrEmpty(input.Id))
1265 1327 {
1266 1328 throw NCCException.Oh("开单记录ID不能为空");
1267 1329 }
1268   -
1269 1330 try
1270 1331 {
1271 1332 //开启事务
1272 1333 _db.BeginTran();
  1334 + // 检查开单记录是否可以作废
  1335 + var (canCancel, errorMessage) = await CheckBillingCanCancelAsync(input.Id);
  1336 + if (!canCancel)
  1337 + {
  1338 + throw NCCException.Oh(errorMessage);
  1339 + }
1273 1340  
1274 1341 // 查询开单记录
1275   - var entity = await _db.Queryable<LqKdKdjlbEntity>().FirstAsync(p => p.Id == id);
  1342 + var entity = await _db.Queryable<LqKdKdjlbEntity>().FirstAsync(p => p.Id == input.Id);
1276 1343 if (entity == null)
1277 1344 {
1278 1345 throw NCCException.Oh("开单记录不存在");
1279 1346 }
1280 1347  
1281   - // 检查是否已经作废
1282   - if (entity.IsEffective == 0)
1283   - {
1284   - throw NCCException.Oh("该开单记录已经作废");
1285   - }
1286   -
1287   - // 标记开单记录为无效
1288   - entity.IsEffective = 0;
  1348 + // 标记开单记录为无效,并添加作废备注
  1349 + entity.IsEffective = StatusEnum.无效.GetHashCode();
  1350 + entity.CancelRefRemarks = input.Remarks;
  1351 + entity.UpdateTime = DateTime.Now;
1289 1352 await _db.Updateable(entity).ExecuteCommandAsync();
  1353 +
1290 1354 // 标记对应开单明细表为无效
1291   - await _db.Updateable<LqKdPxmxEntity>().SetColumns(it => new LqKdPxmxEntity { IsEffective = 0 }).Where(it => it.Glkdbh == id).ExecuteCommandAsync();
  1355 + await _db.Updateable<LqKdPxmxEntity>()
  1356 + .SetColumns(it => new LqKdPxmxEntity { IsEffective = StatusEnum.无效.GetHashCode() })
  1357 + .Where(it => it.Glkdbh == input.Id)
  1358 + .ExecuteCommandAsync();
  1359 +
1292 1360 // 标记健康师业绩为无效
1293   - await _db.Updateable<LqKdJksyjEntity>().SetColumns(it => new LqKdJksyjEntity { IsEffective = 0 }).Where(it => it.Glkdbh == id).ExecuteCommandAsync();
  1361 + await _db.Updateable<LqKdJksyjEntity>()
  1362 + .SetColumns(it => new LqKdJksyjEntity { IsEffective = StatusEnum.无效.GetHashCode() })
  1363 + .Where(it => it.Glkdbh == input.Id)
  1364 + .ExecuteCommandAsync();
  1365 +
1294 1366 // 标记科技部老师业绩为无效
1295   - await _db.Updateable<LqKdKjbsyjEntity>().SetColumns(it => new LqKdKjbsyjEntity { IsEffective = 0 }).Where(it => it.Glkdbh == id).ExecuteCommandAsync();
  1367 + await _db.Updateable<LqKdKjbsyjEntity>()
  1368 + .SetColumns(it => new LqKdKjbsyjEntity { IsEffective = StatusEnum.无效.GetHashCode() })
  1369 + .Where(it => it.Glkdbh == input.Id)
  1370 + .ExecuteCommandAsync();
  1371 +
1296 1372 // 标记开单_储扣详细表为无效
1297   - await _db.Updateable<LqKdDeductinfoEntity>().SetColumns(it => new LqKdDeductinfoEntity { IsEffective = 0 }).Where(it => it.BillingId == id).ExecuteCommandAsync();
  1373 + await _db.Updateable<LqKdDeductinfoEntity>()
  1374 + .SetColumns(it => new LqKdDeductinfoEntity { IsEffective = StatusEnum.无效.GetHashCode() })
  1375 + .Where(it => it.BillingId == input.Id)
  1376 + .ExecuteCommandAsync();
  1377 +
1298 1378 //关闭事务
1299 1379 _db.CommitTran();
1300 1380 }
1301   - catch (Exception)
  1381 + catch (Exception ex)
1302 1382 {
1303 1383 //回滚事务
1304 1384 _db.RollbackTran();
1305   - throw NCCException.Oh(ErrorCode.COM1001);
  1385 + throw NCCException.Oh($"作废开单记录失败: {ex.Message}");
1306 1386 }
1307 1387 }
1308 1388 #endregion
... ... @@ -1482,5 +1562,156 @@ namespace NCC.Extend.LqKdKdjlb
1482 1562 }
1483 1563 }
1484 1564 #endregion
  1565 +
  1566 + #region 根据门店获取该门店的欠款记录
  1567 + /// <summary>
  1568 + /// 根据门店获取该门店的欠款记录
  1569 + /// </summary>
  1570 + /// <param name="input">查询参数</param>
  1571 + /// <returns>分页的欠款记录</returns>
  1572 + /// <remarks>
  1573 + /// 获取指定门店的欠款记录,考虑已缴欠款情况,支持分页
  1574 + ///
  1575 + /// 示例请求:
  1576 + /// ```json
  1577 + /// {
  1578 + /// "storeId": "门店ID",
  1579 + /// "currentPage": 1,
  1580 + /// "pageSize": 10,
  1581 + /// "sidx": "Kdrq",
  1582 + /// "sort": "desc"
  1583 + /// }
  1584 + /// ```
  1585 + ///
  1586 + /// 参数说明:
  1587 + /// - storeId: 门店ID,必填
  1588 + /// - currentPage: 当前页码
  1589 + /// - pageSize: 每页大小
  1590 + /// - sidx: 排序字段,默认按开单日期
  1591 + /// - sort: 排序方式,默认降序
  1592 + ///
  1593 + /// 返回说明:
  1594 + /// - 只返回仍有欠款的记录(总欠款 > 已缴欠款)
  1595 + /// - 包含开单编号、客户信息、欠款金额、已缴金额等
  1596 + /// </remarks>
  1597 + /// <response code="200">成功返回分页的欠款记录列表</response>
  1598 + /// <response code="400">门店ID不能为空</response>
  1599 + /// <response code="500">服务器错误</response>
  1600 + [HttpGet("GetDebtRecordByStoreId")]
  1601 + public async Task<dynamic> GetDebtRecordByStoreId([FromQuery] DebtRecordQueryInput input)
  1602 + {
  1603 + try
  1604 + {
  1605 + if (string.IsNullOrEmpty(input.StoreId))
  1606 + {
  1607 + throw NCCException.Oh("门店ID不能为空");
  1608 + }
  1609 + var sidx = string.IsNullOrEmpty(input.sidx) ? "Kdrq" : input.sidx;
  1610 + var sort = string.IsNullOrEmpty(input.sort) ? "desc" : input.sort;
  1611 + // 获取该门店的欠款记录,考虑已缴欠款情况
  1612 + // 只返回仍有欠款的记录:总欠款 > 已缴欠款
  1613 + var debtRecords = await _db.Queryable<LqKdKdjlbEntity>()
  1614 + .Where(p => p.Djmd == input.StoreId && p.Qk > p.PaidDebt && p.IsEffective == StatusEnum.有效.GetHashCode())
  1615 + .Select(it => new LqKdKdjlbListOutput
  1616 + {
  1617 + id = it.Id,
  1618 + djmd = it.Djmd,
  1619 + jsj = it.Jsj,
  1620 + kdrq = it.Kdrq,
  1621 + gjlx = it.Gjlx,
  1622 + hgjg = it.Hgjg,
  1623 + zdyj = it.Zdyj,
  1624 + sfyj = it.Sfyj,
  1625 + qk = it.Qk,
  1626 + ckfs = it.Ckfs,
  1627 + PaidDebt = it.PaidDebt,
  1628 + fkfs = it.Fkfs,
  1629 + fkyy = it.Fkyy,
  1630 + fkpd = it.Fkpd,
  1631 + khly = it.Khly,
  1632 + tjr = it.Tjr,
  1633 + deductAmount = it.DeductAmount,
  1634 + sfskdd = it.Sfskdd,
  1635 + jj = it.Jj,
  1636 + bz = it.Bz,
  1637 + kdhy = it.Kdhy,
  1638 + kdhyc = it.Kdhyc,
  1639 + kdhysjh = it.Kdhysjh,
  1640 + jksyj = it.Jksyj,
  1641 + kjblsyj = it.Kjblsyj,
  1642 + pxxx = it.Pxxx,
  1643 + IsEffective = it.IsEffective,
  1644 + CreateUser = it.CreateUser,
  1645 + CreateUserName = SqlFunc.Subqueryable<UserEntity>().Where(x => x.Id == it.CreateUser).Select(x => x.RealName),
  1646 + })
  1647 + .MergeTable()
  1648 + .OrderBy(sidx + " " + sort)
  1649 + .ToPagedListAsync(input.currentPage, input.pageSize);
  1650 +
  1651 + return PageResult<LqKdKdjlbListOutput>.SqlSugarPageResult(debtRecords);
  1652 + }
  1653 + catch (Exception ex)
  1654 + {
  1655 + throw NCCException.Oh($"获取门店欠款记录失败: {ex.Message}");
  1656 + }
  1657 + }
  1658 + #endregion
  1659 +
  1660 + #region 私有方法
  1661 + /// <summary>
  1662 + /// 检查开单记录是否可以操作
  1663 + /// </summary>
  1664 + /// <param name="billingId">开单记录ID</param>
  1665 + /// <returns>是否可以作废</returns>
  1666 + private async Task<(bool canCancel, string errorMessage)> CheckBillingCanCancelAsync(string billingId)
  1667 + {
  1668 + try
  1669 + {
  1670 + // 查询开单记录
  1671 + var entity = await _db.Queryable<LqKdKdjlbEntity>().FirstAsync(p => p.Id == billingId);
  1672 + if (entity == null)
  1673 + {
  1674 + return (false, "开单记录不存在");
  1675 + }
  1676 + // 检查是否已经作废
  1677 + if (entity.IsEffective == StatusEnum.无效.GetHashCode())
  1678 + {
  1679 + return (false, "该开单记录已经作废");
  1680 + }
  1681 + // 判断是否有对应的补缴记录
  1682 + var qkbjList = await _db.Queryable<LqKdKdjlbEntity>().Where(p => p.SupplementBillingId == billingId).ToListAsync();
  1683 + if (qkbjList.Any())
  1684 + {
  1685 + return (false, "该开单记录有对应的补缴记录,不能进行操作");
  1686 + }
  1687 + // 查询开单记录下的品项明细ID列表
  1688 + var pxmxIdList = await _db.Queryable<LqKdPxmxEntity>().Where(p => p.Glkdbh == billingId).Select(p => p.Id).Distinct().ToListAsync();
  1689 + // 判断是否有对应的消耗记录
  1690 + var xhPxmxList = await _db.Queryable<LqXhPxmxEntity>().Where(p => pxmxIdList.Contains(p.BillingItemId)).ToListAsync();
  1691 + if (xhPxmxList.Any())
  1692 + {
  1693 + return (false, "该开单记录有对应的消耗记录,不能进行操作");
  1694 + }
  1695 + // 判断是否有退卡记录
  1696 + var hytkMxList = await _db.Queryable<LqHytkMxEntity>().Where(p => pxmxIdList.Contains(p.BillingItemId)).ToListAsync();
  1697 + if (hytkMxList.Any())
  1698 + {
  1699 + return (false, "该开单记录有对应的退卡记录,不能进行操作");
  1700 + }
  1701 + // 判断是否已经有储扣记录
  1702 + var deductInfoList = await _db.Queryable<LqKdDeductinfoEntity>().Where(p => pxmxIdList.Contains(p.DeductId)).ToListAsync();
  1703 + if (deductInfoList.Any())
  1704 + {
  1705 + return (false, "该开单记录有对应的储扣记录,不能进行操作");
  1706 + }
  1707 +
  1708 + return (true, string.Empty);
  1709 + }
  1710 + catch (Exception ex)
  1711 + {
  1712 + return (false, $"检查开单记录状态失败: {ex.Message}");
  1713 + }
  1714 + }
  1715 + #endregion
1485 1716 }
1486 1717 }
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs
... ... @@ -344,7 +344,6 @@ namespace NCC.Extend.LqKhxx
344 344 {
345 345 throw NCCException.Oh("客户ID不能为空");
346 346 }
347   -
348 347 // 查询客户是否存在
349 348 var customerExists = await _db.Queryable<LqKhxxEntity>().Where(c => c.Id == customerId).AnyAsync();
350 349  
... ... @@ -352,13 +351,10 @@ namespace NCC.Extend.LqKhxx
352 351 {
353 352 throw NCCException.Oh("客户不存在");
354 353 }
355   -
356 354 // 查询开单记录数量
357   - var orderCount = await _db.Queryable<LqKdKdjlbEntity>().Where(o => o.Kdhy == customerId).CountAsync();
358   -
  355 + var orderCount = await _db.Queryable<LqKdKdjlbEntity>().Where(o => o.Kdhy == customerId && o.IsEffective == StatusEnum.有效.GetHashCode() && o.Sfyj > 0).CountAsync();
359 356 var hasOrderRecord = orderCount > 0;
360 357 var orderType = hasOrderRecord ? "repeat_order" : "first_order";
361   -
362 358 return new LqKhxxOrderTypeOutput
363 359 {
364 360 CustomerId = customerId,
... ... @@ -546,6 +542,7 @@ namespace NCC.Extend.LqKhxx
546 542 // 先查询基础品项数据
547 543 var baseItems = await _db.Queryable<LqKdPxmxEntity>()
548 544 .Where(x => x.MemberId == memberId)
  545 + .Where(x => x.IsEffective == StatusEnum.有效.GetHashCode())
549 546 .Select(x => new
550 547 {
551 548 x.Id,
... ... @@ -560,6 +557,7 @@ namespace NCC.Extend.LqKhxx
560 557 // 查询消费数据
561 558 var consumedData = await _db.Queryable<LqXhPxmxEntity>()
562 559 .Where(x => baseItems.Select(b => b.Id).Contains(x.BillingItemId))
  560 + .Where(x => x.IsEffective == StatusEnum.有效.GetHashCode())
563 561 .GroupBy(x => x.BillingItemId)
564 562 .Select(x => new
565 563 {
... ... @@ -571,6 +569,7 @@ namespace NCC.Extend.LqKhxx
571 569 // 查询退卡数据
572 570 var refundedData = await _db.Queryable<LqHytkMxEntity>()
573 571 .Where(x => baseItems.Select(b => b.Id).Contains(x.BillingItemId))
  572 + .Where(x => x.IsEffective == StatusEnum.有效.GetHashCode())
574 573 .GroupBy(x => x.BillingItemId)
575 574 .Select(x => new
576 575 {
... ... @@ -582,11 +581,12 @@ namespace NCC.Extend.LqKhxx
582 581 //查询储扣数据
583 582 var deductData = await _db.Queryable<LqKdDeductinfoEntity>()
584 583 .Where(x => baseItems.Select(b => b.Id).Contains(x.DeductId))
  584 + .Where(x => x.IsEffective == StatusEnum.有效.GetHashCode())
585 585 .GroupBy(x => x.DeductId)
586 586 .Select(x => new
587 587 {
588 588 BillingItemId = x.DeductId,
589   - TotalDeduct = SqlFunc.AggregateSum(x.Amount)
  589 + TotalDeduct = SqlFunc.AggregateSum(x.ProjectNumber)
590 590 })
591 591 .ToListAsync();
592 592  
... ... @@ -609,6 +609,8 @@ namespace NCC.Extend.LqKhxx
609 609 {
610 610 item.RemainingCount = item.TotalPurchased - item.ConsumedCount - item.RefundedCount - item.DeductCount;
611 611 }
  612 + //过滤剩余数量为0的品项,先暂时为不等于 0 ,因为现在有问题,会出现负数,后面再修改
  613 + remainingItems = remainingItems.Where(item => item.RemainingCount != 0).ToList();
612 614 return new MemberRemainingItemsOutput
613 615 {
614 616 MemberId = memberId,
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqPackageInfoService.cs 0 → 100644
  1 +using System;
  2 +using System.Collections.Generic;
  3 +using System.Linq;
  4 +using System.Threading.Tasks;
  5 +using Mapster;
  6 +using Microsoft.AspNetCore.Mvc;
  7 +using NCC.Common.Core.Manager;
  8 +using NCC.Common.Filter;
  9 +using NCC.Dependency;
  10 +using NCC.DynamicApiController;
  11 +using NCC.Extend.Entitys.Dto.LqPackageInfo;
  12 +using NCC.Extend.Entitys.Enum;
  13 +using NCC.Extend.Entitys.lq_package_info;
  14 +using NCC.Extend.Entitys.lq_package_item_detail;
  15 +using NCC.Extend.Interfaces.LqPackageInfo;
  16 +using NCC.FriendlyException;
  17 +using SqlSugar;
  18 +using Yitter.IdGenerator;
  19 +
  20 +namespace NCC.Extend.LqPackageInfo
  21 +{
  22 + /// <summary>
  23 + /// 营销活动服务
  24 + /// </summary>
  25 + [ApiDescriptionSettings(Tag = "绿纤营销活动服务", Name = "LqPackageInfo", Order = 200)]
  26 + [Route("api/Extend/[controller]")]
  27 + public class LqPackageInfoService : ILqPackageInfoService, IDynamicApiController, ITransient
  28 + {
  29 + private readonly ISqlSugarRepository<LqPackageInfoEntity> _packageInfoRepository;
  30 + private readonly SqlSugarScope _db;
  31 + private readonly IUserManager _userManager;
  32 +
  33 + /// <summary>
  34 + /// 构造函数
  35 + /// </summary>
  36 + /// <param name="packageInfoRepository">营销活动仓储</param>
  37 + /// <param name="userManager">用户管理器</param>
  38 + public LqPackageInfoService(ISqlSugarRepository<LqPackageInfoEntity> packageInfoRepository, IUserManager userManager)
  39 + {
  40 + _packageInfoRepository = packageInfoRepository;
  41 + _db = packageInfoRepository.Context;
  42 + _userManager = userManager;
  43 + }
  44 +
  45 + #region 添加营销活动
  46 + /// <summary>
  47 + /// 添加营销活动
  48 + /// </summary>
  49 + /// <param name="input">营销活动创建输入</param>
  50 + /// <returns>营销活动ID</returns>
  51 + /// <remarks>
  52 + /// 创建新的营销活动,包含活动基本信息和品项明细
  53 + ///
  54 + /// 示例请求:
  55 + /// ```json
  56 + /// {
  57 + /// "activityName": "春季护肤优惠活动",
  58 + /// "activityDesc": "春季护肤特惠活动",
  59 + /// "startTime": "2025-03-01T00:00:00",
  60 + /// "endTime": "2025-03-31T23:59:59",
  61 + /// "minItemQuantity": 2,
  62 + /// "activityRules": "活动规则说明",
  63 + /// "activityImages": "[\"image1.jpg\"]",
  64 + /// "sortOrder": 1,
  65 + /// "activityItems": [
  66 + /// {
  67 + /// "itemId": "ITEM001",
  68 + /// "itemName": "面部清洁",
  69 + /// "itemCategory": "基础护理",
  70 + /// "itemRemark": "推荐品项"
  71 + /// }
  72 + /// ]
  73 + /// }
  74 + /// ```
  75 + ///
  76 + /// 参数说明:
  77 + /// - activityName: 营销活动名称
  78 + /// - activityDesc: 营销活动描述
  79 + /// - startTime: 活动开始时间
  80 + /// - endTime: 活动结束时间
  81 + /// - minItemQuantity: 至少购买品项数量
  82 + /// - activityRules: 活动规则说明
  83 + /// - activityImages: 活动图片(JSON格式)
  84 + /// - sortOrder: 排序
  85 + /// - activityItems: 营销活动品项明细列表
  86 + /// </remarks>
  87 + /// <response code="200">成功创建营销活动,返回营销活动ID</response>
  88 + /// <response code="400">请求参数错误</response>
  89 + /// <response code="500">服务器内部错误</response>
  90 + [HttpPost("CreatePackageInfoAsync")]
  91 + public async Task<string> CreatePackageInfoAsync(LqPackageInfoCrInput input)
  92 + {
  93 + try
  94 + {
  95 + // 验证活动时间
  96 + if (input.StartTime >= input.EndTime)
  97 + {
  98 + throw NCCException.Oh("活动开始时间必须小于结束时间");
  99 + }
  100 +
  101 + // 验证品项明细
  102 + if (input.ActivityItems == null || !input.ActivityItems.Any())
  103 + {
  104 + throw NCCException.Oh("营销活动必须包含至少一个品项");
  105 + }
  106 +
  107 + // 验证至少购买品项数量
  108 + if (input.ActivityItems.Count < input.MinItemQuantity)
  109 + {
  110 + throw NCCException.Oh($"品项数量不能少于至少购买品项数量({input.MinItemQuantity})");
  111 + }
  112 +
  113 + // 开始事务
  114 + _db.BeginTran();
  115 +
  116 + try
  117 + {
  118 + // 创建营销活动实体
  119 + var packageInfo = input.Adapt<LqPackageInfoEntity>();
  120 + packageInfo.Id = YitIdHelper.NextId().ToString();
  121 + packageInfo.CreateTime = DateTime.Now;
  122 + packageInfo.UpdateTime = DateTime.Now;
  123 + packageInfo.CreateUser = _userManager.UserId;
  124 + packageInfo.UpdateUser = _userManager.UserId;
  125 + packageInfo.IsEffective = StatusEnum.有效.GetHashCode();
  126 + // 保存营销活动
  127 + await _db.Insertable(packageInfo).ExecuteCommandAsync();
  128 + // 创建营销活动品项明细
  129 + var packageItemDetails = input.ActivityItems.Select(item =>
  130 + {
  131 + var packageItemDetail = item.Adapt<LqPackageItemDetailEntity>();
  132 + packageItemDetail.Id = YitIdHelper.NextId().ToString();
  133 + packageItemDetail.ActivityId = packageInfo.Id;
  134 + packageItemDetail.CreateTime = DateTime.Now;
  135 + packageItemDetail.UpdateTime = DateTime.Now;
  136 + packageItemDetail.IsEffective = StatusEnum.有效.GetHashCode();
  137 + return packageItemDetail;
  138 + }).ToList();
  139 + // 批量保存营销活动品项明细
  140 + if (packageItemDetails.Any())
  141 + {
  142 + await _db.Insertable(packageItemDetails).ExecuteCommandAsync();
  143 + }
  144 + // 提交事务
  145 + _db.CommitTran();
  146 +
  147 + return packageInfo.Id;
  148 + }
  149 + catch
  150 + {
  151 + // 回滚事务
  152 + _db.RollbackTran();
  153 + throw;
  154 + }
  155 + }
  156 + catch (Exception ex)
  157 + {
  158 + throw NCCException.Oh($"添加营销活动失败: {ex.Message}");
  159 + }
  160 + }
  161 + #endregion
  162 +
  163 + #region 获取营销活动列表
  164 + /// <summary>
  165 + /// 获取营销活动列表
  166 + /// </summary>
  167 + /// <param name="input">营销活动列表查询输入</param>
  168 + /// <returns>营销活动列表</returns>
  169 + /// <remarks>
  170 + /// 获取营销活动列表,支持按活动名称、时间范围等条件筛选
  171 + ///
  172 + /// 查询参数说明:
  173 + /// - activityName: 活动名称(模糊查询)
  174 + /// - activityDesc: 活动描述(模糊查询)
  175 + /// - startTimeStart: 活动开始时间范围开始
  176 + /// - startTimeEnd: 活动开始时间范围结束
  177 + /// - endTimeStart: 活动结束时间范围开始
  178 + /// - endTimeEnd: 活动结束时间范围结束
  179 + /// - minItemQuantity: 至少购买品项数量
  180 + /// - createTimeStart: 创建时间范围开始
  181 + /// - createTimeEnd: 创建时间范围结束
  182 + /// </remarks>
  183 + /// <response code="200">成功获取营销活动列表</response>
  184 + /// <response code="400">请求参数错误</response>
  185 + /// <response code="500">服务器内部错误</response>
  186 + [HttpGet("GetPackageInfoListAsync")]
  187 + public async Task<dynamic> GetPackageInfoListAsync([FromQuery] LqPackageInfoListQueryInput input)
  188 + {
  189 + var sidx = input.sidx == null ? "CreateTime" : input.sidx;
  190 + var data = await _db.Queryable<LqPackageInfoEntity>()
  191 + .WhereIF(!string.IsNullOrEmpty(input.ActivityName), w => w.ActivityName.Contains(input.ActivityName))
  192 + .WhereIF(!string.IsNullOrEmpty(input.ActivityDesc), w => w.ActivityDesc.Contains(input.ActivityDesc))
  193 + .WhereIF(input.StartTimeStart.HasValue, w => w.StartTime >= input.StartTimeStart.Value)
  194 + .WhereIF(input.StartTimeEnd.HasValue, w => w.StartTime <= input.StartTimeEnd.Value)
  195 + .WhereIF(input.EndTimeStart.HasValue, w => w.EndTime >= input.EndTimeStart.Value)
  196 + .WhereIF(input.EndTimeEnd.HasValue, w => w.EndTime <= input.EndTimeEnd.Value)
  197 + .WhereIF(input.MinItemQuantity.HasValue, w => w.MinItemQuantity == input.MinItemQuantity.Value)
  198 + .WhereIF(input.CreateTimeStart.HasValue, w => w.CreateTime >= input.CreateTimeStart.Value)
  199 + .WhereIF(input.CreateTimeEnd.HasValue, w => w.CreateTime <= input.CreateTimeEnd.Value)
  200 + .Select(it => new LqPackageInfoListOutput
  201 + {
  202 + Id = it.Id,
  203 + ActivityName = it.ActivityName,
  204 + ActivityDesc = it.ActivityDesc,
  205 + StartTime = it.StartTime,
  206 + EndTime = it.EndTime,
  207 + MinItemQuantity = it.MinItemQuantity,
  208 + ActivityRules = it.ActivityRules,
  209 + SortOrder = it.SortOrder,
  210 + CreateTime = it.CreateTime
  211 + }).MergeTable().OrderBy(sidx + " " + input.sort).ToPagedListAsync(input.currentPage, input.pageSize);
  212 + return PageResult<LqPackageInfoListOutput>.SqlSugarPageResult(data);
  213 + }
  214 + #endregion
  215 +
  216 + #region 获取营销活动详情
  217 + /// <summary>
  218 + /// 获取营销活动详情
  219 + /// </summary>
  220 + /// <param name="id">营销活动ID</param>
  221 + /// <returns>营销活动详情</returns>
  222 + [HttpGet("GetPackageInfoDetailAsync")]
  223 + public async Task<dynamic> GetPackageInfoDetailAsync(string id)
  224 + {
  225 + var data = await _db.Queryable<LqPackageInfoEntity>().Where(w => w.Id == id).FirstAsync();
  226 + var output = data.Adapt<LqPackageInfoListOutput>();
  227 + return output;
  228 + }
  229 + #endregion
  230 +
  231 + #region 更新营销活动
  232 + /// <summary>
  233 + /// 更新营销活动
  234 + /// </summary>
  235 + /// <param name="input">营销活动更新输入</param>
  236 + /// <returns>营销活动ID</returns>
  237 + /// <remarks>
  238 + /// 更新营销活动信息,包括活动基本信息和品项明细
  239 + ///
  240 + /// 示例请求:
  241 + /// ```json
  242 + /// {
  243 + /// "id": "123456789",
  244 + /// "activityName": "春季护肤优惠活动",
  245 + /// "activityDesc": "春季护肤特惠活动",
  246 + /// "startTime": "2025-03-01T00:00:00",
  247 + /// "endTime": "2025-03-31T23:59:59",
  248 + /// "minItemQuantity": 2,
  249 + /// "activityRules": "活动规则说明",
  250 + /// "activityImages": "[\"image1.jpg\"]",
  251 + /// "sortOrder": 1,
  252 + /// "activityItems": [
  253 + /// {
  254 + /// "itemId": "ITEM001",
  255 + /// "itemName": "面部清洁",
  256 + /// "itemCategory": "基础护理",
  257 + /// "itemRemark": "推荐品项"
  258 + /// }
  259 + /// ]
  260 + /// }
  261 + /// ```
  262 + ///
  263 + /// 参数说明:
  264 + /// - id: 营销活动ID(必填)
  265 + /// - activityName: 营销活动名称
  266 + /// - activityDesc: 营销活动描述
  267 + /// - startTime: 活动开始时间
  268 + /// - endTime: 活动结束时间
  269 + /// - minItemQuantity: 至少购买品项数量
  270 + /// - activityRules: 活动规则说明
  271 + /// - activityImages: 活动图片(JSON格式)
  272 + /// - sortOrder: 排序
  273 + /// - activityItems: 营销活动品项明细列表
  274 + /// </remarks>
  275 + /// <response code="200">成功更新营销活动,返回营销活动ID</response>
  276 + /// <response code="400">请求参数错误</response>
  277 + /// <response code="404">营销活动不存在</response>
  278 + /// <response code="500">服务器内部错误</response>
  279 + [HttpPut("UpdatePackageInfoAsync")]
  280 + public async Task<string> UpdatePackageInfoAsync(LqPackageInfoUpInput input)
  281 + {
  282 + try
  283 + {
  284 + // 验证活动时间
  285 + if (input.StartTime >= input.EndTime)
  286 + {
  287 + throw NCCException.Oh("活动开始时间必须小于结束时间");
  288 + }
  289 +
  290 + // 验证品项明细
  291 + if (input.ActivityItems == null || !input.ActivityItems.Any())
  292 + {
  293 + throw NCCException.Oh("营销活动必须包含至少一个品项");
  294 + }
  295 +
  296 + // 验证至少购买品项数量
  297 + if (input.ActivityItems.Count < input.MinItemQuantity)
  298 + {
  299 + throw NCCException.Oh($"品项数量不能少于至少购买品项数量({input.MinItemQuantity})");
  300 + }
  301 +
  302 + // 检查营销活动是否存在
  303 + var existingActivity = await _db.Queryable<LqPackageInfoEntity>()
  304 + .Where(w => w.Id == input.Id)
  305 + .FirstAsync();
  306 +
  307 + if (existingActivity == null)
  308 + {
  309 + throw NCCException.Oh("营销活动不存在");
  310 + }
  311 +
  312 + // 开始事务
  313 + _db.BeginTran();
  314 +
  315 + try
  316 + {
  317 + // 更新营销活动基本信息
  318 + var updateResult = await _db.Updateable<LqPackageInfoEntity>()
  319 + .SetColumns(it => new LqPackageInfoEntity
  320 + {
  321 + ActivityName = input.ActivityName,
  322 + ActivityDesc = input.ActivityDesc,
  323 + StartTime = input.StartTime,
  324 + EndTime = input.EndTime,
  325 + MinItemQuantity = input.MinItemQuantity,
  326 + ActivityRules = input.ActivityRules,
  327 + ActivityImages = input.ActivityImages,
  328 + SortOrder = input.SortOrder,
  329 + UpdateTime = DateTime.Now,
  330 + UpdateUser = _userManager.UserId
  331 + })
  332 + .Where(w => w.Id == input.Id)
  333 + .ExecuteCommandAsync();
  334 +
  335 + if (updateResult <= 0)
  336 + {
  337 + throw NCCException.Oh("更新营销活动失败");
  338 + }
  339 +
  340 + // 删除原有的品项明细
  341 + await _db.Deleteable<LqPackageItemDetailEntity>()
  342 + .Where(w => w.ActivityId == input.Id)
  343 + .ExecuteCommandAsync();
  344 +
  345 + // 创建新的品项明细
  346 + var packageItemDetails = input.ActivityItems.Select(item =>
  347 + {
  348 + var packageItemDetail = item.Adapt<LqPackageItemDetailEntity>();
  349 + packageItemDetail.Id = YitIdHelper.NextId().ToString();
  350 + packageItemDetail.ActivityId = input.Id;
  351 + packageItemDetail.CreateTime = DateTime.Now;
  352 + packageItemDetail.UpdateTime = DateTime.Now;
  353 + packageItemDetail.IsEffective = 1;
  354 + return packageItemDetail;
  355 + }).ToList();
  356 +
  357 + // 批量保存新的品项明细
  358 + if (packageItemDetails.Any())
  359 + {
  360 + await _db.Insertable(packageItemDetails).ExecuteCommandAsync();
  361 + }
  362 +
  363 + // 提交事务
  364 + _db.CommitTran();
  365 +
  366 + return input.Id;
  367 + }
  368 + catch
  369 + {
  370 + // 回滚事务
  371 + _db.RollbackTran();
  372 + throw;
  373 + }
  374 + }
  375 + catch (Exception ex)
  376 + {
  377 + throw NCCException.Oh($"更新营销活动失败: {ex.Message}");
  378 + }
  379 + }
  380 + #endregion
  381 +
  382 + #region 标记删除营销活动
  383 + /// <summary>
  384 + /// 标记删除营销活动
  385 + /// </summary>
  386 + /// <param name="id">营销活动ID</param>
  387 + /// <returns>营销活动ID</returns>
  388 + [HttpDelete("MarkDeletePackageInfoAsync")]
  389 + public async Task<string> MarkDeletePackageInfoAsync(string id)
  390 + {
  391 + var entity = await _db.Queryable<LqPackageInfoEntity>().Where(w => w.Id == id).FirstAsync();
  392 + if (entity == null)
  393 + {
  394 + throw NCCException.Oh("营销活动不存在");
  395 + }
  396 + entity.IsEffective = StatusEnum.无效.GetHashCode();
  397 + await _db.Updateable(entity).ExecuteCommandAsync();
  398 + await _db.Updateable<LqPackageItemDetailEntity>().SetColumns(it => new LqPackageItemDetailEntity { IsEffective = StatusEnum.无效.GetHashCode() }).Where(w => w.ActivityId == id).ExecuteCommandAsync();
  399 + return id;
  400 + }
  401 + #endregion
  402 +
  403 + #region 获取当前时间有效的活动
  404 + /// <summary>
  405 + /// 获取当前时间有效的活动
  406 + /// </summary>
  407 + /// <returns>当前时间有效的活动</returns>
  408 + [HttpGet("GetCurrentTimeEffectiveActivityAsync")]
  409 + public async Task<dynamic> GetCurrentTimeEffectiveActivityAsync()
  410 + {
  411 + var data = await _db.Queryable<LqPackageInfoEntity>().Where(w => w.StartTime <= DateTime.Now && w.EndTime >= DateTime.Now && w.IsEffective == StatusEnum.有效.GetHashCode()).ToListAsync();
  412 + var output = data.Adapt<List<LqPackageInfoListOutput>>();
  413 + return output;
  414 + }
  415 + #endregion
  416 + }
  417 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs
... ... @@ -19,6 +19,7 @@ using NCC.Extend.Entitys.Dto.LqTkjlb;
19 19 using NCC.Extend.Entitys.Enum;
20 20 using NCC.Extend.Entitys.lq_event;
21 21 using NCC.Extend.Entitys.lq_eventuser;
  22 +using NCC.Extend.Entitys.lq_kd_kdjlb;
22 23 using NCC.Extend.Entitys.lq_khxx;
23 24 using NCC.Extend.Entitys.lq_mdxx;
24 25 using NCC.Extend.Entitys.lq_tkjlb;
... ... @@ -80,7 +81,7 @@ namespace NCC.Extend.LqTkjlb
80 81 teamName = p.TeamName,
81 82 eventId = p.EventId,
82 83 eventName = SqlFunc.Subqueryable<LqEventEntity>().Where(e => e.Id == p.EventId).Select(e => e.EventName),
83   - storeName = SqlFunc.Subqueryable<LqMdxxEntity>().Where(u => u.Id == p.StoreId).Select(u => u.Dm),
  84 + storeName = SqlFunc.Subqueryable<LqMdxxEntity>().Where(u => u.Id == p.StoreId).Select(u => u.Dm)
84 85 })
85 86 .FirstAsync();
86 87  
... ... @@ -185,8 +186,9 @@ namespace NCC.Extend.LqTkjlb
185 186 MemberInfo.Khmc = entity.CustomerName;
186 187 MemberInfo.Sjh = input.customerPhone; // 设置手机号
187 188 MemberInfo.Khlx = MemberTypeEnum.线索.GetHashCode().ToString();
188   - MemberInfo.Dah = "GK" + DateTime.Now.ToString("yyyyMMddHHmmss");
  189 + MemberInfo.Dah = "GK" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
189 190 MemberInfo.Jdqd = "19.9卡";
  191 +
190 192 //找到input.expansionUserId的用户信息
191 193 var userInfo = await _db.Queryable<UserEntity>().Where(u => u.Id == input.expansionUserId).FirstAsync();
192 194 //判断 岗位是否为健康师,如果是健康师,则设置拓客人员是健康师
... ... @@ -523,5 +525,7 @@ namespace NCC.Extend.LqTkjlb
523 525 return result.OrderByDescending(t => t.totalCount).ToList();
524 526 }
525 527 #endregion
  528 +
  529 +
526 530 }
527 531 }
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs
... ... @@ -20,6 +20,7 @@ using NCC.Extend.Entitys.Dto.LqXhHyhk;
20 20 using NCC.Extend.Entitys.Dto.LqXhJksyj;
21 21 using NCC.Extend.Entitys.Dto.LqXhKjbsyj;
22 22 using NCC.Extend.Entitys.Dto.LqXhPxmx;
  23 +using NCC.Extend.Entitys.Enum;
23 24 using NCC.Extend.Entitys.lq_kd_kdjlb;
24 25 using NCC.Extend.Entitys.lq_kd_pxmx;
25 26 using NCC.Extend.Entitys.lq_khxx;
... ... @@ -175,6 +176,7 @@ namespace NCC.Extend.LqXhHyhk
175 176 DateTime? startHksj = queryHksj != null ? Ext.GetDateTime(queryHksj.First()) : null;
176 177 DateTime? endHksj = queryHksj != null ? Ext.GetDateTime(queryHksj.Last()) : null;
177 178 var data = await _db.Queryable<LqXhHyhkEntity>()
  179 + .WhereIF(!string.IsNullOrEmpty(input.keyword), p => p.Hymc.Contains(input.keyword) || p.Hyzh.Contains(input.keyword) || p.MemberPhone.Contains(input.keyword))
178 180 .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
179 181 .WhereIF(!string.IsNullOrEmpty(input.md), p => p.Md.Equals(input.md))
180 182 .WhereIF(!string.IsNullOrEmpty(input.mdbh), p => p.Mdbh.Contains(input.mdbh))
... ... @@ -183,9 +185,6 @@ namespace NCC.Extend.LqXhHyhk
183 185 .WhereIF(!string.IsNullOrEmpty(input.hyzh), p => p.Hyzh.Contains(input.hyzh))
184 186 .WhereIF(!string.IsNullOrEmpty(input.hymc), p => p.Hymc.Contains(input.hymc))
185 187 .WhereIF(!string.IsNullOrEmpty(input.gklx), p => p.Gklx.Equals(input.gklx))
186   - // 注意:xfje 和 sgfy 现在是 decimal 类型,不支持字符串模糊查询
187   - // .WhereIF(!string.IsNullOrEmpty(input.xfje), p => SqlFunc.ToString(p.Xfje).Contains(input.xfje))
188   - // .WhereIF(!string.IsNullOrEmpty(input.sgfy), p => SqlFunc.ToString(p.Sgfy).Contains(input.sgfy))
189 188 .WhereIF(!string.IsNullOrEmpty(input.sfykjb), p => p.Sfykjb.Equals(input.sfykjb))
190 189 .WhereIF(queryHksj != null, p => p.Hksj >= new DateTime(startHksj.ToDate().Year, startHksj.ToDate().Month, startHksj.ToDate().Day, 0, 0, 0))
191 190 .WhereIF(queryHksj != null, p => p.Hksj <= new DateTime(endHksj.ToDate().Year, endHksj.ToDate().Month, endHksj.ToDate().Day, 23, 59, 59))
... ... @@ -205,6 +204,7 @@ namespace NCC.Extend.LqXhHyhk
205 204 sfykjb = it.Sfykjb,
206 205 hksj = it.Hksj,
207 206 czry = it.Czry,
  207 + memberPhone = it.MemberPhone,
208 208 })
209 209 .MergeTable()
210 210 .OrderBy(sidx + " " + input.sort)
... ... @@ -262,6 +262,7 @@ namespace NCC.Extend.LqXhHyhk
262 262 var entity = input.Adapt<LqXhHyhkEntity>();
263 263 entity.Id = YitIdHelper.NextId().ToString();
264 264 entity.Czry = _userManager.UserId;
  265 + entity.MemberPhone = _db.Queryable<LqKhxxEntity>().Where(w => w.Id == entity.Hy).First().Sjh;
265 266 entity.CreateTime = DateTime.Now;
266 267 try
267 268 {
... ... @@ -521,6 +522,12 @@ namespace NCC.Extend.LqXhHyhk
521 522 {
522 523 //开启事务
523 524 _db.BeginTran();
  525 + //查询记录
  526 + var LqXhHyhkInfo = await _db.Queryable<LqXhHyhkEntity>().Where(p => p.Id == id && p.IsEffective == StatusEnum.有效.GetHashCode()).FirstAsync();
  527 + if (LqXhHyhkInfo == null)
  528 + {
  529 + throw NCCException.Oh(ErrorCode.COM1005, "耗卡记录不存在或已作废");
  530 + }
524 531 entity.UpdateTime = DateTime.Now;
525 532 //更新会员耗卡记录
526 533 await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
... ... @@ -528,57 +535,31 @@ namespace NCC.Extend.LqXhHyhk
528 535 //清空原有数据
529 536 await _db.Deleteable<LqXhJksyjEntity>().Where(u => u.Glkdbh == id).ExecuteCommandAsync();
530 537 await _db.Deleteable<LqXhKjbsyjEntity>().Where(u => u.Glkdbh == id).ExecuteCommandAsync();
531   -
532   - // 注意:品项明细表不做删除操作,只更新或新增
533   - // await _db.Deleteable<LqXhPxmxEntity>().Where(u => u.ConsumeInfoId == id).ExecuteCommandAsync();
534   -
  538 + await _db.Deleteable<LqXhPxmxEntity>().Where(u => u.ConsumeInfoId == id).ExecuteCommandAsync();
535 539 // 收集所有需要插入的实体,然后批量插入
536 540 var allPxmxEntities = new List<LqXhPxmxEntity>();
537 541 var allJksyjEntities = new List<LqXhJksyjEntity>();
538 542 var allKjbsyjEntities = new List<LqXhKjbsyjEntity>();
539   -
540 543 // 处理品项明细列表
541 544 if (input.lqXhPxmxList != null && input.lqXhPxmxList.Any())
542 545 {
543 546 foreach (var item in input.lqXhPxmxList)
544 547 {
545   - // 检查品项明细是否已存在
546   - var existingPxmx = await _db.Queryable<LqXhPxmxEntity>()
547   - .Where(p => p.Id == item.id)
548   - .FirstAsync();
549   -
550   - LqXhPxmxEntity lqXhPxmxEntity;
551   - if (existingPxmx != null)
552   - {
553   - // 更新现有记录
554   - lqXhPxmxEntity = existingPxmx;
555   - // 注意:LqXhPxmxEntity 没有 UpdateTime 字段
556   - lqXhPxmxEntity.MemberId = entity.Hy;
557   - lqXhPxmxEntity.ProjectNumber = item.projectNumber ?? 1;
558   - lqXhPxmxEntity.TotalPrice = (decimal)(item.pxjg * (item.projectNumber ?? 1));
559   - lqXhPxmxEntity.Px = item.px;
560   - lqXhPxmxEntity.Pxmc = item.pxmc;
561   - lqXhPxmxEntity.Pxjg = item.pxjg;
562   - lqXhPxmxEntity.SourceType = item.sourceType;
563   - }
564   - else
  548 + // 创建品项明细实体
  549 + var lqXhPxmxEntity = new LqXhPxmxEntity
565 550 {
566   - // 创建新记录
567   - lqXhPxmxEntity = new LqXhPxmxEntity
568   - {
569   - Id = YitIdHelper.NextId().ToString(),
570   - ConsumeInfoId = entity.Id,
571   - BillingItemId = item.billingItemId,
572   - CreateTIme = DateTime.Now,
573   - MemberId = entity.Hy,
574   - ProjectNumber = item.projectNumber ?? 1,
575   - TotalPrice = (decimal)(item.pxjg * (item.projectNumber ?? 1)),
576   - Px = item.px,
577   - Pxmc = item.pxmc,
578   - Pxjg = item.pxjg,
579   - SourceType = item.sourceType,
580   - };
581   - }
  551 + Id = YitIdHelper.NextId().ToString(),
  552 + ConsumeInfoId = input.id,
  553 + BillingItemId = item.billingItemId,
  554 + CreateTIme = DateTime.Now,
  555 + MemberId = entity.Hy,
  556 + ProjectNumber = item.projectNumber ?? 1,
  557 + TotalPrice = (decimal)(item.pxjg * (item.projectNumber ?? 1)),
  558 + Px = item.px,
  559 + Pxmc = item.pxmc,
  560 + Pxjg = item.pxjg,
  561 + SourceType = item.sourceType,
  562 + };
582 563 allPxmxEntities.Add(lqXhPxmxEntity);
583 564  
584 565 // 收集该品项关联的健康师业绩
... ... @@ -590,7 +571,7 @@ namespace NCC.Extend.LqXhHyhk
590 571 new LqXhJksyjEntity
591 572 {
592 573 Id = YitIdHelper.NextId().ToString(),
593   - Glkdbh = entity.Id,
  574 + Glkdbh = input.id,
594 575 Jks = ijks_tem.jks,
595 576 Jksxm = ijks_tem.jksxm,
596 577 Jkszh = ijks_tem.jkszh,
... ... @@ -614,7 +595,7 @@ namespace NCC.Extend.LqXhHyhk
614 595 new LqXhKjbsyjEntity
615 596 {
616 597 Id = YitIdHelper.NextId().ToString(),
617   - Glkdbh = entity.Id,
  598 + Glkdbh = input.id,
618 599 Kjbls = ikjbs_tem.kjbls,
619 600 Kjblsxm = ikjbs_tem.kjblsxm,
620 601 Kjblszh = ikjbs_tem.kjblszh,
... ... @@ -629,22 +610,10 @@ namespace NCC.Extend.LqXhHyhk
629 610 }
630 611 }
631 612 }
632   -
633 613 // 批量插入品项明细
634 614 if (allPxmxEntities.Any())
635 615 {
636   - // 分别处理插入和更新
637   - var existingEntities = allPxmxEntities.Where(e => !string.IsNullOrEmpty(e.Id)).ToList();
638   - var newEntities = allPxmxEntities.Where(e => string.IsNullOrEmpty(e.Id)).ToList();
639   -
640   - if (existingEntities.Any())
641   - {
642   - await _db.Updateable(existingEntities).ExecuteCommandAsync();
643   - }
644   - if (newEntities.Any())
645   - {
646   - await _db.Insertable(newEntities).ExecuteCommandAsync();
647   - }
  616 + await _db.Insertable(allPxmxEntities).ExecuteCommandAsync();
648 617 }
649 618 // 批量插入健康师业绩
650 619 if (allJksyjEntities.Any())
... ... @@ -656,8 +625,7 @@ namespace NCC.Extend.LqXhHyhk
656 625 {
657 626 await _db.Insertable(allKjbsyjEntities).ExecuteCommandAsync();
658 627 }
659   -
660   - //关闭事务
  628 + // 提交事务
661 629 _db.CommitTran();
662 630 }
663 631 catch (Exception)
... ... @@ -707,5 +675,198 @@ namespace NCC.Extend.LqXhHyhk
707 675 }
708 676 }
709 677 #endregion
  678 +
  679 + #region 查询健康师消耗业绩列表
  680 + /// <summary>
  681 + /// 查询健康师业绩列表
  682 + /// </summary>
  683 + /// <param name="input">查询参数</param>
  684 + /// <returns>分页的健康师业绩列表</returns>
  685 + /// <remarks>
  686 + /// 查询健康师业绩记录,支持分页和时间筛选
  687 + ///
  688 + /// 示例请求:
  689 + /// ```json
  690 + /// {
  691 + /// "glkdbh": "123456789",
  692 + /// "jksId": "健康师ID",
  693 + /// "startTime": "2025-01-01T00:00:00",
  694 + /// "endTime": "2025-01-31T23:59:59",
  695 + /// "currentPage": 1,
  696 + /// "pageSize": 10,
  697 + /// "sidx": "yjsj",
  698 + /// "sort": "desc"
  699 + /// }
  700 + /// ```
  701 + ///
  702 + /// 参数说明:
  703 + /// - glkdbh: 开单记录ID(可选)
  704 + /// - jksId: 健康师ID(可选)
  705 + /// - startTime: 查询开始时间(可选)
  706 + /// - endTime: 查询结束时间(可选)
  707 + /// - currentPage: 当前页码
  708 + /// - pageSize: 每页大小
  709 + /// </remarks>
  710 + /// <response code="200">成功获取健康师业绩列表</response>
  711 + /// <response code="400">请求参数错误</response>
  712 + /// <response code="500">服务器内部错误</response>
  713 + [HttpGet("GetJksyjList")]
  714 + public async Task<dynamic> GetJksyjList([FromQuery] LqXhJksyjQueryInput input)
  715 + {
  716 + try
  717 + {
  718 + var sidx = string.IsNullOrEmpty(input.sidx) ? "yjsj" : input.sidx;
  719 + var sort = string.IsNullOrEmpty(input.sort) ? "desc" : input.sort;
  720 + var data = await _db.Queryable<LqXhJksyjEntity>()
  721 + .WhereIF(!string.IsNullOrEmpty(input.Glkdbh), w => w.Glkdbh == input.Glkdbh)
  722 + .WhereIF(!string.IsNullOrEmpty(input.JksId), w => w.Jks == input.JksId)
  723 + .WhereIF(input.StartTime.HasValue, w => w.Yjsj >= input.StartTime.Value)
  724 + .WhereIF(input.EndTime.HasValue, w => w.Yjsj <= input.EndTime.Value)
  725 + .Where(w => w.IsEffective == StatusEnum.有效.GetHashCode())
  726 + .Select(it => new LqXhJksyjInfoOutput
  727 + {
  728 + id = it.Id,
  729 + glkdbh = it.Glkdbh,
  730 + jks = it.Jks,
  731 + jksxm = it.Jksxm,
  732 + jkszh = it.Jkszh,
  733 + jksyj = it.Jksyj.ToString(),
  734 + yjsj = it.Yjsj,
  735 + jsjId = it.JsjId,
  736 + kdpxid = it.Kdpxid,
  737 + laborCost = it.LaborCost,
  738 + kdpxNumber = it.KdpxNumber,
  739 + storeName = SqlFunc.Subqueryable<LqXhHyhkEntity>().Where(w => w.Id == it.Glkdbh).Select(w => w.Mdmc),
  740 + memberId = SqlFunc.Subqueryable<LqXhHyhkEntity>().Where(w => w.Id == it.Glkdbh).Select(w => w.Hy),
  741 + memberName = SqlFunc.Subqueryable<LqXhHyhkEntity>().Where(w => w.Id == it.Glkdbh).Select(w => w.Hymc),
  742 + })
  743 + .MergeTable()
  744 + .OrderBy(sidx + " " + sort)
  745 + .ToPagedListAsync(input.currentPage, input.pageSize);
  746 +
  747 + return PageResult<LqXhJksyjInfoOutput>.SqlSugarPageResult(data);
  748 + }
  749 + catch (Exception ex)
  750 + {
  751 + throw NCCException.Oh($"获取健康师业绩列表失败: {ex.Message}");
  752 + }
  753 + }
  754 + #endregion
  755 +
  756 + #region 耗卡记录作废
  757 + /// <summary>
  758 + /// 耗卡记录作废
  759 + /// </summary>
  760 + /// <param name="id">耗卡记录ID</param>
  761 + /// <returns></returns>
  762 + [HttpPut("CancelCardUsageRecord/{id}")]
  763 + public async Task<dynamic> CancelCardUsageRecord(string id)
  764 + {
  765 + try
  766 + {
  767 + //开启事务
  768 + _db.BeginTran();
  769 + //查询消耗记录表信息
  770 + var LqhyhkInfo = await _db.Queryable<LqXhHyhkEntity>().Where(p => p.Id == id && p.IsEffective == StatusEnum.有效.GetHashCode()).FirstAsync();
  771 + if (LqhyhkInfo == null)
  772 + {
  773 + throw NCCException.Oh(ErrorCode.COM1005, "耗卡记录不存在或已作废");
  774 + }
  775 + //更新耗卡记录状态
  776 + LqhyhkInfo.IsEffective = StatusEnum.无效.GetHashCode();
  777 + await _db.Updateable(LqhyhkInfo).ExecuteCommandAsync();
  778 + //更新品项明细表状态
  779 + await _db.Updateable<LqXhPxmxEntity>().SetColumns(it => new LqXhPxmxEntity { IsEffective = StatusEnum.无效.GetHashCode() }).Where(w => w.ConsumeInfoId == id).ExecuteCommandAsync();
  780 + //更新健康师业绩表状态
  781 + await _db.Updateable<LqXhJksyjEntity>().SetColumns(it => new LqXhJksyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).Where(w => w.Glkdbh == id).ExecuteCommandAsync();
  782 + //更新科技部老师业绩表状态
  783 + await _db.Updateable<LqXhKjbsyjEntity>().SetColumns(it => new LqXhKjbsyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).Where(w => w.Glkdbh == id).ExecuteCommandAsync();
  784 + //关闭事务
  785 + _db.CommitTran();
  786 + return LqhyhkInfo;
  787 + }
  788 + catch (Exception)
  789 + {
  790 + //回滚事务
  791 + _db.RollbackTran();
  792 + throw NCCException.Oh(ErrorCode.COM1001);
  793 + }
  794 + }
  795 + #endregion
  796 +
  797 + #region 获取某个会员的耗卡记录
  798 + /// <summary>
  799 + /// 获取某个会员的耗卡记录(分页)
  800 + /// </summary>
  801 + /// <param name="input">查询参数</param>
  802 + /// <returns></returns>
  803 + [HttpGet("GetMemberCardUsageRecord")]
  804 + public async Task<dynamic> GetMemberCardUsageRecord([FromQuery] LqXhHyhkMemberCardUsageQueryInput input)
  805 + {
  806 + try
  807 + {
  808 + // 参数验证
  809 + if (string.IsNullOrEmpty(input.MemberId))
  810 + {
  811 + throw NCCException.Oh("会员ID不能为空");
  812 + }
  813 + // 分页查询会员耗卡记录
  814 + var data = await _db.Queryable<LqXhHyhkEntity>()
  815 + .Where(p => p.Hy == input.MemberId && p.IsEffective == StatusEnum.有效.GetHashCode())
  816 + .WhereIF(!string.IsNullOrEmpty(input.StoreId), p => p.Md == input.StoreId)
  817 + .WhereIF(input.StartTime.HasValue, p => p.Hksj >= input.StartTime.Value)
  818 + .WhereIF(input.EndTime.HasValue, p => p.Hksj <= input.EndTime.Value)
  819 + .Select(it => new LqXhHyhkMemberCardUsageOutput
  820 + {
  821 + Id = it.Id,
  822 + MemberId = it.Hy,
  823 + MemberName = it.Hymc,
  824 + StoreId = it.Md,
  825 + StoreName = it.Mdmc,
  826 + UsageDate = it.Hksj,
  827 + TotalAmount = it.Xfje,
  828 + Remarks = it.SignatureFile,
  829 + CreateTime = it.CreateTime
  830 + })
  831 + .MergeTable()
  832 + .OrderBy((input.sidx == null ? "UsageDate" : input.sidx) + " " + (input.sort ?? "desc"))
  833 + .ToPagedListAsync(input.currentPage, input.pageSize);
  834 +
  835 + // 获取当前页耗卡记录ID,直接查询对应的品项明细
  836 + if (data.list.Any())
  837 + {
  838 + var recordIds = data.list.Select(r => r.Id).ToList();
  839 + // 批量查询当前页记录的所有品项明细
  840 + var itemDetails = await _db.Queryable<LqXhPxmxEntity>().Where(w => recordIds.Contains(w.ConsumeInfoId) && w.IsEffective == StatusEnum.有效.GetHashCode()).ToListAsync();
  841 + // 按耗卡记录ID分组明细
  842 + var detailsGrouped = itemDetails.GroupBy(d => d.ConsumeInfoId).ToDictionary(g => g.Key, g => g.ToList());
  843 + // 为每个记录添加品项明细
  844 + foreach (var record in data.list)
  845 + {
  846 + if (detailsGrouped.ContainsKey(record.Id))
  847 + {
  848 + record.ItemDetails = detailsGrouped[record.Id].Select(detail => new LqXhHyhkMemberCardUsageItemDetail
  849 + {
  850 + Id = detail.Id,
  851 + ItemId = detail.Px,
  852 + ItemName = detail.Pxmc,
  853 + UnitPrice = detail.Pxjg,
  854 + ProjectNumber = detail.ProjectNumber,
  855 + TotalPrice = detail.TotalPrice,
  856 + SourceType = detail.SourceType,
  857 + CreateTime = detail.CreateTIme
  858 + }).ToList();
  859 + }
  860 + }
  861 + }
  862 + return PageResult<LqXhHyhkMemberCardUsageOutput>.SqlSugarPageResult(data);
  863 + }
  864 + catch (Exception ex)
  865 + {
  866 + throw NCCException.Oh($"获取会员耗卡记录失败: {ex.Message}");
  867 + }
  868 + }
  869 + #endregion
  870 +
710 871 }
711 872 }
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqXhmxbService.cs deleted
1   -using System;
2   -using System.Collections.Generic;
3   -using System.Linq;
4   -using System.Threading.Tasks;
5   -using Mapster;
6   -using Microsoft.AspNetCore.Mvc;
7   -using NCC.ClayObject;
8   -using NCC.Common.Configuration;
9   -using NCC.Common.Core.Manager;
10   -using NCC.Common.Enum;
11   -using NCC.Common.Extension;
12   -using NCC.Common.Filter;
13   -using NCC.Common.Helper;
14   -using NCC.Common.Model.NPOI;
15   -using NCC.DataEncryption;
16   -using NCC.Dependency;
17   -using NCC.DynamicApiController;
18   -using NCC.Extend.Entitys.Dto.LqXhmxb;
19   -using NCC.Extend.Entitys.lq_xhmxb;
20   -using NCC.Extend.Interfaces.LqXhmxb;
21   -using NCC.FriendlyException;
22   -using NCC.JsonSerialization;
23   -using SqlSugar;
24   -using Yitter.IdGenerator;
25   -
26   -namespace NCC.Extend.LqXhmxb
27   -{
28   - /// <summary>
29   - /// 消耗明细表服务
30   - /// </summary>
31   - [ApiDescriptionSettings(Tag = "Extend", Name = "LqXhmxb", Order = 200)]
32   - [Route("api/Extend/[controller]")]
33   - public class LqXhmxbService : ILqXhmxbService, IDynamicApiController, ITransient
34   - {
35   - private readonly ISqlSugarRepository<LqXhmxbEntity> _lqXhmxbRepository;
36   - private readonly SqlSugarScope _db;
37   - private readonly IUserManager _userManager;
38   -
39   - /// <summary>
40   - /// 初始化一个<see cref="LqXhmxbService"/>类型的新实例
41   - /// </summary>
42   - public LqXhmxbService(ISqlSugarRepository<LqXhmxbEntity> lqXhmxbRepository, IUserManager userManager)
43   - {
44   - _lqXhmxbRepository = lqXhmxbRepository;
45   - _db = _lqXhmxbRepository.Context;
46   - _userManager = userManager;
47   - }
48   -
49   - /// <summary>
50   - /// 获取消耗明细表
51   - /// </summary>
52   - /// <param name="id">参数</param>
53   - /// <returns></returns>
54   - [HttpGet("{id}")]
55   - public async Task<dynamic> GetInfo(string id)
56   - {
57   - var entity = await _db.Queryable<LqXhmxbEntity>().FirstAsync(p => p.Id == id);
58   - var output = entity.Adapt<LqXhmxbInfoOutput>();
59   - return output;
60   - }
61   -
62   - /// <summary>
63   - /// 获取消耗明细表列表
64   - /// </summary>
65   - /// <param name="input">请求参数</param>
66   - /// <returns></returns>
67   - [HttpGet("")]
68   - public async Task<dynamic> GetList([FromQuery] LqXhmxbListQueryInput input)
69   - {
70   - var sidx = input.sidx == null ? "id" : input.sidx;
71   - var data = await _db.Queryable<LqXhmxbEntity>()
72   - .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
73   - .WhereIF(!string.IsNullOrEmpty(input.mdbh), p => p.Mdbh.Contains(input.mdbh))
74   - .WhereIF(!string.IsNullOrEmpty(input.mdmc), p => p.Mdmc.Contains(input.mdmc))
75   - .WhereIF(!string.IsNullOrEmpty(input.bmbh), p => p.Bmbh.Contains(input.bmbh))
76   - .WhereIF(!string.IsNullOrEmpty(input.bmmc), p => p.Bmmc.Contains(input.bmmc))
77   - .WhereIF(!string.IsNullOrEmpty(input.ygbh), p => p.Ygbh.Contains(input.ygbh))
78   - .WhereIF(!string.IsNullOrEmpty(input.ygmc), p => p.Ygmc.Contains(input.ygmc))
79   - .WhereIF(!string.IsNullOrEmpty(input.xms), p => p.Xms.Contains(input.xms))
80   - .WhereIF(!string.IsNullOrEmpty(input.xh), p => p.Xh.Contains(input.xh))
81   - .WhereIF(!string.IsNullOrEmpty(input.sg), p => p.Sg.Contains(input.sg))
82   - .WhereIF(!string.IsNullOrEmpty(input.qtsg1), p => p.Qtsg1.Contains(input.qtsg1))
83   - .WhereIF(!string.IsNullOrEmpty(input.qtsg2), p => p.Qtsg2.Contains(input.qtsg2))
84   - .WhereIF(!string.IsNullOrEmpty(input.qtsg3), p => p.Qtsg3.Contains(input.qtsg3))
85   - .WhereIF(!string.IsNullOrEmpty(input.sghj), p => p.Sghj.Contains(input.sghj))
86   - .Select(it => new LqXhmxbListOutput
87   - {
88   - id = it.Id,
89   - mdbh = it.Mdbh,
90   - mdmc = it.Mdmc,
91   - bmbh = it.Bmbh,
92   - bmmc = it.Bmmc,
93   - ygbh = it.Ygbh,
94   - ygmc = it.Ygmc,
95   - xms = it.Xms,
96   - xh = it.Xh,
97   - sg = it.Sg,
98   - qtsg1 = it.Qtsg1,
99   - qtsg2 = it.Qtsg2,
100   - qtsg3 = it.Qtsg3,
101   - sghj = it.Sghj,
102   - })
103   - .MergeTable()
104   - .OrderBy(sidx + " " + input.sort)
105   - .ToPagedListAsync(input.currentPage, input.pageSize);
106   - return PageResult<LqXhmxbListOutput>.SqlSugarPageResult(data);
107   - }
108   -
109   - /// <summary>
110   - /// 新建消耗明细表
111   - /// </summary>
112   - /// <param name="input">参数</param>
113   - /// <returns></returns>
114   - [HttpPost("")]
115   - public async Task Create([FromBody] LqXhmxbCrInput input)
116   - {
117   - var userInfo = await _userManager.GetUserInfo();
118   - var entity = input.Adapt<LqXhmxbEntity>();
119   - entity.Id = YitIdHelper.NextId().ToString();
120   - var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
121   - if (!(isOk > 0))
122   - throw NCCException.Oh(ErrorCode.COM1000);
123   - }
124   -
125   - /// <summary>
126   - /// 获取消耗明细表无分页列表
127   - /// </summary>
128   - /// <param name="input">请求参数</param>
129   - /// <returns></returns>
130   - [NonAction]
131   - public async Task<dynamic> GetNoPagingList([FromQuery] LqXhmxbListQueryInput input)
132   - {
133   - var sidx = input.sidx == null ? "id" : input.sidx;
134   - var data = await _db.Queryable<LqXhmxbEntity>()
135   - .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
136   - .WhereIF(!string.IsNullOrEmpty(input.mdbh), p => p.Mdbh.Contains(input.mdbh))
137   - .WhereIF(!string.IsNullOrEmpty(input.mdmc), p => p.Mdmc.Contains(input.mdmc))
138   - .WhereIF(!string.IsNullOrEmpty(input.bmbh), p => p.Bmbh.Contains(input.bmbh))
139   - .WhereIF(!string.IsNullOrEmpty(input.bmmc), p => p.Bmmc.Contains(input.bmmc))
140   - .WhereIF(!string.IsNullOrEmpty(input.ygbh), p => p.Ygbh.Contains(input.ygbh))
141   - .WhereIF(!string.IsNullOrEmpty(input.ygmc), p => p.Ygmc.Contains(input.ygmc))
142   - .WhereIF(!string.IsNullOrEmpty(input.xms), p => p.Xms.Contains(input.xms))
143   - .WhereIF(!string.IsNullOrEmpty(input.xh), p => p.Xh.Contains(input.xh))
144   - .WhereIF(!string.IsNullOrEmpty(input.sg), p => p.Sg.Contains(input.sg))
145   - .WhereIF(!string.IsNullOrEmpty(input.qtsg1), p => p.Qtsg1.Contains(input.qtsg1))
146   - .WhereIF(!string.IsNullOrEmpty(input.qtsg2), p => p.Qtsg2.Contains(input.qtsg2))
147   - .WhereIF(!string.IsNullOrEmpty(input.qtsg3), p => p.Qtsg3.Contains(input.qtsg3))
148   - .WhereIF(!string.IsNullOrEmpty(input.sghj), p => p.Sghj.Contains(input.sghj))
149   - .Select(it => new LqXhmxbListOutput
150   - {
151   - id = it.Id,
152   - mdbh = it.Mdbh,
153   - mdmc = it.Mdmc,
154   - bmbh = it.Bmbh,
155   - bmmc = it.Bmmc,
156   - ygbh = it.Ygbh,
157   - ygmc = it.Ygmc,
158   - xms = it.Xms,
159   - xh = it.Xh,
160   - sg = it.Sg,
161   - qtsg1 = it.Qtsg1,
162   - qtsg2 = it.Qtsg2,
163   - qtsg3 = it.Qtsg3,
164   - sghj = it.Sghj,
165   - })
166   - .MergeTable()
167   - .OrderBy(sidx + " " + input.sort)
168   - .ToListAsync();
169   - return data;
170   - }
171   -
172   - /// <summary>
173   - /// 导出消耗明细表
174   - /// </summary>
175   - /// <param name="input">请求参数</param>
176   - /// <returns></returns>
177   - [HttpGet("Actions/Export")]
178   - public async Task<dynamic> Export([FromQuery] LqXhmxbListQueryInput input)
179   - {
180   - var userInfo = await _userManager.GetUserInfo();
181   - var exportData = new List<LqXhmxbListOutput>();
182   - if (input.dataType == 0)
183   - {
184   - var data = Clay.Object(await this.GetList(input));
185   - exportData = data.Solidify<PageResult<LqXhmxbListOutput>>().list;
186   - }
187   - else
188   - {
189   - exportData = await this.GetNoPagingList(input);
190   - }
191   - List<ParamsModel> paramList =
192   - "[{\"value\":\"消耗编号\",\"field\":\"id\"},{\"value\":\"门店编号\",\"field\":\"mdbh\"},{\"value\":\"门店名称\",\"field\":\"mdmc\"},{\"value\":\"部门编号\",\"field\":\"bmbh\"},{\"value\":\"部门名称\",\"field\":\"bmmc\"},{\"value\":\"员工编号\",\"field\":\"ygbh\"},{\"value\":\"员工名称\",\"field\":\"ygmc\"},{\"value\":\"项目数\",\"field\":\"xms\"},{\"value\":\"消耗\",\"field\":\"xh\"},{\"value\":\"手工\",\"field\":\"sg\"},{\"value\":\"其它手工1\",\"field\":\"qtsg1\"},{\"value\":\"其它手工2\",\"field\":\"qtsg2\"},{\"value\":\"其它手工3\",\"field\":\"qtsg3\"},{\"value\":\"手工合计\",\"field\":\"sghj\"},]".ToList<ParamsModel>();
193   - ExcelConfig excelconfig = new ExcelConfig();
194   - excelconfig.FileName = "消耗明细表.xls";
195   - excelconfig.HeadFont = "微软雅黑";
196   - excelconfig.HeadPoint = 10;
197   - excelconfig.IsAllSizeColumn = true;
198   - excelconfig.ColumnModel = new List<ExcelColumnModel>();
199   - List<string> selectKeyList = input.selectKey.Split(',').ToList();
200   - foreach (var item in selectKeyList)
201   - {
202   - var isExist = paramList.Find(p => p.field == item);
203   - if (isExist != null)
204   - {
205   - excelconfig.ColumnModel.Add(new ExcelColumnModel() { Column = isExist.field, ExcelColumn = isExist.value });
206   - }
207   - }
208   - var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName;
209   - ExcelExportHelper<LqXhmxbListOutput>.Export(exportData, excelconfig, addPath);
210   - var fileName = _userManager.UserId + "|" + addPath + "|xls";
211   - var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") };
212   - return output;
213   - }
214   -
215   - /// <summary>
216   - /// 批量删除消耗明细表
217   - /// </summary>
218   - /// <param name="ids">主键数组</param>
219   - /// <returns></returns>
220   - [HttpPost("batchRemove")]
221   - public async Task BatchRemove([FromBody] List<string> ids)
222   - {
223   - var entitys = await _db.Queryable<LqXhmxbEntity>().In(it => it.Id, ids).ToListAsync();
224   - if (entitys.Count > 0)
225   - {
226   - try
227   - {
228   - //开启事务
229   - _db.BeginTran();
230   - //批量删除消耗明细表
231   - await _db.Deleteable<LqXhmxbEntity>().In(d => d.Id, ids).ExecuteCommandAsync();
232   - //关闭事务
233   - _db.CommitTran();
234   - }
235   - catch (Exception)
236   - {
237   - //回滚事务
238   - _db.RollbackTran();
239   - throw NCCException.Oh(ErrorCode.COM1002);
240   - }
241   - }
242   - }
243   -
244   - /// <summary>
245   - /// 更新消耗明细表
246   - /// </summary>
247   - /// <param name="id">主键</param>
248   - /// <param name="input">参数</param>
249   - /// <returns></returns>
250   - [HttpPut("{id}")]
251   - public async Task Update(string id, [FromBody] LqXhmxbUpInput input)
252   - {
253   - var entity = input.Adapt<LqXhmxbEntity>();
254   - var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
255   - if (!(isOk > 0))
256   - throw NCCException.Oh(ErrorCode.COM1001);
257   - }
258   -
259   - /// <summary>
260   - /// 删除消耗明细表
261   - /// </summary>
262   - /// <returns></returns>
263   - [HttpDelete("{id}")]
264   - public async Task Delete(string id)
265   - {
266   - var entity = await _db.Queryable<LqXhmxbEntity>().FirstAsync(p => p.Id == id);
267   - _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005);
268   - var isOk = await _db.Deleteable<LqXhmxbEntity>().Where(d => d.Id == id).ExecuteCommandAsync();
269   - if (!(isOk > 0))
270   - throw NCCException.Oh(ErrorCode.COM1002);
271   - }
272   - }
273   -}
netcore/src/Modularity/Extend/NCC.Extend/LqYxhdfaService.cs deleted
1   -using System;
2   -using System.Collections.Generic;
3   -using System.Linq;
4   -using System.Threading.Tasks;
5   -using Mapster;
6   -using Microsoft.AspNetCore.Mvc;
7   -using NCC.ClayObject;
8   -using NCC.Common.Configuration;
9   -using NCC.Common.Core.Manager;
10   -using NCC.Common.Enum;
11   -using NCC.Common.Extension;
12   -using NCC.Common.Filter;
13   -using NCC.Common.Helper;
14   -using NCC.Common.Model.NPOI;
15   -using NCC.DataEncryption;
16   -using NCC.Dependency;
17   -using NCC.DynamicApiController;
18   -using NCC.Extend.Entitys.Dto.LqYxhdfa;
19   -using NCC.Extend.Entitys.lq_yxhdfa;
20   -using NCC.Extend.Interfaces.LqYxhdfa;
21   -using NCC.FriendlyException;
22   -using NCC.JsonSerialization;
23   -using SqlSugar;
24   -using Yitter.IdGenerator;
25   -
26   -namespace NCC.Extend.LqYxhdfa
27   -{
28   - /// <summary>
29   - /// 营销活动方案服务
30   - /// </summary>
31   - [ApiDescriptionSettings(Tag = "Extend", Name = "LqYxhdfa", Order = 200)]
32   - [Route("api/Extend/[controller]")]
33   - public class LqYxhdfaService : ILqYxhdfaService, IDynamicApiController, ITransient
34   - {
35   - private readonly ISqlSugarRepository<LqYxhdfaEntity> _lqYxhdfaRepository;
36   - private readonly SqlSugarScope _db;
37   - private readonly IUserManager _userManager;
38   -
39   - /// <summary>
40   - /// 初始化一个<see cref="LqYxhdfaService"/>类型的新实例
41   - /// </summary>
42   - public LqYxhdfaService(ISqlSugarRepository<LqYxhdfaEntity> lqYxhdfaRepository, IUserManager userManager)
43   - {
44   - _lqYxhdfaRepository = lqYxhdfaRepository;
45   - _db = _lqYxhdfaRepository.Context;
46   - _userManager = userManager;
47   - }
48   -
49   - /// <summary>
50   - /// 获取营销活动方案
51   - /// </summary>
52   - /// <param name="id">参数</param>
53   - /// <returns></returns>
54   - [HttpGet("{id}")]
55   - public async Task<dynamic> GetInfo(string id)
56   - {
57   - var entity = await _db.Queryable<LqYxhdfaEntity>().FirstAsync(p => p.Id == id);
58   - var output = entity.Adapt<LqYxhdfaInfoOutput>();
59   - return output;
60   - }
61   -
62   - /// <summary>
63   - /// 获取营销活动方案列表
64   - /// </summary>
65   - /// <param name="input">请求参数</param>
66   - /// <returns></returns>
67   - [HttpGet("")]
68   - public async Task<dynamic> GetList([FromQuery] LqYxhdfaListQueryInput input)
69   - {
70   - var sidx = input.sidx == null ? "id" : input.sidx;
71   - var data = await _db.Queryable<LqYxhdfaEntity>()
72   - .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
73   - .WhereIF(!string.IsNullOrEmpty(input.yxhdbh), p => p.Yxhdbh.Contains(input.yxhdbh))
74   - .WhereIF(!string.IsNullOrEmpty(input.hdmc), p => p.Hdmc.Contains(input.hdmc))
75   - .WhereIF(!string.IsNullOrEmpty(input.zsj), p => p.Zsj.Contains(input.zsj))
76   - .WhereIF(!string.IsNullOrEmpty(input.jej), p => p.Jej.Contains(input.jej))
77   - .Select(it => new LqYxhdfaListOutput
78   - {
79   - id = it.Id,
80   - yxhdbh = it.Yxhdbh,
81   - hdmc = it.Hdmc,
82   - zsj = it.Zsj,
83   - jej = it.Jej,
84   - })
85   - .MergeTable()
86   - .OrderBy(sidx + " " + input.sort)
87   - .ToPagedListAsync(input.currentPage, input.pageSize);
88   - return PageResult<LqYxhdfaListOutput>.SqlSugarPageResult(data);
89   - }
90   -
91   - /// <summary>
92   - /// 新建营销活动方案
93   - /// </summary>
94   - /// <param name="input">参数</param>
95   - /// <returns></returns>
96   - [HttpPost("")]
97   - public async Task Create([FromBody] LqYxhdfaCrInput input)
98   - {
99   - var userInfo = await _userManager.GetUserInfo();
100   - var entity = input.Adapt<LqYxhdfaEntity>();
101   - entity.Id = YitIdHelper.NextId().ToString();
102   - var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
103   - if (!(isOk > 0))
104   - throw NCCException.Oh(ErrorCode.COM1000);
105   - }
106   -
107   - /// <summary>
108   - /// 获取营销活动方案无分页列表
109   - /// </summary>
110   - /// <param name="input">请求参数</param>
111   - /// <returns></returns>
112   - [NonAction]
113   - public async Task<dynamic> GetNoPagingList([FromQuery] LqYxhdfaListQueryInput input)
114   - {
115   - var sidx = input.sidx == null ? "id" : input.sidx;
116   - var data = await _db.Queryable<LqYxhdfaEntity>()
117   - .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
118   - .WhereIF(!string.IsNullOrEmpty(input.yxhdbh), p => p.Yxhdbh.Contains(input.yxhdbh))
119   - .WhereIF(!string.IsNullOrEmpty(input.hdmc), p => p.Hdmc.Contains(input.hdmc))
120   - .WhereIF(!string.IsNullOrEmpty(input.zsj), p => p.Zsj.Contains(input.zsj))
121   - .WhereIF(!string.IsNullOrEmpty(input.jej), p => p.Jej.Contains(input.jej))
122   - .Select(it => new LqYxhdfaListOutput
123   - {
124   - id = it.Id,
125   - yxhdbh = it.Yxhdbh,
126   - hdmc = it.Hdmc,
127   - zsj = it.Zsj,
128   - jej = it.Jej,
129   - })
130   - .MergeTable()
131   - .OrderBy(sidx + " " + input.sort)
132   - .ToListAsync();
133   - return data;
134   - }
135   -
136   - /// <summary>
137   - /// 导出营销活动方案
138   - /// </summary>
139   - /// <param name="input">请求参数</param>
140   - /// <returns></returns>
141   - [HttpGet("Actions/Export")]
142   - public async Task<dynamic> Export([FromQuery] LqYxhdfaListQueryInput input)
143   - {
144   - var userInfo = await _userManager.GetUserInfo();
145   - var exportData = new List<LqYxhdfaListOutput>();
146   - if (input.dataType == 0)
147   - {
148   - var data = Clay.Object(await this.GetList(input));
149   - exportData = data.Solidify<PageResult<LqYxhdfaListOutput>>().list;
150   - }
151   - else
152   - {
153   - exportData = await this.GetNoPagingList(input);
154   - }
155   - List<ParamsModel> paramList =
156   - "[{\"value\":\"方案编号\",\"field\":\"id\"},{\"value\":\"营销活动编号\",\"field\":\"yxhdbh\"},{\"value\":\"活动名称\",\"field\":\"hdmc\"},{\"value\":\"张数奖\",\"field\":\"zsj\"},{\"value\":\"金额奖\",\"field\":\"jej\"},]".ToList<ParamsModel>();
157   - ExcelConfig excelconfig = new ExcelConfig();
158   - excelconfig.FileName = "营销活动方案.xls";
159   - excelconfig.HeadFont = "微软雅黑";
160   - excelconfig.HeadPoint = 10;
161   - excelconfig.IsAllSizeColumn = true;
162   - excelconfig.ColumnModel = new List<ExcelColumnModel>();
163   - List<string> selectKeyList = input.selectKey.Split(',').ToList();
164   - foreach (var item in selectKeyList)
165   - {
166   - var isExist = paramList.Find(p => p.field == item);
167   - if (isExist != null)
168   - {
169   - excelconfig.ColumnModel.Add(new ExcelColumnModel() { Column = isExist.field, ExcelColumn = isExist.value });
170   - }
171   - }
172   - var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName;
173   - ExcelExportHelper<LqYxhdfaListOutput>.Export(exportData, excelconfig, addPath);
174   - var fileName = _userManager.UserId + "|" + addPath + "|xls";
175   - var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") };
176   - return output;
177   - }
178   -
179   - /// <summary>
180   - /// 批量删除营销活动方案
181   - /// </summary>
182   - /// <param name="ids">主键数组</param>
183   - /// <returns></returns>
184   - [HttpPost("batchRemove")]
185   - public async Task BatchRemove([FromBody] List<string> ids)
186   - {
187   - var entitys = await _db.Queryable<LqYxhdfaEntity>().In(it => it.Id, ids).ToListAsync();
188   - if (entitys.Count > 0)
189   - {
190   - try
191   - {
192   - //开启事务
193   - _db.BeginTran();
194   - //批量删除营销活动方案
195   - await _db.Deleteable<LqYxhdfaEntity>().In(d => d.Id, ids).ExecuteCommandAsync();
196   - //关闭事务
197   - _db.CommitTran();
198   - }
199   - catch (Exception)
200   - {
201   - //回滚事务
202   - _db.RollbackTran();
203   - throw NCCException.Oh(ErrorCode.COM1002);
204   - }
205   - }
206   - }
207   -
208   - /// <summary>
209   - /// 更新营销活动方案
210   - /// </summary>
211   - /// <param name="id">主键</param>
212   - /// <param name="input">参数</param>
213   - /// <returns></returns>
214   - [HttpPut("{id}")]
215   - public async Task Update(string id, [FromBody] LqYxhdfaUpInput input)
216   - {
217   - var entity = input.Adapt<LqYxhdfaEntity>();
218   - var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
219   - if (!(isOk > 0))
220   - throw NCCException.Oh(ErrorCode.COM1001);
221   - }
222   -
223   - /// <summary>
224   - /// 删除营销活动方案
225   - /// </summary>
226   - /// <returns></returns>
227   - [HttpDelete("{id}")]
228   - public async Task Delete(string id)
229   - {
230   - var entity = await _db.Queryable<LqYxhdfaEntity>().FirstAsync(p => p.Id == id);
231   - _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005);
232   - var isOk = await _db.Deleteable<LqYxhdfaEntity>().Where(d => d.Id == id).ExecuteCommandAsync();
233   - if (!(isOk > 0))
234   - throw NCCException.Oh(ErrorCode.COM1002);
235   - }
236   - }
237   -}
netcore/src/Modularity/Extend/NCC.Extend/Utils/LqKdKdjlbStringGenerator.cs
... ... @@ -46,8 +46,9 @@ namespace NCC.Extend.Utils
46 46 var customerName = GetCustomerName(entity.kdhy);
47 47 sb.AppendLine($"⏩顾客姓名:{customerName}");
48 48 // 健康师:王维
49   - var healthTeachers = HealthInstructorNames.TrimEnd(',');
50   - sb.AppendLine($"⏩健康师:{healthTeachers}");
  49 + //这里需要把HealthInstructorNames去重,HealthInstructorNames格式为张三、李四、张三、
  50 + var healthTeachers = HealthInstructorNames.Split(',', StringSplitOptions.RemoveEmptyEntries).Distinct().ToArray();
  51 + sb.AppendLine($"⏩健康师:{string.Join("、", healthTeachers)}");
51 52  
52 53 // 活动方案:532工程
53 54 sb.AppendLine($"⏩活动方案:{entity.pxxx ?? "无"}");
... ...