|
@@ -0,0 +1,385 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace app\admin\controller;
|
|
|
+
|
|
|
+//发货工单(从属于发货单)
|
|
|
+use app\admin\model\GoodStockInfo;
|
|
|
+use think\Exception;
|
|
|
+use think\facade\Db;
|
|
|
+use think\facade\Validate;
|
|
|
+
|
|
|
+class OrderOutChild extends Base
|
|
|
+{
|
|
|
+
|
|
|
+ //分单时可用仓库列表
|
|
|
+ public function getWsmList(){
|
|
|
+ $outCode = $this->request->post('outCode','','trim');
|
|
|
+
|
|
|
+ if($outCode=='') return json_show(1004,'发货单号不能为空');
|
|
|
+
|
|
|
+ $out=Db::name('order_out')
|
|
|
+ ->alias('a')
|
|
|
+ ->field('a.id,a.outCode,a.send_status,b.good_code')
|
|
|
+ ->leftJoin('sale b','b.orderCode=a.orderCode')
|
|
|
+ ->where(['a.is_del'=>0,'a.outCode'=>$outCode])
|
|
|
+ ->findOrEmpty();
|
|
|
+ if(empty($out)) return json_show(1004,'该发货单不存在');
|
|
|
+ if($out['send_status'] != 0) return json_show(1004,'该发货单状态错误');
|
|
|
+
|
|
|
+ $list = Db::name("good_stock")
|
|
|
+ ->alias("a")
|
|
|
+ ->leftJoin("warehouse_info b","a.wsm_code=b.wsm_code")
|
|
|
+ ->field("a.id,a.wsm_code,b.name wsm_name,b.companyNo,b.companyName,b.supplierNo,b.supplierName,b.contactor_name,a.usable_stock")
|
|
|
+ ->where(["spuCode"=>$out['good_code'],"a.is_del"=>0])
|
|
|
+ ->order(['id'=>'asc'])
|
|
|
+ ->select()
|
|
|
+ ->toArray();
|
|
|
+
|
|
|
+ return json_show(0,'获取列表成功',$list);
|
|
|
+ }
|
|
|
+
|
|
|
+ //发货工单列表
|
|
|
+ public function list()
|
|
|
+ {
|
|
|
+ $param = $this->request->only([
|
|
|
+ 'page' => 1,
|
|
|
+ 'size' => 10,
|
|
|
+ 'start' => '',
|
|
|
+ 'end' => '',
|
|
|
+ 'orderCode' => '',
|
|
|
+ 'customer_code' => '',
|
|
|
+ 'status' => '',
|
|
|
+ 'outChildCode' => '',
|
|
|
+ 'companyNo' => '',
|
|
|
+ 'spuCode' => '',
|
|
|
+ 'outCode' => '',
|
|
|
+ 'order_source' => '',
|
|
|
+ 'wsm_code' => '',
|
|
|
+ 'supplierNo' => '',
|
|
|
+ 'skuCode' => '',
|
|
|
+ 'apply_id' => '',
|
|
|
+ 'apply_name' => '',
|
|
|
+ 'order_type' => '',
|
|
|
+ ], 'post', 'trim');
|
|
|
+
|
|
|
+ $where = [['a.is_del', '=', 0]];
|
|
|
+ if ($param['start'] != '') $where[] = ['a.addtime', '>=', $param['start']];
|
|
|
+ if ($param['end'] != '') $where[] = ['a.addtime', '<', $param['end'] . ' 23:59:59'];
|
|
|
+ if ($param['orderCode'] != '') $where[] = ['a.orderCode', 'like', '%' . $param['orderCode'] . '%'];
|
|
|
+ if ($param['customer_code'] != '') $where[] = ['a.customer_code', 'like', '%' . $param['customer_code'] . '%'];
|
|
|
+ if ($param['status'] !== '') $where[] = ['a.status', '=', $param['status']];
|
|
|
+ if ($param['outChildCode'] != '') $where[] = ['a.outChildCode', 'like', '%' . $param['outChildCode'] . '%'];
|
|
|
+ if ($param['companyNo'] != '') $where[] = ['a.companyNo', 'like', '%' . $param['companyNo'] . '%'];
|
|
|
+ if ($param['spuCode'] != '') $where[] = ['a.spuCode', 'like', '%' . $param['spuCode'] . '%'];
|
|
|
+ if ($param['outCode'] != '') $where[] = ['a.outCode', 'like', '%' . $param['outCode'] . '%'];
|
|
|
+ if ($param['order_source'] != '') $where[] = ['a.order_source', '=', $param['order_source']];
|
|
|
+ if ($param['wsm_code'] != '') $where[] = ['a.wsm_code', 'like', '%' . $param['wsm_code'] . '%'];
|
|
|
+ if ($param['supplierNo'] != '') $where[] = ['a.supplierNo', 'like', '%' . $param['supplierNo'] . '%'];
|
|
|
+ if ($param['skuCode'] != '') $where[] = ['a.skuCode', 'like', '%' . $param['skuCode'] . '%'];
|
|
|
+ if ($param['apply_id'] !== '') $where[] = ['a.apply_id', '=', $param['apply_id']];
|
|
|
+ if ($param['apply_name'] != '') $where[] = ['a.apply_name', 'like', '%' . $param['apply_name'] . '%'];
|
|
|
+ if ($param['order_type'] != '') $where[] = ['a.order_type', '=', $param['order_type']];
|
|
|
+
|
|
|
+ $count = Db::name('order_out_child')
|
|
|
+ ->alias('a')
|
|
|
+ ->where($where)
|
|
|
+ ->count('a.id');
|
|
|
+
|
|
|
+ $list = Db::name('order_out_child')
|
|
|
+ ->alias('a')
|
|
|
+ ->order(['a.addtime' => 'desc', 'a.id' => 'desc'])
|
|
|
+ ->page($param['page'], $param['size'])
|
|
|
+ ->where($where)
|
|
|
+ ->select()
|
|
|
+ ->toArray();
|
|
|
+
|
|
|
+ $all_apply_id = array_column($list, 'apply_id');
|
|
|
+ $company_name = get_company_name_by_uid($all_apply_id);
|
|
|
+
|
|
|
+ $data = [];
|
|
|
+ foreach ($list as $value) {
|
|
|
+
|
|
|
+ $value['company_name'] = $company_name[$value['apply_id']] ?? '';
|
|
|
+
|
|
|
+ $data[] = $value;
|
|
|
+ }
|
|
|
+
|
|
|
+ return json_show(0, '获取成功', ['count' => $count, 'list' => $data]);
|
|
|
+ }
|
|
|
+
|
|
|
+ //导出
|
|
|
+ public function export()
|
|
|
+ {
|
|
|
+ $param = $this->request->only([
|
|
|
+ 'start' => '',
|
|
|
+ 'end' => '',
|
|
|
+ 'orderCode' => '',
|
|
|
+ 'customer_code' => '',
|
|
|
+ 'status' => '',
|
|
|
+ 'outChildCode' => '',
|
|
|
+ 'companyNo' => '',
|
|
|
+ 'spuCode' => '',
|
|
|
+ 'outCode' => '',
|
|
|
+ 'order_source' => '',
|
|
|
+ 'wsm_code' => '',
|
|
|
+ 'supplierNo' => '',
|
|
|
+ 'skuCode' => '',
|
|
|
+ 'apply_id' => '',
|
|
|
+ 'apply_name' => '',
|
|
|
+ 'order_type' => '',
|
|
|
+ ], 'post', 'trim');
|
|
|
+
|
|
|
+ $where = [['a.id', '=', 0]];
|
|
|
+ if ($param['start'] != '') $where[] = ['a.addtime', '>=', $param['start']];
|
|
|
+ if ($param['end'] != '') $where[] = ['a.addtime', '<', $param['end'] . ' 23:59:59'];
|
|
|
+ if ($param['orderCode'] != '') $where[] = ['a.orderCode', 'like', '%' . $param['orderCode'] . '%'];
|
|
|
+ if ($param['customer_code'] != '') $where[] = ['a.customer_code', 'like', '%' . $param['customer_code'] . '%'];
|
|
|
+ if ($param['status'] !== '') $where[] = ['a.status', '=', $param['status']];
|
|
|
+ if ($param['outChildCode'] != '') $where[] = ['a.outChildCode', 'like', '%' . $param['outChildCode'] . '%'];
|
|
|
+ if ($param['companyNo'] != '') $where[] = ['a.companyNo', 'like', '%' . $param['companyNo'] . '%'];
|
|
|
+ if ($param['spuCode'] != '') $where[] = ['a.spuCode', 'like', '%' . $param['spuCode'] . '%'];
|
|
|
+ if ($param['outCode'] != '') $where[] = ['a.outCode', 'like', '%' . $param['outCode'] . '%'];
|
|
|
+ if ($param['order_source'] != '') $where[] = ['a.order_source', '=', $param['order_source']];
|
|
|
+ if ($param['wsm_code'] != '') $where[] = ['a.wsm_code', 'like', '%' . $param['wsm_code'] . '%'];
|
|
|
+ if ($param['supplierNo'] != '') $where[] = ['a.supplierNo', 'like', '%' . $param['supplierNo'] . '%'];
|
|
|
+ if ($param['skuCode'] != '') $where[] = ['a.skuCode', 'like', '%' . $param['skuCode'] . '%'];
|
|
|
+ if ($param['apply_id'] !== '') $where[] = ['a.apply_id', '=', $param['apply_id']];
|
|
|
+ if ($param['apply_name'] != '') $where[] = ['a.apply_name', 'like', '%' . $param['apply_name'] . '%'];
|
|
|
+ if ($param['order_type'] != '') $where[] = ['a.order_type', '=', $param['order_type']];
|
|
|
+
|
|
|
+ $list = Db::name('order_out_child')
|
|
|
+ ->alias('a')
|
|
|
+ ->field('a.outChildCode 发货工单号,a.orderCode 确认单编号,a.outCode 发货申请单号,a.companyNo 业务公司编号,a.companyName 业务公司名称,a.customer_code 客户编号,a.customer_name 客户名称,a.supplierNo 供应商编号,a.supplierName 供应商名称,a.spuCode 商品成本编号,a.skuCode 商品上线编号,a.good_name 商品名称,case a.order_source when 1 then "直接下单" when 2 then "咨询" when 3 then "项目" when 4 then "平台" when 5 then "有赞" when 6 then "售后补换货" when 7 then "报备转单" when 8 then "支付渠道" end "订单来源",case order_type when 1 then "备库" when 2 then "非库存" when 3 then "咨询商品" when 4 then "报备商品" end "商品类型",a.num 数量,case a.status when 1 then "待发货" when 2 then "发货完成" when 3 then "已收货" when 4 then "已全部退货" end "分单状态",a.addtime 下单时间,a.apply_id,a.apply_name 申请人名称')
|
|
|
+ ->order(['a.addtime' => 'desc', 'a.id' => 'desc'])
|
|
|
+ ->select()
|
|
|
+ ->toArray();
|
|
|
+
|
|
|
+// $all_apply_id = array_column($list, 'apply_id');
|
|
|
+// $company_name = get_company_name_by_uid($all_apply_id);
|
|
|
+
|
|
|
+// $data = [];
|
|
|
+// foreach ($list as &$value) {
|
|
|
+//
|
|
|
+// $value['company_name'] = $company_name[$value['apply_id']] ?? '';
|
|
|
+// unset($value['apply_id']);
|
|
|
+//
|
|
|
+
|
|
|
+// }
|
|
|
+
|
|
|
+ if (empty($list)) $list[] = ['没有相关可导出的数据'];
|
|
|
+ excelSave('发货工单' . date('YmdHis'), array_keys($list[0]), $list);
|
|
|
+// return json_show(0, '获取成功', $data);
|
|
|
+ }
|
|
|
+
|
|
|
+ //分单
|
|
|
+ public function add()
|
|
|
+ {
|
|
|
+ $param = $this->request->only(['outCode', 'list'], 'post', 'trim');
|
|
|
+
|
|
|
+ $val = Validate::rule([
|
|
|
+ 'outCode|发货单号' => 'require',
|
|
|
+ 'list' => 'require|array|max:100',
|
|
|
+ ]);
|
|
|
+
|
|
|
+
|
|
|
+// $list=[
|
|
|
+// ['wsm_code'=>'','num'=>100],
|
|
|
+// ['wsm_code'=>'','num'=>100],
|
|
|
+// ];
|
|
|
+
|
|
|
+ if ($val->check($param) == false) return json_show(1004, $val->getError());
|
|
|
+
|
|
|
+ $val_child = Validate::rule([
|
|
|
+ 'wsm_code|仓库编码' => 'require',
|
|
|
+ 'num|发货数量' => 'require|number|gt:0|elt:999999999999',
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $info = Db::name('order_out')
|
|
|
+ ->alias('a')
|
|
|
+ ->field('a.*,b.supplierNo companyNo,b.supplierName companyName,b.customer_code,b.customerName,b.supNo supplierNo,b.supName supplierName,b.good_code,b.skuCode,b.good_name,b.order_source,b.good_num,b.wsend_num')
|
|
|
+ ->leftJoin('sale b', 'b.orderCode=a.orderCode AND b.is_del=0')
|
|
|
+ ->where(['a.is_del' => 0, 'a.outCode' => $param['outCode'], 'a.send_status' => 0])
|
|
|
+ ->findOrEmpty();
|
|
|
+
|
|
|
+ if (empty($info)) return json_show(1004, '该发货单不存在或状态有误');
|
|
|
+ if ($info['wsend_num'] < $info['send_num']) return json_show(1004,"订单待发货数量不足");
|
|
|
+ if ($info['wsend_num'] < array_sum($param['list'],'num')) return json_show(1004,"仓库总发货数与发货单待发货数不同");
|
|
|
+
|
|
|
+ //所有仓库信息
|
|
|
+ $wsm = Db::name('warehouse_info')
|
|
|
+ ->where(['is_del' => 0, 'wsm_code' => array_column($param['list'], 'wsm_code')])
|
|
|
+ ->column('id', 'wsm_code');
|
|
|
+
|
|
|
+ Db::startTrans();
|
|
|
+ try {
|
|
|
+
|
|
|
+ $date = date('Y-m-d H:i:s');
|
|
|
+
|
|
|
+ $insert = [];
|
|
|
+
|
|
|
+ $i = 0;
|
|
|
+ foreach ($param['list'] as $value) {
|
|
|
+
|
|
|
+ if ($val_child->check($value) == false) throw new Exception($val_child->getError());
|
|
|
+
|
|
|
+ //改变编码规则,将原编码后两位换成序列号
|
|
|
+ //str_pad字符串填充
|
|
|
+ $outChildCode = substr(makeNo('TCD'), 0, -2) . str_pad($i++, 2, '0', STR_PAD_LEFT);
|
|
|
+
|
|
|
+ $insert[] = [
|
|
|
+ 'outChildCode' => $outChildCode,
|
|
|
+ 'orderCode' => $info['orderCode'],
|
|
|
+ 'outCode' => $param['outCode'],
|
|
|
+ 'companyNo' => $info['companyNo'],
|
|
|
+ 'companyName' => $info['companyName'],
|
|
|
+ 'customer_code' => $info['customer_code'],
|
|
|
+ 'customer_name' => $info['customerName'],
|
|
|
+ 'supplierNo' => $info['supplierNo'],
|
|
|
+ 'supplierName' => $info['supplierName'],
|
|
|
+ 'spuCode' => $info['good_code'],
|
|
|
+ 'skuCode' => $info['skuCode'],
|
|
|
+ 'good_name' => $info['good_name'],
|
|
|
+ 'order_type' => $info['order_type'],
|
|
|
+ 'order_source' => $info['order_source'],
|
|
|
+ 'num' => $value['num'],
|
|
|
+ 'wsm_code' => $value['wsm_code'],
|
|
|
+ 'apply_id' => $info['apply_id'],
|
|
|
+ 'apply_name' => $info['apply_name'],
|
|
|
+ 'addrid' => $info['addrid'],
|
|
|
+ 'status' => 1,
|
|
|
+ 'is_del' => 0,
|
|
|
+ 'addtime' => $date,
|
|
|
+ 'updatetime' => $date,
|
|
|
+ ];
|
|
|
+
|
|
|
+ if (!isset($wsm[$value['wsm_code']])) throw new Exception($value['wsm_code'] . '该仓库不存在');
|
|
|
+
|
|
|
+ //维护bn号
|
|
|
+ GoodStockInfo::ChildAddBn($outChildCode, $wsm[$value['wsm_code']]);
|
|
|
+ }
|
|
|
+
|
|
|
+ Db::name('order_out_child')->insertAll($insert);
|
|
|
+
|
|
|
+ Db::name('order_out')
|
|
|
+ ->where(['id' => $info['id'], 'is_del' => 0, 'outCode' => $param['outCode'], 'send_status' => 0])
|
|
|
+ ->update(['send_status' => 1, 'status' => 1]);
|
|
|
+
|
|
|
+ Db::commit();
|
|
|
+ return json_show(0, '分单完成');
|
|
|
+ } catch (Exception $exception) {
|
|
|
+ Db::rollback();
|
|
|
+ return json_show(1004, '分单失败,' . $exception->getMessage() . '|' . $exception->getFile() . '|' . $exception->getLine());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //详情
|
|
|
+ public function info()
|
|
|
+ {
|
|
|
+
|
|
|
+ $outChildCode = $this->request->post('outChildCode','','trim');
|
|
|
+ if($outChildCode=='') return json_show(1004,'发货工单号不能为空');
|
|
|
+
|
|
|
+ $info = Db::name('order_out_child')
|
|
|
+ ->where(['is_del'=>0,'outChildCode'=>$outChildCode])
|
|
|
+ ->findOrEmpty();
|
|
|
+
|
|
|
+ return json_show(0,'获取详情成功',$info);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //发货
|
|
|
+ public function send()
|
|
|
+ {
|
|
|
+
|
|
|
+ $param = $this->request->post('list/a','','trim');
|
|
|
+
|
|
|
+ $temp=Db::name('order_out_child')
|
|
|
+ ->field('id,outChildCode')
|
|
|
+ ->where(['is_del'=>0,'outChildCode'=>array_column($param,'outChildCode')])
|
|
|
+ ->where('status','<>',1)
|
|
|
+ ->findOrEmpty();
|
|
|
+ if(!empty($temp)) return json_show(1004,$temp['outChildCode'].'状态错误,不能发货');
|
|
|
+
|
|
|
+ $child = Db::name('order_out_child')
|
|
|
+ ->where(['is_del' => 0, 'status' => 1, 'outChildCode' => array_column($param, 'outChildCode')])
|
|
|
+ ->column('id,orderCode,outCode,total_num,num', 'outChildCode');
|
|
|
+
|
|
|
+ $order_out = Db::name('order_out')
|
|
|
+ ->where(['is_del'=>0,'outCode'=>array_unique(array_column($child,'outCode'))])
|
|
|
+ ->column('id,send_num,send_status,0 already_send_num','outCode');
|
|
|
+
|
|
|
+ $sale = Db::name('sale')
|
|
|
+ ->where(['is_del'=>0,'orderCode'=>array_unique(array_column($child,'orderCode'))])
|
|
|
+ ->column('id,good_num,send_num,wsend_num','orderCode');
|
|
|
+
|
|
|
+ $val=Validate::rule([
|
|
|
+ 'outChildCode|发货工单号'=>'require|max:255',
|
|
|
+ 'post_name|物流公司'=>'require|max:255',
|
|
|
+ 'post_code|物流单号'=>'require|alphaDash|max:255',
|
|
|
+ 'post_fee|物流费用'=>'require|egt:0|max:99999999.99'
|
|
|
+ ]);
|
|
|
+
|
|
|
+ Db::startTrans();
|
|
|
+ try {
|
|
|
+
|
|
|
+ $date = date('Y-m-d H:i:s');
|
|
|
+
|
|
|
+ foreach ($param as $value){
|
|
|
+
|
|
|
+ if($val->check($value)==false) throw new Exception($val->getError());
|
|
|
+
|
|
|
+ //工单
|
|
|
+ if(!isset($child[$value['outChildCode']])) throw new Exception($value['outChildCode'].'工单不存在或状态不允许发货');
|
|
|
+
|
|
|
+ Db::name('order_out_child')
|
|
|
+ ->where(['id' => $child[$value['outChildCode']]['id'], 'is_del' => 0, 'status' => 1])
|
|
|
+ ->update([
|
|
|
+ 'post_name' => $value['post_name'],
|
|
|
+ 'post_code' => $value['post_code'],
|
|
|
+ 'post_fee' => $value['post_fee'],
|
|
|
+ 'status' => 2,
|
|
|
+ 'sendtime' => $date,
|
|
|
+ 'updatetime' => $date,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $order_out[$child[$value['outChildCode']]['outCode']]['already_send_num'] += $child[$value['outChildCode']]['num'];
|
|
|
+
|
|
|
+ //发货单
|
|
|
+ //send_status 2部分发货,3全部发货
|
|
|
+ Db::name('order_out')
|
|
|
+ ->where(['id'=>$order_out[$child[$value['outChildCode']]['outCode']]['id']])
|
|
|
+ ->update(['send_status'=>$order_out[$child[$value['outChildCode']]['outCode']]['already_send_num']>=$order_out[$child[$value['outChildCode']]['outCode']]['send_num']?3:2,'updatetime'=>$date]);
|
|
|
+
|
|
|
+ //销售单
|
|
|
+ Db::name('sale')
|
|
|
+ ->where(['is_del'=>0,'id'=>$sale[$child[$value['outChildCode']]['orderCode']]['id']])
|
|
|
+ ->update([
|
|
|
+ 'send_num'=>++$sale[$child[$value['outChildCode']]['orderCode']]['send_num'],
|
|
|
+ 'wsend_num'=>--$sale[$child[$value['outChildCode']]['orderCode']]['wsend_num'],
|
|
|
+ 'send_status'=>$sale[$child[$value['outChildCode']]['orderCode']]['send_num']>=$sale[$child[$value['outChildCode']]['orderCode']]['good_num']?3:2,
|
|
|
+ ]);
|
|
|
+
|
|
|
+ //库存
|
|
|
+ Db::name('good_stock')
|
|
|
+ ->where(['is_del'=>0,'spuCode'=>'','wsm_code'=>''])
|
|
|
+ ->dec('wait_out_stock',$child[$value['outChildCode']]['num'])
|
|
|
+ ->update(['updatetime'=>$date]);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ Db::commit();
|
|
|
+
|
|
|
+ return json_show(0,'操作完成');
|
|
|
+
|
|
|
+ }catch (Exception $exception){
|
|
|
+
|
|
|
+ Db::rollback();
|
|
|
+
|
|
|
+ return json_show(1004, $exception->getMessage() . '|' . $exception->getFile() . '|' . $exception->getLine());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|