Filing.php 55 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205
  1. <?php
  2. namespace app\admin\controller;
  3. use think\Exception;
  4. use think\facade\Db;
  5. use think\facade\Validate;
  6. //报备单
  7. class Filing extends Base
  8. {
  9. //列表
  10. public function getList()
  11. {
  12. $data = $this->request->only(['page' => 1, 'size' => 10, 'cat_id' => '', 'start_date' => '', 'end_date' => '', 'filingCode' => '', 'status' => '', 'good_name' => '', 'companyName' => '', 'companyCode' => '', 'orderCode' => '', 'supplierNo' => ''], 'post');
  13. $where = [['is_del', '=', '0']];
  14. if ($data['cat_id'] != '') $where[] = ['cat_id', '=', $data['cat_id']];
  15. if ($data['start_date'] != '' && $data['end_date'] != '') $where[] = ['addtime', 'between', [$data['start_date'] . ' 00:00:00', $data['end_date'] . ' 23:59:59']];
  16. if ($data['filingCode'] != '') $where[] = ['filingCode', 'like', '%' . $data['filingCode'] . '%'];
  17. if ($data['status'] != '') $where[] = ['status', '=', $data['status']];
  18. if ($data['good_name'] != '') $where[] = ['good_name', 'like', '%' . $data['good_name'] . '%'];
  19. if ($data['companyName'] != '') $where[] = ['companyName', 'like', '%' . $data['companyName'] . '%'];
  20. if ($data['companyCode'] != '') $where[] = ['companyCode', 'like', '%' . $data['companyCode'] . '%'];
  21. if ($data['orderCode'] != '') $where[] = ['orderCode', 'like', '%' . $data['orderCode'] . '%'];
  22. if ($data['supplierNo'] != '') $where[] = ['supplierNo', '=', $data['supplierNo']];
  23. $count = Db::name('filing')
  24. ->where($where)
  25. ->count('id');
  26. $list = Db::name('filing')
  27. ->field('id,filingCode,cat_id,good_name,num,wait_num,transfer_num,good_img,price,expect_service,companyName,companyCode,status,addtime,"" catinfo,orderCode,cgd_charge')
  28. ->where($where)
  29. ->page($data['page'], $data['size'])
  30. ->order('id', 'desc')
  31. ->withAttr('good_img', function ($val) {
  32. return explode(',', $val);
  33. })
  34. ->select()
  35. ->toArray();
  36. $all_cat = [];
  37. foreach ($list as &$value) {
  38. if (!isset($all_cat[$value['cat_id']])) $all_cat[$value['cat_id']] = implode('/', array_column(made($value['cat_id']), 'name'));
  39. $value['catinfo'] = $all_cat[$value['cat_id']];
  40. }
  41. return json_show(0, '获取报备单列表成功', ['count' => $count, 'list' => $list]);
  42. }
  43. //添加
  44. public function add()
  45. {
  46. $param = $this->request->filter(["trim",'strip_tags'])->only([
  47. 'customerCode',
  48. 'supplierNo',
  49. 'companyName',
  50. 'num',
  51. 'is_determine_price',
  52. 'price' => 0,
  53. 'expect_service_proportion',
  54. 'expect_service',
  55. 'cgd_charge' => 0,
  56. 'brand_id',
  57. 'fill_url',
  58. 'preservation_day',
  59. 'delivery_day',
  60. 'make_day',
  61. 'tax',
  62. 'unit_id',
  63. 'cat_id',
  64. 'spec_list' => [],
  65. 'good_name',
  66. 'origin_place',
  67. 'delivery_place',
  68. 'weight',
  69. 'supply_area',
  70. 'pay_way',
  71. 'gold_weight',
  72. 'noble_metal',
  73. 'config',
  74. 'other_config',
  75. 'remark',
  76. 'cost_desc',
  77. 'good_img'], 'post');
  78. $val = Validate::rule([
  79. 'customerCode|业务公司' => 'require|max:255',
  80. 'supplierNo|供应商' => 'require|max:255',
  81. 'companyName|客户名称' => 'require|max:255',
  82. 'num|销售数量' => 'require|number|gt:0|lt:999999999',
  83. 'is_determine_price|是否确定售价' => 'require|number|in:1,0',
  84. 'price|销售价' => 'requireIf:is_determine_price,1|float|max:99999999.99',
  85. 'expect_service_proportion|期望服务费比例' => 'require|float|between:0,100',
  86. 'expect_service|期望服务费' => 'require|float|max:99999999.99',
  87. 'cgd_charge|采购价' => 'requireIf:is_determine_price,0|float|max:99999999.99',
  88. 'brand_id|品牌' => 'require|number|gt:0',
  89. 'fill_url|报备附件' => 'require',
  90. 'preservation_day|有效期' => 'require|number|max:999999999',
  91. 'delivery_day|物流时间' => 'require|number|max:999999999',
  92. 'make_day|生产工期' => 'require|number|max:999999999',
  93. 'tax|税点' => 'require|number|between:0,100',
  94. 'unit_id|单位' => 'require|number|gt:0',
  95. 'cat_id|分类' => 'require|number|gt:0',
  96. 'spec_list|规格类型' => 'array|max:100',
  97. 'good_name|商品名称' => 'require|max:255',
  98. 'origin_place|产地' => 'require|array|length:3',
  99. 'delivery_place|发货地' => 'require|array|length:3',
  100. 'weight|总重量' => 'require|float|max:99999999.99',
  101. 'supply_area|供货区域' => 'require|number|in:1,2',
  102. 'pay_way|付款方式' => 'require|number|in:0,1,2',
  103. 'remark|采购备注' => 'require|max:255',
  104. 'cost_desc|工艺说明' => 'max:255',
  105. 'good_img|商品图片' => 'require|array|max:10',
  106. ]);
  107. if (!$val->check($param)) return json_show(1004, $val->getError());
  108. //如果是贵金属的话,额外判断
  109. $cat = made($param['cat_id']);
  110. if (isset($cat[0]['id']) && $cat[0]['id'] == 6) {
  111. $val_gold = Validate::rule([
  112. 'gold_weight|贵金属重量' => 'require|float|max:99999999.99',
  113. 'noble_metal|贵金属类型' => 'require|number|in:1,2,3',
  114. 'config|配置要求' => 'require|max:255',
  115. 'other_config|其他配置要求' => 'require|max:255',
  116. ]);
  117. if (!$val_gold->check($param)) return json_show(1004, $val_gold->getError());
  118. }
  119. $val2 = Validate::rule([
  120. 'spec_id|规格id' => 'require|number|gt:0',
  121. 'spec_value_id|规格值id' => 'require|number|gt:0',
  122. ]);
  123. $all_spec = Db::name('specs')
  124. ->whereIn('id', array_column($param['spec_list'], 'spec_id'))
  125. ->column('spec_name', 'id');
  126. $all_spec_value = Db::name('spec_value')
  127. ->whereIn('id', array_column($param['spec_list'], 'spec_value_id'))
  128. ->column('spec_value', 'id');
  129. foreach ($param['spec_list'] as &$spec_list) {
  130. if (!$val2->check($spec_list)) return json_show(1004, $val2->getError());
  131. $spec_list['spec_name'] = $all_spec[$spec_list['spec_id']] ?? '';
  132. $spec_list['spec_value_name'] = $all_spec_value[$spec_list['spec_value_id']] ?? '';
  133. }
  134. if ($param['is_determine_price'] == 1) $param['cgd_charge'] = round(bcsub($param['price'], $param['expect_service'], 3), 2);//确定售价时,采购价=售价-服务费
  135. else $param['price'] = round(bcadd($param['cgd_charge'], $param['expect_service'], 3), 2);//不确定售价时,售价=采购价+服务费
  136. $userCommon = \app\admin\common\User::getIns();
  137. $names = $userCommon->handle('getCodeAndName', ['code' => [$param['customerCode'], $param['supplierNo']]]);
  138. if (!isset($names['data'][$param['customerCode']]) || $names['data'][$param['customerCode']] == '') return json_show(1004, '该业务公司不存在');
  139. if (!isset($names['data'][$param['supplierNo']]) || $names['data'][$param['supplierNo']] == '') return json_show(1004, '该供应商不存在');
  140. $rs = Db::name('filing')
  141. ->strict(false)
  142. ->insert(array_merge($param, [
  143. 'customerName' => $names['data'][$param['customerCode']],
  144. 'supplierName' => $names['data'][$param['supplierNo']],
  145. 'filingCode' => makeNo('BM'),
  146. 'service_proportion' => $param['expect_service_proportion'],//服务费比例与期望服务费比例一致
  147. 'service_charge' => $param['expect_service'],//服务费与期望服务费一致
  148. 'specinfo' => json_encode($param['spec_list']),
  149. "wait_num"=>$param["num"],
  150. 'send_way' => 2,
  151. 'cert_fee' => 0,
  152. 'pakge_fee' => 0,
  153. 'cost_fee' => 0,
  154. 'mark_fee' => 0,
  155. 'demo_fee' => 0,
  156. 'open_fee' => 0,
  157. 'fill_url' =>$param['fill_url'],
  158. 'delivery_fee' => 0,
  159. 'is_gold_price' => 0,
  160. 'is_diff' => 0,
  161. 'apply_id' => $this->uid,
  162. 'apply_name' => $this->uname,
  163. 'status' => 0,
  164. 'is_del' => 0,
  165. 'addtime' => date('Y-m-d H:i:s'),
  166. 'updaterid' => $this->uid,
  167. 'updater' => $this->uname,
  168. 'updatetime' => date('Y-m-d H:i:s'),
  169. 'gold_weight' => $param['gold_weight'] ?? 0,
  170. 'noble_metal' => $param['noble_metal'] ?? 0,
  171. 'config' => $param['config'] ?? '',
  172. 'other_config' => $param['other_config'] ?? '',
  173. 'good_img' => implode(',', $param['good_img']),
  174. 'origin_place' => implode(',', $param['origin_place']),
  175. 'delivery_place' => implode(',', $param['delivery_place']),
  176. ]));
  177. return $rs ? json_show(0, '创建报备单成功') : json_show(1004, '创建报备单失败');
  178. }
  179. //添加
  180. public function save()
  181. {
  182. $param = $this->request->filter(['trim','strip_tags'])->only(["id",
  183. 'customerCode',
  184. 'supplierNo',
  185. 'companyName',
  186. 'num',
  187. 'is_determine_price',
  188. 'price' => 0,
  189. 'expect_service_proportion',
  190. 'expect_service',
  191. 'cgd_charge' => 0,
  192. 'brand_id',
  193. 'preservation_day',
  194. 'delivery_day',
  195. 'make_day',
  196. 'tax',
  197. 'fill_url' ,
  198. 'unit_id',
  199. 'cat_id',
  200. 'spec_list' => [],
  201. 'good_name',
  202. 'origin_place',
  203. 'delivery_place',
  204. 'weight',
  205. 'supply_area',
  206. 'pay_way',
  207. 'gold_weight',
  208. 'noble_metal',
  209. 'config',
  210. 'other_config',
  211. 'remark',
  212. 'cost_desc',
  213. 'good_img'], 'post');
  214. $val = Validate::rule([
  215. 'id|报备单主键id' => 'require',
  216. 'customerCode|业务公司' => 'require|max:255',
  217. 'supplierNo|供应商' => 'require|max:255',
  218. 'companyName|客户名称' => 'require|max:255',
  219. 'num|销售数量' => 'require|number|gt:0|lt:999999999',
  220. 'is_determine_price|是否确定售价' => 'require|number|in:1,0',
  221. 'price|销售价' => 'requireIf:is_determine_price,1|float|max:99999999.99',
  222. 'expect_service_proportion|期望服务费比例' => 'require|float|between:0,100',
  223. 'expect_service|期望服务费' => 'require|float|max:99999999.99',
  224. 'cgd_charge|采购价' => 'requireIf:is_determine_price,0|float|max:99999999.99',
  225. 'brand_id|品牌' => 'require|number|gt:0',
  226. 'preservation_day|有效期' => 'require|number|max:999999999',
  227. 'delivery_day|物流时间' => 'require|number|max:999999999',
  228. 'make_day|生产工期' => 'require|number|max:999999999',
  229. 'fill_url|报备附件' =>"require",
  230. 'tax|税点' => 'require|number|between:0,100',
  231. 'unit_id|单位' => 'require|number|gt:0',
  232. 'cat_id|分类' => 'require|number|gt:0',
  233. 'spec_list|规格类型' => 'array|max:100',
  234. 'good_name|商品名称' => 'require|max:255',
  235. 'origin_place|产地' => 'require|array|length:3',
  236. 'delivery_place|发货地' => 'require|array|length:3',
  237. 'weight|总重量' => 'require|float|max:99999999.99',
  238. 'supply_area|供货区域' => 'require|number|in:1,2',
  239. 'pay_way|付款方式' => 'require|number|in:0,1,2',
  240. 'remark|采购备注' => 'require|max:255',
  241. 'cost_desc|工艺说明' => 'max:255',
  242. 'good_img|商品图片' => 'require|array|max:10',
  243. ]);
  244. if (!$val->check($param)) return json_show(1004, $val->getError());
  245. $row= Db::name("filing")->findOrEmpty($param["id"]);
  246. if(empty($row)) return json_show(1004, "未找到数据");
  247. //如果是贵金属的话,额外判断
  248. $cat = made($param['cat_id']);
  249. if (isset($cat[0]['id']) && $cat[0]['id'] == 6) {
  250. $val_gold = Validate::rule([
  251. 'gold_weight|贵金属重量' => 'require|float|max:99999999.99',
  252. 'noble_metal|贵金属类型' => 'require|number|in:1,2,3',
  253. 'config|配置要求' => 'require|max:255',
  254. 'other_config|其他配置要求' => 'require|max:255',
  255. ]);
  256. if (!$val_gold->check($param)) return json_show(1004, $val_gold->getError());
  257. }
  258. $val2 = Validate::rule([
  259. 'spec_id|规格id' => 'require|number|gt:0',
  260. 'spec_value_id|规格值id' => 'require|number|gt:0',
  261. ]);
  262. $all_spec = Db::name('specs')
  263. ->whereIn('id', array_column($param['spec_list'], 'spec_id'))
  264. ->column('spec_name', 'id');
  265. $all_spec_value = Db::name('spec_value')
  266. ->whereIn('id', array_column($param['spec_list'], 'spec_value_id'))
  267. ->column('spec_value', 'id');
  268. foreach ($param['spec_list'] as &$spec_list) {
  269. if (!$val2->check($spec_list)) return json_show(1004, $val2->getError());
  270. $spec_list['spec_name'] = $all_spec[$spec_list['spec_id']] ?? '';
  271. $spec_list['spec_value_name'] = $all_spec_value[$spec_list['spec_value_id']] ?? '';
  272. }
  273. if ($param['is_determine_price'] == 1) $param['cgd_charge'] = round(bcsub($param['price'], $param['expect_service'], 3), 2);//确定售价时,采购价=售价-服务费
  274. else $param['price'] = round(bcadd($param['cgd_charge'], $param['expect_service'], 3), 2);//不确定售价时,售价=采购价+服务费
  275. $userCommon = \app\admin\common\User::getIns();
  276. $names = $userCommon->handle('getCodeAndName', ['code' => [$param['customerCode'], $param['supplierNo']]]);
  277. if (!isset($names['data'][$param['customerCode']]) || $names['data'][$param['customerCode']] == '') return json_show(1004, '该业务公司不存在');
  278. if (!isset($names['data'][$param['supplierNo']]) || $names['data'][$param['supplierNo']] == '') return json_show(1004, '该供应商不存在');
  279. $data=array_merge($param,[
  280. 'customerName' => $names['data'][$param['customerCode']],
  281. 'supplierName' => $names['data'][$param['supplierNo']],
  282. 'service_proportion' => $param['expect_service_proportion'],//服务费比例与期望服务费比例一致
  283. 'service_charge' => $param['expect_service'],//服务费与期望服务费一致
  284. 'specinfo' => json_encode($param['spec_list']),
  285. 'wait_num'=>$param['num'],
  286. 'send_way' => 2,
  287. 'status'=>0,
  288. 'is_check'=>0,
  289. 'fill_url'=>$param['fill_url'],
  290. 'apply_id' => $this->uid,
  291. 'apply_name' => $this->uname,
  292. 'updaterid' => $this->uid,
  293. 'updater' => $this->uname,
  294. 'updatetime' => date('Y-m-d H:i:s'),
  295. 'gold_weight' => $param['gold_weight'] ?? 0,
  296. 'noble_metal' => $param['noble_metal'] ?? 0,
  297. 'config' => $param['config'] ?? '',
  298. 'other_config' => $param['other_config'] ?? '',
  299. 'good_img' => implode(',', $param['good_img']),
  300. 'origin_place' => implode(',', $param['origin_place']),
  301. 'delivery_place' => implode(',', $param['delivery_place']),
  302. ]);
  303. $rs = Db::name('filing')
  304. ->save(array_intersect_key($data,$row));
  305. return $rs ? json_show(0, '报备单更新成功') : json_show(1004, '报备单更新失败');
  306. }
  307. //详情
  308. public function detail()
  309. {
  310. $param = $this->request->only(['id' => 0], 'post', 'trim');
  311. $rs = Db::name('filing')
  312. ->alias('a')
  313. ->field('a.*,b.brand_name,d.unit unit_name,p.platform_name,"" cat_info')
  314. ->leftJoin('brand b', 'b.id=a.brand_id')
  315. ->leftJoin('unit d', 'd.id=a.unit_id')
  316. ->leftJoin('platform p', 'p.id=a.platform_id')
  317. ->where(['a.is_del' => 0, 'a.id' => $param['id']])
  318. ->withAttr('specinfo', function ($val) {
  319. return json_decode($val);
  320. })
  321. ->withAttr('good_img', function ($val) {
  322. return explode(',', $val);
  323. })->withAttr('origin_place', function ($val) {
  324. return explode(',', $val);
  325. })->withAttr('delivery_place', function ($val) {
  326. return explode(',', $val);
  327. })->withAttr('cat_info', function ($val, $da) {
  328. return made($da['cat_id']);
  329. })
  330. ->findOrEmpty();
  331. if(!empty($rs['origin_place']))$origin = ["provice_code"=>$rs['origin_place'][0]??"","city_code"=>$rs['origin_place'][1]??'','area_code'=>$rs['origin_place'][2]??''];
  332. $rs["origin_place_cn"] = GetAddr(json_encode($origin));
  333. if(!empty($rs['delivery_place']))$deliev = ['provice_code'=>$rs['delivery_place'][0]??'','city_code'=>$rs['delivery_place'][1]??'','area_code'=>$rs['delivery_place'][2]??''];
  334. $rs['delivery_place_cn'] = GetAddr(json_encode($deliev));
  335. return json_show(0, '获取报备单详情成功', $rs);
  336. // return FilingLogic::detail($param);
  337. }
  338. //0 待审核 1 待修改 不合规 2 合规可转单 3 部分 4 转单成功 5取消转单
  339. public function status()
  340. {
  341. if ($this->level != 2) return json_show(1004, '业务公司账号不能审核');
  342. $param = $this->request->only(['id', 'companyCode', 'plat_code' => '','platform_id',"remark"=>"",'is_check'=>''], 'post');
  343. $val = Validate::rule([
  344. 'id' => 'require|number|gt:0',
  345. 'companyCode|客户' => 'requireIf:is_check,2|length:18',
  346. 'platform_id|平台id' => 'requireIf:is_check,2|number|gt:0',
  347. 'plat_code|平台商品编号' => 'requireIf:is_check,2|max:255',
  348. "is_check|是否合规"=> 'require|number|in:1,2',
  349. "remark|备注"=> 'requireIf:is_check,1|number|in:1,2',
  350. ]);
  351. if (!$val->check($param)) return json_show(1004, $val->getError());
  352. $rs = Db::name('filing')
  353. ->field('id,status,is_determine_price,price,cgd_charge,platform_id,customerCode,customerName')
  354. ->where(['is_del' => 0, 'id' => $param['id'],"status"=>0])
  355. ->findOrEmpty();
  356. if (empty($rs)) return json_show(1005, '该报备单不存在或不允许审核');
  357. $userCommon = \app\admin\common\User::getIns();
  358. $company = $userCommon->handle('cInfo', ['companyNo' => $param['companyCode']]);
  359. if (!isset($company['data'])) return json_show(1005, '该客户不存在');
  360. $tmp = Db::name('platform')
  361. ->where(['is_del' => 0, 'id' => $param['platform_id']])
  362. ->field('id,is_select_pay_rate,status')
  363. ->findOrEmpty();
  364. if (empty($tmp)) return json_show(1005, '该平台不存在');
  365. if ($tmp['status'] != 1) return error_show(1004, "平台信息已禁用");
  366. if($tmp['is_select_pay_rate']==1 && channel_is_company($param['platform_id'],$rs['customerCode']))return
  367. error_show(1004, "平台渠道包含当前业务公司 {$rs['customerName']}");
  368. //校验支付渠道中的业务公司是否与报备单业务公司重复
  369. $update = array_merge($param, [
  370. 'companyName' => $company['data']['companyName'],
  371. "status"=>$param["is_check"],
  372. 'updaterid' => $this->uid,
  373. 'updater' => $this->uname,
  374. 'updatetime' => date('Y-m-d H:i:s'),
  375. ]);
  376. //
  377. // if ($rs['is_determine_price'] == 1) $update['cgd_charge'] = round(bcsub($rs['price'], $param['service_charge'], 3), 2);//确定售价时,采购价=售价-服务费
  378. // else $update['price'] = round(bcadd($rs['cgd_charge'], $param['service_charge'], 3), 2);//不确定售价时,售价=采购价+服务费
  379. $res = Db::name('filing')
  380. ->where(['is_del' => 0, 'id' => $param['id']])
  381. ->whereIn('status', [0, 2])
  382. ->update($update);
  383. return $res ? json_show(0, '操作成功') : json_show(1004, '操作失败');
  384. // return FilingLogic::status($param);
  385. }
  386. //取消转单
  387. public function cancel()
  388. {
  389. if ($this->level == 1) return json_show(1004, '超管不允许操作');
  390. $param = $this->request->only(['id'], 'post');
  391. $where = [
  392. ['is_del', '=', 0],
  393. ['id', '=', $param['id']],
  394. ['status', 'in', [0, 1, 2, 4]]
  395. ];
  396. $rs = Db::name('filing')
  397. ->field('id,status,supplierNo')
  398. ->where($where)
  399. ->findOrEmpty();
  400. if (empty($rs)) return json_show(1005, '该报备单不存在或不允许取消');
  401. if ($this->level == 2) {
  402. $supp = get_personid_by_supplierNo([$rs['supplierNo']]);
  403. if ($this->uid != $supp[$rs['supplierNo']]) return json_show(1004, '只有供应商负责人才能操作');
  404. }
  405. $res = Db::name('filing')
  406. ->where($where)
  407. ->update(['status' => 5, 'updatetime' => date('Y-m-d H:i:s'), 'updaterid' => $this->uid, 'updater' => $this->uname,]);
  408. return $res ? json_show(0, '操作成功') : json_show(1004, '操作失败');
  409. }
  410. //转单
  411. public function transfer()
  412. {
  413. if ($this->level == 1) return json_show(1004, '超管不允许操作');
  414. $param = $this->request->only([
  415. 'id',
  416. 'addr_list'=>[],
  417. "customerCode"=>""], 'post');
  418. $val = Validate::rule([
  419. 'id|报备的主键id' => 'require|number|gt:0',
  420. "customerCode|客户编号"=>"require|max:255",
  421. 'addr_list|收货地址' => 'require|array|max:100',
  422. ]);
  423. if (!$val->check($param)) return json_show(1004, $val->getError());
  424. $val2 = Validate::rule([
  425. 'receipt_quantity|收货数量' => 'require|number|gt:0|max:999999999',
  426. 'contactor|联系人' => 'require|max:255',
  427. 'mobile|联系电话' => 'require|mobile',
  428. 'addr_code|收货省市区编码' => 'require|array|length:3',
  429. 'addr|详细地址' => 'require|max:255',
  430. ]);
  431. foreach ($param['addr_list'] as $addr_list) {
  432. if (!$val2->check($addr_list)) return json_show(1004, $val2->getError());
  433. }
  434. $filing = Db::name('filing')
  435. ->field(true)
  436. ->where(['is_del' => 0, 'id' => $param['id'], 'status' => [2,3]])
  437. ->findOrEmpty();
  438. if (empty($filing)) return json_show(1005, '该报备单不存在或不允许转单');
  439. $send_num = array_sum(array_column($param['addr_list'], 'receipt_quantity'));
  440. $wait_num = $filing['wait_num'] - $send_num ;
  441. if ($wait_num<0) return json_show(1004, '收货地址的收货总数超过报备单可转单数量');
  442. $userCommon = \app\admin\common\User::getIns();
  443. $supplier = $userCommon->handle('sInfo', ['code' => $filing['supplierNo']]);
  444. $names = $userCommon->handle('getCodeAndName', ['code' => [ $param['customerCode']]]);
  445. if (!isset($names['data'])) return json_show(1005, '该客户不存在');
  446. //level3账号都可以操作
  447. //level2账号的话,只有供应商负责人能操作
  448. if (($this->level == 2) && ($this->uid != $supplier['data']['personid'])) return json_show(1004, '只有供应商负责人才能操作');
  449. $date = date('Y-m-d H:i:s');
  450. Db::startTrans();
  451. try {
  452. $order_type = 4;//报备商品
  453. $order_source = 7;//报备转单
  454. $spuCode = makeNo('SKU');
  455. //商品表
  456. $goodIn= Db::name('good_zixun')
  457. ->insert([
  458. 'spuCode' => $spuCode,
  459. 'good_name' => $filing['good_name'],
  460. 'brand_id' => $filing['brand_id'],
  461. 'cat_id' => $filing['cat_id'],
  462. 'good_unit' => $filing['unit_id'],
  463. 'good_type' => 0,
  464. 'moq' => 1,
  465. 'customized' => $filing['make_day'],
  466. 'tax' => $filing['tax'],
  467. 'platform_id' => $filing['platform_id'],
  468. 'supplierNo' => $filing['supplierNo'],
  469. 'supplierName' => $supplier['data']['name'],
  470. 'is_auth' => 0,
  471. 'craft_desc' => $filing['good_name'],
  472. 'good_remark' => '',
  473. 'good_img' => $filing['good_img'],
  474. 'good_thumb_img' => '',
  475. 'good_info_img' => '',
  476. 'status' => 1,
  477. 'createrid' => $filing['updaterid'],
  478. 'creater' => $filing['updater'],
  479. 'is_del' => 0,
  480. 'addtime' => $date,
  481. 'updatetime' => $date,
  482. 'specinfo' => $filing['specinfo'],
  483. 'work_day' => $filing['make_day'],
  484. 'noble_metal' => $filing['noble_metal'],
  485. 'is_gold_price' => $filing['is_gold_price'],
  486. 'good_weight' => $filing['gold_weight'],
  487. 'config' => $filing['config'],
  488. 'other_config' => $filing['other_config'],
  489. 'weight' => $filing['weight'],
  490. 'supply_area' => $filing['supply_area'],
  491. 'is_diff' => $filing['is_diff'],
  492. 'pay_way' => $filing['pay_way'],
  493. 'send_way' => $filing['send_way'],
  494. 'companyNo' => $filing['customerCode'],
  495. 'companyName' => $filing['customerName'],
  496. 'proof_type' => '',
  497. 'proof_url' => '',
  498. 'order_type' => $order_type
  499. ]);
  500. if($goodIn==false) throw new \Exception("商品录入商品库失败");
  501. $orderCode = makeNo('QR');
  502. //订单表
  503. //sale
  504. $sale_id = Db::name('sale')->insertGetId([
  505. 'orderCode' => $orderCode,
  506. 'apply_id' => $filing['updaterid'],
  507. 'apply_name' => $filing['updater'],
  508. 'order_type' => $order_type,//报备商品
  509. 'order_source' => $order_source,//报备转单
  510. 'platform_id' => $filing['platform_id'],
  511. 'good_code' => $spuCode,
  512. 'skuCode' => '',
  513. 'cat_id' => $filing['cat_id'],
  514. 'good_name' => $filing['good_name'],
  515. 'good_num' => $filing['num'],
  516. 'good_type' => 1,
  517. 'origin_price' => $filing['cgd_charge'],
  518. 'sale_price' => $filing['price'],
  519. 'total_price' => round(bcmul($filing['price'], $filing['num'], 3), 2),
  520. 'post_fee' => 0,
  521. 'is_diff' => $filing['is_diff'],
  522. 'is_activity' => 0,
  523. 'activity_code' => '',
  524. 'is_stock' => 0,
  525. 'customer_code' => $param['customerCode'],
  526. 'customerName' => $names['data'][$param['customerCode']]??"",
  527. 'supplierNo' => $filing['customerCode'],
  528. 'supplierName' => $filing['customerName'],
  529. 'supNo' => $filing['supplierNo'],
  530. 'supName' => $filing['supplierName'],
  531. 'zxNo' => '',
  532. 'platform_order' =>$filing['filingCode'],
  533. 'send_num' => 0,
  534. 'wsend_num' => $filing['num'],
  535. 'th_num' => 0,
  536. 'th_fee' => 0,
  537. 'send_status' => 1,
  538. 'send_type' => 1,//直接发货
  539. 'remark' => '',
  540. 'status' => 0,
  541. 'is_del' => 0,
  542. 'proof_id' => 0,
  543. 'other_orderNo' => '',
  544. 'workNo' => '',
  545. 'poNo' => '',
  546. 'use_order' => 0,
  547. 'good_weight' => 0,
  548. 'gold_price' => 0,
  549. 'cost_price' => $filing['cost_fee'],
  550. 'diff_weight' => 0,
  551. 'diff_fee' => 0,
  552. 'returnCode' => '',
  553. 'addtime' => $date,
  554. 'updatetime' => $date,
  555. 'cgderid' => $supplier['data']['personid'],
  556. 'cgder' => $supplier['data']['person'],
  557. 'good_createrid' => $filing['updaterid'],
  558. 'good_creater' => $filing['updater'],
  559. ]);
  560. if($sale_id==false) throw new \Exception('订单生成失败');
  561. //仓库
  562. $wsm = Db::name('warehouse_info')
  563. ->field('id,wsm_code')
  564. ->where(['supplierNo' => $filing['supplierNo'], 'companyNo' => $filing['customerCode'], 'is_del' => 0])
  565. ->findOrEmpty();
  566. if (empty($wsm)) {
  567. $wsm_code = makeNo('WSM');
  568. $ws= Db::name('warehouse_info')->insert([
  569. 'wsm_code' => $wsm_code,
  570. 'name' => $supplier['data']['name'],
  571. 'wsm_type' => 2,
  572. 'supplierNo' => $supplier['data']['code'],
  573. 'addr' => '',
  574. 'addrs_code' => '',
  575. 'contactor' => 0,
  576. 'contactor_name' => 0,
  577. 'mobile' => '',
  578. 'position' => '',
  579. 'companyNo' => $filing['supplierNo'],
  580. 'status' => 1,
  581. 'is_del' => 0,
  582. 'addtime' => $date,
  583. 'updatetime' => $date,
  584. ]);
  585. if($ws==false)throw new \Exception('仓库生成失败');
  586. } else $wsm_code = $wsm['wsm_code'];
  587. //采购单
  588. $cgdCode = makeNo('CG');
  589. $cg= Db::name('purchease_order')->insert([
  590. 'cgdNo' => $cgdCode,
  591. 'bkcode' => '',
  592. 'wsm_code' => $wsm_code,
  593. 'cgder' => $supplier['data']['person'],
  594. 'cgder_id' => $supplier['data']['personid'],
  595. 'spuCode' => $spuCode,
  596. 'good_name' => $filing['good_name'],
  597. 'good_num' => $filing['num'],
  598. 'good_price' => $filing['cgd_charge'],
  599. 'total_fee' => round(bcmul($filing['cgd_charge'], $filing['num']), 2),
  600. 'pakge_fee' => $filing['pakge_fee'],
  601. 'cert_fee' => $filing['cert_fee'],
  602. 'open_fee' => $filing['open_fee'],
  603. 'delivery_fee' => $filing['delivery_fee'],
  604. 'mark_fee' => $filing['mark_fee'],
  605. 'demo_fee' => $filing['demo_fee'],
  606. 'diff_weight' => '0',
  607. 'diff_fee' => '0',
  608. 'gold_price' => '0',
  609. 'supplierNo' => $filing['supplierNo'],
  610. 'supplier_name' => $filing['supplierName'],
  611. 'companyNo' => $filing['customerCode'],
  612. 'companyName' => $filing['customerName'],
  613. 'send_status' => 1,
  614. 'send_num' => '0',
  615. 'wsend_num' => $filing['num'],
  616. 'remark' => '',
  617. 'status' => 0,
  618. 'lasttime' => $date,
  619. 'is_del' => 0,
  620. 'order_type' => $order_type,
  621. 'order_source' => $order_source,
  622. 'good_type' => 1,
  623. 'addtime' => $date,
  624. 'updatetime' => $date,
  625. 'good_createrid' => $filing['updaterid'],
  626. 'good_creater' => $filing['updater'],
  627. ]);
  628. if($cg==false)throw new \Exception('采购单生成失败');
  629. //台账
  630. $standing_bood_data = [
  631. 'standBookNo' => makeNo('IO'),
  632. 'orderCode' => $orderCode,
  633. 'sale_id' => $sale_id,
  634. 'customer_code' => $filing['companyCode'],
  635. 'supplierNo' => $filing['supplierNo'],
  636. 'order_type' => $order_type,
  637. 'order_source' => $order_source,
  638. 'spuCode' => $spuCode,
  639. 'addtime' => $date,
  640. 'updatetime' => $date,
  641. 'cgdNo' => $cgdCode,
  642. ];
  643. $i = 0;
  644. $order_send_insert = [];
  645. foreach ($param['addr_list'] as $addr) {
  646. //地址addr
  647. $addrid = Db::name('order_addr')->insertGetId([
  648. 'orderCode' => $orderCode,
  649. 'addr' => $addr['addr'],
  650. 'addr_code' => implode(',', $addr['addr_code']),
  651. 'contactor' => $addr['contactor'],
  652. 'mobile' => $addr['mobile'],
  653. 'customer_code' => $param['customerCode'],
  654. 'post_fee' => 0,
  655. 'receipt_quantity' => $addr['receipt_quantity'],
  656. 'is_del' => 0,
  657. 'addtime' => $date,
  658. 'updatetime' => $date,
  659. ]);
  660. if($addrid==false)throw new \Exception('地址生成失败');
  661. //发货单
  662. $outCode = makeNo('DF');
  663. //改变编码规则,将原来的编码后两位换成序列号
  664. //str_pad字符串填充
  665. $outCode = substr($outCode, 0, -2) . str_pad($i, 2, '0', STR_PAD_LEFT);
  666. $send= Db::name('order_out')->insert([
  667. 'orderCode' => $orderCode,
  668. 'outCode' => $outCode,
  669. 'apply_id' => $filing['updaterid'],
  670. 'apply_name' => $filing['updater'],
  671. 'addrid' => $addrid,
  672. 'post_name' => '',
  673. 'post_code' => '',
  674. 'post_fee' => 0,
  675. 'sendtime' => $date,
  676. 'send_num' => $addr['receipt_quantity'],
  677. 'check_num' => 0,
  678. 'error_num' => 0,
  679. 'wsm_code' => $wsm_code,
  680. 'order_type' => $order_type,
  681. 'status' => 0,
  682. 'addtime' => $date,
  683. 'updatetime' => $date,
  684. ]);
  685. if($send==false) throw new \Exception('发货单生成失败');
  686. $standing_bood_data['outCode'][] = $outCode;
  687. $order_send_insert[] = [
  688. 'cgdNo' => $cgdCode,
  689. 'outCode' => $outCode,
  690. 'send_num' => $addr['receipt_quantity'],
  691. 'bnCode' => '',
  692. 'status' => 1,
  693. 'addtime' => $date,
  694. 'updatetime' => $date,
  695. ];
  696. $i++;
  697. }
  698. //更新报备单
  699. $fillup= Db::name('filing')
  700. ->where(['is_del' => 0, 'id' => $param['id'], 'status' => 2])
  701. ->update([
  702. 'status' =>$wait_num>0?3:4,
  703. 'wait_num' =>$wait_num,
  704. 'transfer_num' =>$filing['transfer_num']+$send_num,
  705. 'updatetime' => $date,
  706. 'spuCode' => $spuCode,
  707. 'orderCode' =>$filing["orderCode"].$orderCode.",",
  708. 'reason' => '',
  709. 'updaterid' => $this->uid,
  710. 'updater' => $this->uname]);
  711. if($fillup==false)throw new \Exception('报备单更新失败');
  712. //待办已办先不处理
  713. //关联表
  714. $gu= Db::name('order_num')
  715. ->insert([
  716. 'orderCode' => $orderCode,
  717. 'cgdNo' => $cgdCode,
  718. 'spuCode' => $spuCode,
  719. 'companyNo' => $filing['customerCode'],
  720. 'good_num' => $filing['num'],
  721. 'wsend_num' => $filing['num'],
  722. 'send_num' => 0,
  723. 'wait_num' => $filing['num'],
  724. ]);
  725. if($gu==false) throw new \Exception('关联表新建失败');
  726. if ($order_send_insert) Db::name('order_send')->insertAll($order_send_insert);
  727. //处理台账
  728. if (isset($standing_bood_data['outCode']) && is_array($standing_bood_data['outCode'])) $standing_bood_data['outCode'] = implode(',', $standing_bood_data['outCode']);
  729. Db::name('standing_book')->insert($standing_bood_data);
  730. Db::commit();
  731. return json_show(0, '转单成功');
  732. } catch (Exception $exception) {
  733. Db::rollback();
  734. return json_show(1005, '转单失败,' . $exception->getMessage());
  735. }
  736. }
  737. //订单录入
  738. public function orderAdd()
  739. {
  740. $param = $this->request->param([
  741. "companyNo" => '',
  742. "poCode" => "",
  743. "workCode" => "",
  744. "khNo" => "",
  745. "qrdType" => 3,
  746. "goodName" => "",
  747. "tax" => "",
  748. "goodNum" => "",
  749. "goodPrice" => "",
  750. "sale_total" => "",
  751. "goodUnit" => "",
  752. "mobile" => "",
  753. "addr" => "",
  754. "addr_code" => "",
  755. "contactor" => "",
  756. "sendtime" => "",
  757. "cat_id" => '',
  758. "supplierNo" => "",
  759. "cgdPrice" => "",
  760. "cgd_total" => "",
  761. "platform_id" => "0",
  762. ], "post", "trim");
  763. $valid = Validate::rule([
  764. "companyNo|业务公司编号" => "require|max:255|min:1",
  765. "supplierNo|业务公司编号" => "require|max:255|min:1",
  766. "poCode|PO编号" => "require|max:255|min:1",
  767. "khNo|客户公司编号" => "require|max:255|min:1",
  768. "qrdType|订单类型" => "require|number|in:1,2,3",
  769. "goodName|商品名称" => "require|max:255|min:1",
  770. "goodUnit|商品单位" => "require|number|gt:0",
  771. "tax|税率" => "require|number|gt:0",
  772. "goodNum|商品数量" => "require|number|gt:0",
  773. "sale_total|销售总额" => "require|float|gt:0",
  774. "cgd_total|采购总额" => "require|float|gt:0",
  775. // "goodPrice|商品单价" => "require|float|gt:0",
  776. "mobile|联系人电话" => "require|number|mobile",
  777. "contactor|联系人" => "require|max:255|min:1",
  778. "addr|收货地址" => "require|max:255|min:1",
  779. "sendtime|发货时间" => "require|date",
  780. "cat_id|商品分类id" => "require|number|gt:0",
  781. // "cgdPrice|采购单价" => "require|float|gt:0",
  782. "platform_id|平台" => "require|number"
  783. ]);
  784. if ($valid->check($param) == false) return error_show(1004, $valid->getError());
  785. $qrdcode = makeNo("QR");
  786. $cgddcode = makeNo("CG");
  787. $goodCode = makeNo("SKU");
  788. $userCommon = \app\admin\common\User::getIns();
  789. $tmp = $userCommon->handle('getCodeAndName',['code'=>[$param['khNo'],$param['supplierNo'],$param['companyNo']]]);
  790. if(!isset($tmp['code']) || $tmp['code']!=0) return json_show($tmp['code'],$tmp['message'],$tmp['data']);
  791. if(!isset($tmp['data'][$param['khNo']])) return json_show(1004, "未找到客户数据");
  792. if(!isset($tmp['data'][$param['supplierNo']])) return json_show(1004, "未找到平台供应商数据");
  793. if(!isset($tmp['data'][$param['companyNo']])) return json_show(1004, "未找到平台业务公司数据");
  794. $payinfo = Db::name("platform")->where(["id"=> $param['platform_id'],"is_del"=>0])->findOrEmpty();
  795. if (empty($payinfo)) return error_show(1004, "平台信息未找到");
  796. if ($payinfo['status'] != 1) return error_show(1004, "平台信息已禁用");
  797. if($payinfo['is_select_pay_rate']==1 && channel_is_company($param['platform_id'],$param['companyNo']))return error_show(1004, "平台渠道包含当前业务公司 {$tmp['data'][$param['companyNo']]}");
  798. $supplierinfo = $userCommon->handle("hqInfo",["code"=>$param['supplierNo']]);
  799. if(!isset($supplierinfo['data'])|| empty($supplierinfo['data'])) return json_show(1004, "未找到供应商公司数据");
  800. $person =$supplierinfo['data']['child']??["person"=>'',"person_id"=>0];
  801. if($param['companyNo']== $supplierinfo['data']['relation_code']) return json_show(1004,'供应商和业务公司不能为同一家公司');
  802. $cgdprice = round($param['cgd_total']/$param['goodNum'],2);
  803. $saleprice = round($param['sale_total']/$param['goodNum'],2);
  804. $qrddata = [
  805. "orderCode" => $qrdcode,
  806. "apply_id" => $this->uid,
  807. "apply_name" => $this->uname,
  808. "order_type" => $param['qrdType'],
  809. "order_source" => 9,
  810. "platform_id" => $param['platform_id'],
  811. "good_code" => $goodCode,
  812. "skuCode" => '',
  813. "cat_id" => $param['cat_id'],
  814. "good_name" => $param['goodName'],
  815. "good_num" => $param['goodNum'],
  816. "good_type" => 1,
  817. "origin_price" => $cgdprice,
  818. "sale_price" => $saleprice,
  819. "total_price" =>$param['sale_total'],
  820. "post_fee" => 0,
  821. "is_diff" => 0,
  822. "is_activity" => 0,
  823. "activity_code" => '',
  824. "is_stock" => 0,
  825. "arrive_time" => $param['sendtime'],
  826. "customer_code" => $param['khNo'],
  827. "customerName" => $tmp['data'][$param['khNo']],
  828. "supplierNo" => $param['companyNo'],
  829. "supplierName" =>$tmp['data'][$param['companyNo']],
  830. "supName" => $tmp['data'][$param['supplierNo']],
  831. "supNo" => $param['supplierNo'],
  832. "platform_order" => $param['poCode'],
  833. "send_num" => $param['goodNum'],
  834. "wsend_num" => 0,
  835. "send_status" => 3,
  836. "send_type" => 1,
  837. "status" => 2,
  838. "is_del" => 0,
  839. "pay_id" => 0,
  840. "workNo" => $param['workCode'],
  841. "addtime" => date("Y-m-d H:i:s"),
  842. "updatetime" => date("Y-m-d H:i:s"),
  843. "cgderid" => $person['personid'],
  844. "cgder" => $person['person'],
  845. "good_createrid" => $this->uid,
  846. "good_creater" => $this->uname
  847. ];
  848. $orderCgd = [
  849. "orderCode" => $qrdcode,
  850. "cgdNo" => $cgddcode,
  851. "spuCode" => $goodCode,
  852. "good_num" => $param['goodNum'],
  853. "wsend_num" => 0,
  854. "send_num" => $param['goodNum'],
  855. "wait_num" => 0
  856. ];
  857. $cgddata = [
  858. "cgdNo" => $cgddcode,
  859. "bkcode" => '',
  860. "wsm_code" => "",
  861. "cgder_id" => $person['personid'],
  862. 'cgder' => $person['person'],
  863. "spuCode" => $goodCode,
  864. "good_name" => $param['goodName'],
  865. "good_num" => $param['goodNum'],
  866. "good_price" => $cgdprice,
  867. "total_fee" => $param['cgd_total'],
  868. "supplierNo" => $param['supplierNo'],
  869. "supplier_name" =>$tmp['data'][$param['supplierNo']],
  870. "companyNo" => $param['companyNo'],
  871. "companyName" => $tmp['data'][$param['companyNo']],
  872. "send_status" => 3,
  873. "send_num" => $param['goodNum'],
  874. "wsend_num" => 0,
  875. "status" => 3,
  876. "lasttime" => date("Y-m-d H:i:s"),
  877. "order_type" => $param['qrdType'],
  878. "order_source" => 9,
  879. "addtime" => date("Y-m-d H:i:s"),
  880. "updatetime" => date("Y-m-d H:i:s"),
  881. "good_createrid" => $this->uid,
  882. "good_creater" => $this->uname,
  883. ];
  884. $goodinfo = [
  885. "spuCode" => $goodCode,
  886. "good_name" => $param['goodName'],
  887. "brand_id" => 0,
  888. "cat_id" => $param['cat_id'],
  889. "good_unit" => $param['goodUnit'],
  890. "good_type" => 1,
  891. "moq" => 1,
  892. "customized" => 0,
  893. "platform_id" => $param['platform_id'],
  894. "tax" => $param['tax'],
  895. "supplierNo" => $param['supplierNo'],
  896. "supplierName" =>$tmp['data'][$param['supplierNo']],
  897. "is_auth" => 1,
  898. "craft_desc" => '',
  899. "good_remark" => '',
  900. "good_img" => '',
  901. "good_thumb_img" => '',
  902. "good_info_img" => '',
  903. "createrid" => $this->uid,
  904. "creater" => $this->uname,
  905. "specinfo" => '',
  906. "work_day" => 0,
  907. "noble_metal" => 0,
  908. "good_weight" => 0,
  909. "config" => "",
  910. "weight" => 0,
  911. "supply_area" => 0,
  912. "is_diff" => 0,
  913. "pay_way" => 0,
  914. "send_way" => 0,
  915. "companyNo" => $param['companyNo'],
  916. "companyName" => $tmp['data'][$param['companyNo']],
  917. "addtime" => date("Y-m-d H:i:s"),
  918. "updatetime" => date("Y-m-d H:i:s"),
  919. ];
  920. $orderAddr = [
  921. "orderCode" => $qrdcode,
  922. "addr" => $param['addr'],
  923. "addr_code" => $param['addr_code'],
  924. "contactor" => $param['contactor'],
  925. "mobile" => $param['mobile'],
  926. "arrive_time" => $param['sendtime'],
  927. "customer_code" => $param['khNo'],
  928. "receipt_quantity" => $param['goodNum'],
  929. "addtime" => date("Y-m-d H:i:s"),
  930. "updatetime" => date("Y-m-d H:i:s"),
  931. ];
  932. Db::startTrans();
  933. try {
  934. $qrd = Db::name("sale")->insert($qrddata);
  935. if ($qrd == false) throw new Exception("销售单生成失败");
  936. $qrd = Db::name("order_num")->insert($orderCgd);
  937. if ($qrd == false) throw new Exception("销售单采购管联生成失败");
  938. $qrd = Db::name("purchease_order")->insert($cgddata);
  939. if ($qrd == false) throw new Exception("采购单生成失败");
  940. $qrd = Db::name("good_zixun")->insert($goodinfo);
  941. if ($qrd == false) throw new Exception("商品信息录入生成失败");
  942. $qrd = Db::name("order_addr")->insert($orderAddr);
  943. if ($qrd == false) throw new Exception("销售单地址生成失败");
  944. Db::commit();
  945. return app_show(0, '订单生成成功');
  946. } catch (\Exception $exception) {
  947. Db::rollback();
  948. return error_show(1004, $exception->getMessage());
  949. }
  950. }
  951. public function orderInfo()
  952. {
  953. $param = $this->request->param(["orderCode"], "post", "trim");
  954. if ($param['orderCode'] == '') return error_show(1004, "订单编号不能为空");
  955. $saleinfo = Db::name("sale")->where(["orderCode" => $param['orderCode']])->findOrEmpty();
  956. if (empty($saleinfo)) return error_show(1004, "销售单不存在");
  957. if ($saleinfo['order_source'] != 9) return error_show(1004, "销售单来源不是网络录入");
  958. $cgd = Db::name("purchease_order")->alias("a")
  959. ->leftJoin("order_num b", "a.cgdNo=b.cgdNo")
  960. ->where(["b.orderCode" => $param['orderCode']])
  961. ->field("a.*")
  962. ->findOrEmpty();
  963. if (empty($cgd)) return error_show(1004, "采购单不存在");
  964. $goodinfo = Db::name("good_zixun")->where(["spuCode" => $saleinfo['good_code']])->findOrEmpty();
  965. if (empty($goodinfo)) return error_show(1004, "商品信息不存在");
  966. $addr = Db::name("order_addr")->where(["orderCode" => $param['orderCode']])->findOrEmpty();
  967. if (empty($addr)) return error_show(1004, "地址信息不存在");
  968. $addinfo = $addr['addr_code'] != '' ? json_decode($addr['addr_code'], true) ?? $addr['addr_code'] : '';
  969. if (is_string($addinfo) && $addinfo != '') {
  970. $addinfo = ["provice_code" => '', "city_code" => '', "area_code" => ''];
  971. list($addinfo['provice_code'], $addinfo['city_code'], $addinfo['area_code']) = explode(",", $addr['addr_code']);
  972. }
  973. $platform = Db::name("platform")->where(["id" => $saleinfo['platform_id']])->field("platform_name,pay_title")
  974. ->findOrEmpty();
  975. $userCommon =\app\admin\common\User::getIns();
  976. $names = $userCommon->handle('getCodeAndName', ['code' => [$saleinfo['supplierNo'], $saleinfo['customer_code']]]);
  977. $data = [
  978. "orderCode" => $saleinfo['orderCode'],
  979. "companyNo" => $saleinfo['supplierNo'],
  980. "companyName" => $names['data'][$saleinfo['supplierNo']] ?? '',//Db::name("supplier")->where(["code" => $saleinfo['supplierNo']])->value("name", ''),
  981. "poCode" => $saleinfo['platform_order'],
  982. "workCode" => $saleinfo['workNo'],
  983. "platform_id" => $saleinfo['platform_id'],
  984. "platform_name" =>$platform['platform_name']??"",
  985. "khNo" => $saleinfo['customer_code'],
  986. "khName" => $names['data'][$saleinfo['customer_code']] ?? '',//Db::name("customer_info")->where(["companyNo" => $saleinfo['customer_code']])->value("companyName", ''),
  987. "qrdType" => $saleinfo['order_type'],
  988. "goodName" => $saleinfo['good_name'],
  989. "tax" => $goodinfo['tax'],
  990. "goodUnit" => $goodinfo['good_unit'],
  991. "unitName" => Db::name("unit")->where(["id" => $goodinfo['good_unit']])->value("unit", ""),
  992. "goodNum" => $saleinfo['good_num'],
  993. "goodPrice" => $saleinfo['sale_price'],
  994. "sale_total" => $saleinfo['total_price'],
  995. "mobile" => $addr['mobile'],
  996. "addr" => $addr['addr'],
  997. "addr_cn" => GetAddr(json_encode($addinfo)),
  998. "addr_code" => $addr['addr_code'],
  999. "contactor" => $addr['contactor'],
  1000. "buyerid" => $saleinfo['cgderid'],
  1001. "buyer_name" => $saleinfo['cgder'],
  1002. "sendtime" => $saleinfo['arrive_time'],
  1003. "cat_id" => made($saleinfo['cat_id']),
  1004. "cat_name" => Db::name("cat")->where(["id" => $saleinfo['cat_id']])->value("cat_name", ''),
  1005. "supplierNo" => $cgd['supplierNo'],
  1006. "supplierNanme" => $cgd['supplier_name'],
  1007. "cgd_tax" => round((1 - $cgd['total_fee']/ $saleinfo['total_price']), 4) * 100,
  1008. "cgdPrice" => $saleinfo['origin_price'],
  1009. "cgd_total" => $cgd['total_fee'],
  1010. "pay_id" => $saleinfo['pay_id'],
  1011. "pay_name" =>$platform['pay_title']??"",
  1012. ];
  1013. return app_show(0, "获取成功", $data);
  1014. }
  1015. public function orderEdit()
  1016. {
  1017. $param = $this->request->param([
  1018. "orderCode" => "",
  1019. "poCode" => "",
  1020. "workCode" => "",
  1021. "tax" => "",
  1022. "goodUnit" => "",
  1023. "mobile" => "",
  1024. "addr" => "",
  1025. "addr_code" => "",
  1026. "contactor" => "",
  1027. "sendtime" => "",
  1028. "supplierNo" => "",
  1029. "cgd_total" => "",
  1030. // "sale_total" => "",
  1031. ], "post", "trim");
  1032. $valid = Validate::rule([
  1033. "orderCode|销售单号" => "require|max:255",
  1034. "supplierNo|供应商公司编号" => "require|max:255|min:1",
  1035. "poCode|PO编号" => "require|max:255|min:1",
  1036. "mobile|联系人电话" => "require|number|mobile",
  1037. "goodUnit|商品单位" => "require|number|gt:0",
  1038. "contactor|联系人" => "require|max:255|min:1",
  1039. "addr|收货地址" => "require|max:255|min:1",
  1040. "sendtime|发货时间" => "require|date",
  1041. "tax|商品利率" => "require|number",
  1042. "cgd_total|采购总额" => "require|float|gt:0",
  1043. // "sale_total|销售总额" => "require|float|gt:0",
  1044. ]);
  1045. if ($valid->check($param) == false) return error_show(1004, $valid->getError());
  1046. $saleinfo = Db::name("sale")->where(["orderCode" => $param['orderCode']])->findOrEmpty();
  1047. if (empty($saleinfo)) return error_show(1004, "销售单不存在");
  1048. if ($saleinfo['order_source'] != 9) return error_show(1004, "销售单来源不是网络录入");
  1049. $cgd = Db::name("purchease_order")->alias("a")
  1050. ->leftJoin("order_num b", "a.cgdNo=b.cgdNo")
  1051. ->where(["b.orderCode" => $param['orderCode']])
  1052. ->field("a.*")
  1053. ->findOrEmpty();
  1054. if (empty($cgd)) return error_show(1004, "采购单不存在");
  1055. $userCommon = \app\admin\common\User::getIns();
  1056. $good = Db::name("good_zixun")->where(["spuCode" => $saleinfo['good_code']])->findOrEmpty();
  1057. if (empty($good)) return error_show(1004, "商品信息不存在");
  1058. $addr = Db::name("order_addr")->where(["orderCode" => $param['orderCode']])->findOrEmpty();
  1059. if (empty($addr)) return error_show(1004, "地址信息不存在");
  1060. $cgdPrice = round($param['cgd_total']/$saleinfo['good_num'],2);
  1061. // $salePrice = round($param['sale_total']/$saleinfo['good_num'],2);
  1062. $supplierinfo = $userCommon->handle("hqInfo",["code"=>$param['supplierNo']]);
  1063. if(!isset($supplierinfo['data'])|| empty($supplierinfo['data'])) return json_show(1004, "未找到供应商公司数据");
  1064. $person =$supplierinfo['data']['child']??["person"=>'',"person_id"=>0];
  1065. if($cgd['companyNo']== $supplierinfo['data']['relation_code']) return json_show(1004,'供应商和业务公司不能为同一家公司');
  1066. $qrddata = [
  1067. "origin_price" => $cgdPrice,
  1068. "arrive_time" => $param['sendtime'],
  1069. "platform_order" => $param['poCode'],
  1070. "workNo" => $param['workCode'],
  1071. "updatetime" => date("Y-m-d H:i:s"),
  1072. "cgderid" => $person['personid'],
  1073. "cgder" => $person['person']
  1074. ];
  1075. $cgddata = [
  1076. "cgder_id" => $person['personid'],
  1077. 'cgder' => $person['person'],
  1078. "good_price" => $cgdPrice,
  1079. "total_fee" => $param['cgd_total'],
  1080. "supplierNo" => $param['supplierNo'],
  1081. "supplier_name" => $supplierinfo['data']['name'],
  1082. // "companyNo"=>$param['companyNo'],
  1083. "updatetime" => date("Y-m-d H:i:s"),
  1084. ];
  1085. $goodinfo = [
  1086. "good_unit" => $param['goodUnit'],
  1087. "tax" => $param['tax'],
  1088. "supplierNo" => $param['supplierNo'],
  1089. // "companyNo" => $param['companyNo'],
  1090. "updatetime" => date("Y-m-d H:i:s"),
  1091. ];
  1092. $orderAddr = [
  1093. "addr" => $param['addr'],
  1094. "addr_code" => $param['addr_code'],
  1095. "contactor" => $param['contactor'],
  1096. "mobile" => $param['mobile'],
  1097. "arrive_time" => $param['sendtime'],
  1098. // "customer_code" => $param['khNo'],
  1099. "updatetime" => date("Y-m-d H:i:s"),
  1100. ];
  1101. Db::startTrans();
  1102. try {
  1103. $qrd = Db::name("sale")->where($saleinfo)->update($qrddata);
  1104. if ($qrd == false) throw new Exception("销售单更新失败");
  1105. $qrd = Db::name("purchease_order")->where($cgd)->update($cgddata);
  1106. if ($qrd == false) throw new Exception("采购单更新失败");
  1107. $qrd = Db::name("good_zixun")->where($good)->update($goodinfo);
  1108. if ($qrd == false) throw new Exception("商品信息更新失败");
  1109. $qrd = Db::name("order_addr")->where($addr)->update($orderAddr);
  1110. if ($qrd == false) throw new Exception("销售单地址更新失败");
  1111. Db::commit();
  1112. return app_show(0, '订单更新成功');
  1113. } catch (\Exception $exception) {
  1114. Db::rollback();
  1115. return error_show(1004, $exception->getMessage());
  1116. }
  1117. }
  1118. }