SubWorkorderStatus.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  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,cm11,cm12,cm13,cm14,
  59. cmsl1,cmsl2,cmsl3,cmsl4,cmsl5,cmsl6,cmsl7,cmsl8,cmsl9,cmsl10,cmsl11,cmsl12,cmsl13,cmsl14
  60. ')
  61. ->select();
  62. if (empty($workOrderList)) {
  63. $this->error('未找到相关工单数据');
  64. }
  65. // 初始化变量
  66. $sizeList = [];
  67. $result = [
  68. '工序名称' => '制单',
  69. 'total' => 0,
  70. '制单数' => 0
  71. ];
  72. foreach ($workOrderList as $workOrder) {
  73. $result['制单数'] += $workOrder['zdtotal'];
  74. for ($i = 1; $i <= 14; $i++) {
  75. $cmKey = 'cm' . $i;
  76. $cmslKey = 'cmsl' . $i;
  77. if (!empty($workOrder[$cmKey])) {
  78. $size = $workOrder[$cmKey];
  79. $qty = (int)($workOrder[$cmslKey] ?? 0);
  80. $sizeList[] = $size;
  81. if (!isset($result[$size])) {
  82. $result[$size] = 0;
  83. }
  84. $result[$size] += $qty;
  85. }
  86. }
  87. }
  88. $sizeList = array_unique($sizeList);
  89. sort($sizeList);
  90. // 获取设备产量数据
  91. $list = \db('设备_产量计酬')
  92. ->where($isSubOrder ? ['子订单编号' => $orderNo] : ['订单编号' => $orderNo])
  93. ->where('mod_rq', null)
  94. ->select();
  95. $processes = ['裁剪', '车缝', '手工', '大烫', '总检', '包装'];
  96. $data['data'] = [];
  97. $data['data'][] = $result;
  98. foreach ($processes as $process) {
  99. $processData = array_fill_keys($sizeList, 0);
  100. foreach ($list as $item) {
  101. if ($item['工序名称'] === $process && in_array($item['尺码'], $sizeList)) {
  102. $qty = ($process === '裁剪' || $process === '车缝') ? $item['数量'] : $item['s_num'];
  103. $processData[$item['尺码']] += $qty;
  104. }
  105. }
  106. $processData['total'] = array_sum($processData);
  107. $processData['工序名称'] = $process;
  108. $data['data'][] = $processData;
  109. }
  110. // 计算百分比
  111. foreach ($data['data'] as &$val) {
  112. if ($val['工序名称'] === '制单') {
  113. $val['scale'] = '';
  114. } else {
  115. $val['scale'] = $result['制单数'] > 0
  116. ? number_format(($val['total'] / $result['制单数']) * 100, 2) . '%'
  117. : '0%';
  118. }
  119. }
  120. $data['arr'] = $sizeList;
  121. if ($isSubOrder) {
  122. // 查询的是子订单,直接取第一条完整数据
  123. $data['workOrderData'] = $workOrderList[0];
  124. } else {
  125. // 查询的是订单编号,保留第一条数据但去掉 "子订单编号"
  126. $workOrderData = $workOrderList[0];
  127. unset($workOrderData['子订单编号']); // 去掉子订单编号
  128. $data['workOrderData'] = $workOrderData;
  129. }
  130. $this->success('成功', $data);
  131. }
  132. /**
  133. * 码包号接口
  134. * @return void
  135. */
  136. public function Mabaolist()
  137. {
  138. if ($this->request->isGet() === false){
  139. $this->error('参数错误');
  140. }
  141. $param = $this->request->param();
  142. if (empty($param)){
  143. $this->error('参数错误');
  144. }
  145. if (!isset($param['process']) || $param['process'] === '') {
  146. $param['process'] = '车缝';
  147. }
  148. //码包号
  149. $chefeng = \db('设备_产量计酬')
  150. ->where('子订单编号',$param['order'])
  151. ->where('工序名称','车缝')
  152. ->column('serial');
  153. //查询工序码包号
  154. $complete = \db('设备_产量计酬')
  155. ->where('子订单编号',$param['order'])
  156. ->where('工序名称',$param['process'])
  157. ->where('mod_rq',null)
  158. ->column('serial');
  159. //查询删除码包号
  160. $delete = \db('设备_产量计酬')
  161. ->where('子订单编号',$param['order'])
  162. ->where('工序名称','车缝')
  163. ->whereNotNull('mod_rq')
  164. ->column('serial');
  165. //总检码包号
  166. $zong = \db('设备_产量计酬')
  167. ->where('子订单编号',$param['order'])
  168. ->where('工序名称','总检')
  169. ->where('mod_rq',null)
  170. ->column('serial');
  171. $delete = array_unique($delete);
  172. $combinedZong = array_unique(array_merge($chefeng, $zong));
  173. $combinedZong = array_values($combinedZong); // 重新索引
  174. $data['zong'] = $combinedZong;
  175. $data['chefeng'] = $chefeng;
  176. $data['complete'] = $complete;
  177. $data['delete'] = $delete;
  178. $this->success('成功',$data);
  179. }
  180. }