|
@@ -1,13 +1,25 @@
|
|
|
'use strict';
|
|
|
const Schema = require('mongoose').Schema;
|
|
|
+const moment = require('moment');
|
|
|
const metaPlugin = require('naf-framework-mongoose/lib/model/meta-plugin');
|
|
|
+// 发货数据
|
|
|
+const sendList = new Schema({
|
|
|
+ split_id: { type: String, maxLength: 200 }, // 拆分的货物id
|
|
|
+ name: { type: String, maxLength: 200 }, // 货物名
|
|
|
+ number: { type: Number, maxLength: 200 }, // 数量
|
|
|
+ weight: { type: Number, maxLength: 200 }, // 重量
|
|
|
+ volume: { type: Number, maxLength: 200 }, // 体积
|
|
|
+ time: { type: String, maxLength: 200, default: moment().format('YYYY-MM-DD HH:mm:ss') }, // 收货时间
|
|
|
+ remark: { type: String, maxLength: 200 },
|
|
|
+});
|
|
|
// 签收数据
|
|
|
const arriveList = new Schema({
|
|
|
+ split_id: { type: String, maxLength: 200 }, // 拆分的货物id
|
|
|
name: { type: String, maxLength: 200 }, // 货物名
|
|
|
number: { type: Number, maxLength: 200 }, // 数量
|
|
|
weight: { type: Number, maxLength: 200 }, // 重量
|
|
|
volume: { type: Number, maxLength: 200 }, // 体积
|
|
|
- time: { type: String, maxLength: 200 }, // 收货时间
|
|
|
+ time: { type: String, maxLength: 200, default: moment().format('YYYY-MM-DD HH:mm:ss') }, // 收货时间
|
|
|
remark: { type: String, maxLength: 200 },
|
|
|
});
|
|
|
// 货物列表
|
|
@@ -16,6 +28,7 @@ const goods = new Schema({
|
|
|
number: { type: Number, maxLength: 200 }, // 数量
|
|
|
weight: { type: Number, maxLength: 200 }, // 重量
|
|
|
volume: { type: Number, maxLength: 200 }, // 体积
|
|
|
+ transport_type: { type: String, maxLength: 200, default: '直达' }, // 该货物的运输类型: 直达;转运
|
|
|
remark: { type: String, maxLength: 200 },
|
|
|
});
|
|
|
|
|
@@ -27,17 +40,49 @@ const splitGoods = new Schema({
|
|
|
number: { type: Number, maxLength: 200, default: 0 }, // 数量
|
|
|
weight: { type: Number, maxLength: 200 }, // 重量
|
|
|
volume: { type: Number, maxLength: 200 }, // 体积
|
|
|
- remark: { type: String, maxLength: 200 },
|
|
|
+ transport_type: { type: String, maxLength: 200, default: '0' }, // 该货物的运输类型: 0=>直达;1=>转运
|
|
|
+ remark: { type: String, maxLength: 200 }, // remark属于拆分过后的,只有原货物进行复制,拆分后的不需要复制,可以自己编辑
|
|
|
pid: { type: String, maxLength: 200, required: true }, // 来源id;type为0时,从goods中去找;1时,就都是这个文档的事了
|
|
|
- type: { type: String, maxLength: 200, default: '0' }, // 0=>原始数据;1=>拆分数据,
|
|
|
- status: { type: String, maxLength: 200, default: '0' }, // 0=>未装车; 1=>运输中; 2=>已到达
|
|
|
+ type: { type: String, maxLength: 200, default: '0' }, // 0=>货物列表原始数据;1=>拆分数据;
|
|
|
+ status: { type: String, maxLength: 200, default: '0' }, // -1=>已到达; 0=>未装车; 1=>运输中; 2=>转运地签收; 3=>转运中
|
|
|
+});
|
|
|
+
|
|
|
+// 订单记录
|
|
|
+const recordList = new Schema({
|
|
|
+ opera: { type: String, maxLength: 200 }, // 操作人
|
|
|
+ operaid: { type: String, maxLength: 200 }, // 操作人id
|
|
|
+ message: { type: String, maxLength: 200 }, // 操作
|
|
|
+ time: { type: String, default: moment().format('YYYY-MM-DD HH:mm:ss') }, // 操作时间
|
|
|
+});
|
|
|
+
|
|
|
+// 货物收入
|
|
|
+const goods_bill = new Schema({
|
|
|
+ name: { type: String, maxlength: 200 }, // 货物名称
|
|
|
+ // TODO 2种模式:合同+项目+线路+计费方式/计费方式
|
|
|
+ number: { type: Number, maxLength: 200 }, // 数量
|
|
|
+ weight: { type: Number, maxLength: 200 }, // 重量
|
|
|
+ volume: { type: Number, maxLength: 200 }, // 体积
|
|
|
+ taxes: { type: String, maxLength: 200 }, // 税率
|
|
|
+ sq_ys: { type: Number, maxLength: 200 }, // 税前应收
|
|
|
+ sq_ss: { type: Number, maxLength: 200 }, // 税前实收
|
|
|
+ sh_ys: { type: Number, maxLength: 200 }, // 税后应收
|
|
|
+ sh_ss: { type: Number, maxLength: 200 }, // 税后实收
|
|
|
+});
|
|
|
+
|
|
|
+// 收入/支出项
|
|
|
+const cost_bill = new Schema({
|
|
|
+ item: { type: String, maxlength: 200 }, // 支出项
|
|
|
+ taxes: { type: String, maxLength: 200 }, // 税率
|
|
|
+ sq_ys: { type: Number, maxLength: 200 }, // 税前应收
|
|
|
+ sq_ss: { type: Number, maxLength: 200 }, // 税前实收
|
|
|
+ sh_ys: { type: Number, maxLength: 200 }, // 税后应收
|
|
|
+ sh_ss: { type: Number, maxLength: 200 }, // 税后实收
|
|
|
});
|
|
|
|
|
|
// 订单
|
|
|
const order = {
|
|
|
order_no: {
|
|
|
type: String,
|
|
|
- required: true,
|
|
|
maxLength: 200,
|
|
|
field: { label: '订单号', filter: true },
|
|
|
},
|
|
@@ -47,6 +92,11 @@ const order = {
|
|
|
maxLength: 200,
|
|
|
field: { label: '订单创建人' },
|
|
|
},
|
|
|
+ principal: {
|
|
|
+ type: String,
|
|
|
+ maxLength: 200,
|
|
|
+ field: { label: '当前订单负责人' },
|
|
|
+ },
|
|
|
client: {
|
|
|
type: String,
|
|
|
required: true,
|
|
@@ -55,39 +105,33 @@ const order = {
|
|
|
},
|
|
|
rq_send_time: {
|
|
|
type: String,
|
|
|
- required: true,
|
|
|
maxLength: 200,
|
|
|
field: { label: '要求发货日期' },
|
|
|
},
|
|
|
send_time: {
|
|
|
- type: String,
|
|
|
- required: true,
|
|
|
+ type: [ sendList ],
|
|
|
maxLength: 200,
|
|
|
field: { label: '发货日期' },
|
|
|
},
|
|
|
rq_arrive_time: {
|
|
|
type: String,
|
|
|
- required: true,
|
|
|
maxLength: 200,
|
|
|
field: { label: '要求到达日期' },
|
|
|
},
|
|
|
// 到达日期有问题:应该有多种货物不同到达日期 或 某种货物被拆分,不同的到达日期
|
|
|
// 但是这并不影响要求 到达日期
|
|
|
- arrive: {
|
|
|
+ arrive_time: {
|
|
|
type: [ arriveList ],
|
|
|
- required: true,
|
|
|
maxLength: 200,
|
|
|
field: { label: '到达日期' },
|
|
|
},
|
|
|
pre_money: {
|
|
|
type: String,
|
|
|
- required: true,
|
|
|
maxLength: 200,
|
|
|
- field: { label: '预售金额', type: 'number' },
|
|
|
+ field: { label: '预收金额', type: 'number' },
|
|
|
},
|
|
|
goods: {
|
|
|
type: [ goods ],
|
|
|
- required: true,
|
|
|
maxLength: 200,
|
|
|
field: {
|
|
|
label: '货物',
|
|
@@ -96,7 +140,6 @@ const order = {
|
|
|
},
|
|
|
split: {
|
|
|
type: [ splitGoods ],
|
|
|
- required: true,
|
|
|
maxLength: 200,
|
|
|
field: {
|
|
|
label: '货物拆分列表',
|
|
@@ -104,47 +147,33 @@ const order = {
|
|
|
},
|
|
|
},
|
|
|
goods_bill: {
|
|
|
- type: Array,
|
|
|
- required: true,
|
|
|
+ type: [ goods_bill ],
|
|
|
maxLength: 200,
|
|
|
field: { label: '货物收入单据' },
|
|
|
},
|
|
|
in_bill: {
|
|
|
- type: Array,
|
|
|
- required: true,
|
|
|
+ type: [ cost_bill ],
|
|
|
maxLength: 200,
|
|
|
field: { label: '收入-服务单据' },
|
|
|
},
|
|
|
out_bill: {
|
|
|
- type: Array,
|
|
|
- required: true,
|
|
|
+ type: [ cost_bill ],
|
|
|
maxLength: 200,
|
|
|
field: { label: '支出-服务单据' },
|
|
|
},
|
|
|
- transport_bill: {
|
|
|
- type: Array,
|
|
|
- required: true,
|
|
|
- maxLength: 200,
|
|
|
- field: {
|
|
|
- label: '运输支出单据',
|
|
|
- remark: `主要问题在这,这里的运输单据要映射到运输表中;且可以修改;有可能有多条数据,比如此单是往返单,货物可能一开始没有填全,只填了去的货物,而途中,此单可能变成单程单,之后可能空车回来或者参与其他单.
|
|
|
- 还可能此单原来是单程单,之后需要在这单上加些货物回来,就变成往返单,或可以运输结束的单子
|
|
|
- 还有可能是:此单需要多段运输,每段运输都需要记录
|
|
|
- `,
|
|
|
- },
|
|
|
- },
|
|
|
+ // 运输单与订单的关系: 订单的拆分货物id会在运输单的货物列表中
|
|
|
is_js: {
|
|
|
- type: String,
|
|
|
+ type: Boolean,
|
|
|
maxLength: 200,
|
|
|
- default: '0',
|
|
|
+ default: false,
|
|
|
field: {
|
|
|
label: '结算状态',
|
|
|
filter: 'select',
|
|
|
type: 'radio',
|
|
|
- format: (i => (i === '0' ? '未结算' : '已结算')).toString(),
|
|
|
+ format: (i => (i ? '已结算' : '未结算')).toString(),
|
|
|
list: [
|
|
|
- { label: '未结算', value: '0' },
|
|
|
- { label: '已结算', value: '1' },
|
|
|
+ { label: '未结算', value: false },
|
|
|
+ { label: '已结算', value: true },
|
|
|
],
|
|
|
},
|
|
|
},
|
|
@@ -155,15 +184,15 @@ const order = {
|
|
|
field: {
|
|
|
label: '货物状态',
|
|
|
filter: 'select',
|
|
|
- type: 'radio',
|
|
|
+ type: 'text',
|
|
|
remark: `查看拆分列表中
|
|
|
1)所有的货物状态都为0 => 未发车
|
|
|
- 2)至少1个0,其余全为1,没有2=> 部分货物未发车 ; 部分运输中
|
|
|
- 3)至少1个0,至少1个1,至少1个2=> 部分货物未发车 ; 部分运输中 ; 部分货物已到达
|
|
|
- 4)至少1个0,没有1,其余全为2=> 部分货物未发车 ; 部分货物已到达
|
|
|
- 5)没有0,全为1,没有2 => 所有货物运输中
|
|
|
- 4)没有0,至少1个1,其余全为2 => 所有货物运输中 ; 部分货物已到达
|
|
|
- 6)没有0,没有1,全为2 => 所有货物已到达
|
|
|
+ 2)至少1个0,其余全为1||全为2||全为3,没有-1=> 部分货物未发车 ; 部分运输中
|
|
|
+ 3)至少1个0,至少1个1||至少1个2||至少1个3,至少1个-1=> 部分货物未发车 ; 部分运输中 ; 部分货物已到达
|
|
|
+ 4)至少1个0,没有1&&没有2&&没有3,其余全为-1=> 部分货物未发车 ; 部分货物已到达
|
|
|
+ 5)没有0,全为1||全为2||全为3,没有-1 => 所有货物运输中
|
|
|
+ 4)没有0,至少1个1||至少1个2||至少1个3,其余全为-1 => 所有货物运输中 ; 部分货物已到达
|
|
|
+ 6)没有0,没有1&&没有2&&没有3,全为-1 => 所有货物已到达
|
|
|
`,
|
|
|
},
|
|
|
},
|
|
@@ -172,7 +201,7 @@ const order = {
|
|
|
maxLength: 200,
|
|
|
default: '0',
|
|
|
field: {
|
|
|
- label: '状态',
|
|
|
+ label: '数据状态',
|
|
|
filter: 'select',
|
|
|
type: 'radio',
|
|
|
format: (i => (i === '0' ? '正常' : '冻结')).toString(),
|
|
@@ -185,7 +214,6 @@ const order = {
|
|
|
}, // 状态:0=>使用;1禁用
|
|
|
remark: {
|
|
|
type: String,
|
|
|
- required: false,
|
|
|
maxLength: 200,
|
|
|
field: {
|
|
|
label: '备注',
|
|
@@ -193,6 +221,10 @@ const order = {
|
|
|
options: { autosize: { minRows: 3, maxRows: 5 } },
|
|
|
},
|
|
|
},
|
|
|
+ record: {
|
|
|
+ type: [ recordList ],
|
|
|
+ field: { label: '订单记录' },
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
const schema = new Schema(order, { toJSON: { virtuals: true } });
|