SubWorkorderStatus.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use think\Config;
  5. use think\Db;
  6. use think\Request;
  7. /**
  8. * 工单资料管理
  9. */
  10. class SubWorkorderStatus extends Api
  11. {
  12. protected $noNeedLogin = ['*'];
  13. protected $noNeedRight = ['*'];
  14. public function _initialize()
  15. {
  16. if (isset($_SERVER['HTTP_ORIGIN'])) {
  17. header('Access-Control-Expose-Headers: __token__');//跨域让客户端获取到
  18. }
  19. //跨域检测
  20. check_cors_request();
  21. if (!isset($_COOKIE['PHPSESSID'])) {
  22. Config::set('session.id', $this->request->server("HTTP_SID"));
  23. }
  24. parent::_initialize();
  25. }
  26. /**
  27. * 子订单状态查询
  28. * @return void
  29. * @throws \think\db\exception\DataNotFoundException
  30. * @throws \think\db\exception\ModelNotFoundException
  31. * @throws \think\exception\DbException
  32. */
  33. public function SubWorkOrderStatusList()
  34. {
  35. if (!$this->request->isGet()) {
  36. $this->error('请求错误');
  37. }
  38. $param = $this->request->param();
  39. if (empty($param) || empty($param['order'])) {
  40. $this->error('参数错误');
  41. }
  42. $orderNo = $param['order'];
  43. $isSubOrder = strpos($orderNo, '-') !== false;
  44. $colour_id = substr($orderNo, 0, 12);
  45. // 条件构造
  46. $where = ['a.Mod_rq' => null];
  47. if ($isSubOrder) {
  48. $where['a.子订单编号'] = $orderNo;
  49. } else {
  50. $where['a.订单编号'] = $orderNo;
  51. }
  52. // 获取所有工单数据(订单或子订单)
  53. $workOrderList = \db('工单_印件资料')
  54. ->alias('a')
  55. ->join('工单_基本资料 b', 'a.订单编号 = b.订单编号')
  56. ->where($where)
  57. ->field('a.订单编号,a.子订单编号,a.款号,b.款式,b.客户编号,a.zdtotal,
  58. cm1,cm2,cm3,cm4,cm5,cm6,cm7,cm8,cm9,cm10,
  59. cmsl1,cmsl2,cmsl3,cmsl4,cmsl5,cmsl6,cmsl7,cmsl8,cmsl9,cmsl10')
  60. ->select();
  61. if (empty($workOrderList)) {
  62. $this->error('未找到相关工单数据');
  63. }
  64. // 初始化变量
  65. $sizeList = [];
  66. $result = [
  67. '工序名称' => '制单',
  68. 'total' => 0,
  69. '制单数' => 0
  70. ];
  71. foreach ($workOrderList as $workOrder) {
  72. $result['制单数'] += $workOrder['zdtotal'];
  73. for ($i = 1; $i <= 10; $i++) {
  74. $cmKey = 'cm' . $i;
  75. $cmslKey = 'cmsl' . $i;
  76. if (!empty($workOrder[$cmKey])) {
  77. $size = $workOrder[$cmKey];
  78. $qty = (int)($workOrder[$cmslKey] ?? 0);
  79. $sizeList[] = $size;
  80. if (!isset($result[$size])) {
  81. $result[$size] = 0;
  82. }
  83. $result[$size] += $qty;
  84. }
  85. }
  86. }
  87. $sizeList = array_unique($sizeList);
  88. sort($sizeList);
  89. // 获取设备产量数据
  90. $list = \db('设备_产量计酬')
  91. ->where($isSubOrder ? ['子订单编号' => $orderNo] : ['订单编号' => $orderNo])
  92. ->where('mod_rq', null)
  93. ->select();
  94. $processes = ['裁剪', '车缝', '手工', '大烫', '总检', '包装'];
  95. $data['data'] = [];
  96. $data['data'][] = $result;
  97. foreach ($processes as $process) {
  98. $processData = array_fill_keys($sizeList, 0);
  99. foreach ($list as $item) {
  100. if ($item['工序名称'] === $process && in_array($item['尺码'], $sizeList)) {
  101. $qty = ($process === '裁剪' || $process === '车缝') ? $item['数量'] : $item['s_num'];
  102. $processData[$item['尺码']] += $qty;
  103. }
  104. }
  105. $processData['total'] = array_sum($processData);
  106. $processData['工序名称'] = $process;
  107. $data['data'][] = $processData;
  108. }
  109. // 计算百分比
  110. foreach ($data['data'] as &$val) {
  111. if ($val['工序名称'] === '制单') {
  112. $val['scale'] = '';
  113. } else {
  114. $val['scale'] = $result['制单数'] > 0
  115. ? number_format(($val['total'] / $result['制单数']) * 100, 2) . '%'
  116. : '0%';
  117. }
  118. }
  119. $data['arr'] = $sizeList;
  120. if ($isSubOrder) {
  121. // 查询的是子订单,直接取第一条完整数据
  122. $data['workOrderData'] = $workOrderList[0];
  123. } else {
  124. // 查询的是订单编号,保留第一条数据但去掉 "子订单编号"
  125. $workOrderData = $workOrderList[0];
  126. unset($workOrderData['子订单编号']); // 去掉子订单编号
  127. $data['workOrderData'] = $workOrderData;
  128. }
  129. $this->success('成功', $data);
  130. }
  131. /**
  132. * 码包号接口
  133. * @return void
  134. */
  135. public function Mabaolist()
  136. {
  137. if ($this->request->isGet() === false){
  138. $this->error('参数错误');
  139. }
  140. $param = $this->request->param();
  141. if (empty($param)){
  142. $this->error('参数错误');
  143. }
  144. if (!isset($param['process']) || $param['process'] === '') {
  145. $param['process'] = '车缝';
  146. }
  147. //车缝码包号
  148. $chefeng = \db('设备_产量计酬')
  149. // ->where('子订单编号','like',substr($param['order'],0,12).'%')
  150. ->where('子订单编号',$param['order'])
  151. ->where('工序名称','车缝')
  152. ->column('serial');
  153. //查询工序码包号
  154. $complete = \db('设备_产量计酬')
  155. // ->where('子订单编号','like',substr($param['order'],0,12).'%')
  156. ->where('子订单编号',$param['order'])
  157. ->where('工序名称',$param['process'])
  158. ->where('mod_rq',null)
  159. ->column('serial');
  160. //查询删除码包号
  161. $delete = \db('设备_产量计酬')
  162. // ->where('子订单编号','like',substr($param['order'],0,12).'%')
  163. ->where('子订单编号',$param['order'])
  164. ->where('工序名称','车缝')
  165. ->whereNotNull('mod_rq')
  166. ->column('serial');
  167. $delete = array_unique($delete);
  168. $data['chefeng'] = $chefeng;
  169. $data['complete'] = $complete;
  170. $data['delete'] = $delete;
  171. $this->success('成功',$data);
  172. }
  173. }