SubWorkorderStatus.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  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. // 验证请求类型是否为 GET
  36. if ($this->request->isGet() === false) {
  37. $this->error('请求错误');
  38. }
  39. // 获取请求参数并验证
  40. $param = $this->request->param();
  41. if (empty($param)) {
  42. $this->error('参数错误');
  43. }
  44. // 提取子订单编号的前12位作为色系ID
  45. $colour_id = substr($param['order'], 0, 12);
  46. // 获取订单尺码信息
  47. $where['Mod_rq'] = null;
  48. $xhdata = \db('工单_印件资料')
  49. ->where('子订单编号', $param['order'])
  50. ->where($where)
  51. ->field('cm1,cm2,cm3,cm4,cm5,cm6,cm7,cm8,cm9,cm10')
  52. ->select();
  53. // 收集cm1到cm10的非空值并排序
  54. $arr = [];
  55. foreach ($xhdata as $value) {
  56. for ($i = 1; $i <= 10; $i++) {
  57. $cmValue = $value['cm' . $i] ?? null;
  58. if (!empty($cmValue)) {
  59. $arr[] = $cmValue;
  60. }
  61. }
  62. }
  63. $arr = array_unique($arr); // 去重
  64. sort($arr); // 排序
  65. // 获取工单详细资料
  66. $workOrderData = \db('工单_印件资料')
  67. ->alias('a')
  68. ->join('工单_基本资料 b', 'a.订单编号 = b.订单编号')
  69. ->where('a.子订单编号', $param['order'])
  70. ->where('a.Mod_rq', null)
  71. ->field('a.订单编号,a.子订单编号,a.款号,b.款式,b.客户编号,a.zdtotal,
  72. cm1,cm2,cm3,cm4,cm5,cm6,cm7,cm8,cm9,cm10,
  73. cmsl1,cmsl2,cmsl3,cmsl4,cmsl5,cmsl6,cmsl7,cmsl8,cmsl9,cmsl10')
  74. ->find();
  75. // 初始化制单数据
  76. $result = [
  77. '工序名称' => '制单',
  78. 'total' => ' ',
  79. '制单数' => $workOrderData['zdtotal'] ?? 0
  80. ];
  81. // 处理cm1到cm10和对应的cmsl1到cmsl10数据
  82. for ($i = 1; $i <= 10; $i++) {
  83. $cmKey = 'cm' . $i;
  84. $cmslKey = 'cmsl' . $i;
  85. if (!empty($workOrderData[$cmKey])) {
  86. $result[$workOrderData[$cmKey]] = (int)($workOrderData[$cmslKey] ?? 0);
  87. }
  88. }
  89. // 定义工序名称
  90. $processes = ['裁剪', '车缝', '手工', '大烫', '总检', '包装'];
  91. // 获取设备产量数据
  92. $list = \db('设备_产量计酬')
  93. ->where('子订单编号', 'like', $colour_id . '%')
  94. ->where('mod_rq', null)
  95. ->select();
  96. $data['data'] = [];
  97. array_unshift($data['data'], $result); // 将制单数据放在第一个位置
  98. // 获取色系的制单总数
  99. // $total = \db('工单_印件资料')
  100. // ->where('子订单编号', 'like', $colour_id . '%')
  101. // ->column('sum(zdtotal)');
  102. // 处理各工序数据
  103. foreach ($processes as $process) {
  104. $res = array_fill_keys($arr, 0); // 初始化每个尺码为0
  105. foreach ($list as $value) {
  106. if ($value['工序名称'] === $process) {
  107. $quantity = ($process === '裁剪' || $process === '车缝')
  108. ? $value['数量']
  109. : $value['s_num'];
  110. // 更新对应尺码的数据
  111. if (array_key_exists($value['尺码'], $res)) {
  112. $res[$value['尺码']] += $quantity;
  113. }
  114. }
  115. }
  116. // 计算总量并设置工序信息
  117. $res['total'] = array_sum($res);
  118. $res['工序名称'] = $process;
  119. // $res['制单数'] = $total[0];
  120. $data['data'][] = $res;
  121. }
  122. // 计算完成百分比
  123. foreach ($data['data'] as $key => $value) {
  124. // 如果工序名称是“制单”,则直接将 scale 设置为空
  125. if ($value['工序名称'] === '制单') {
  126. $data['data'][$key]['scale'] = '';
  127. continue; // 跳过当前循环
  128. }
  129. // 其他工序正常计算百分比
  130. $data['data'][$key]['scale'] = $workOrderData['zdtotal'] > 0
  131. ? number_format(($value['total'] / $workOrderData['zdtotal']) * 100, 2) . '%'
  132. : '0%';
  133. }
  134. // 输出整理后的数据
  135. $data['arr'] = $arr;
  136. $data['workOrderData'] = $workOrderData;
  137. $this->success('成功', $data);
  138. }
  139. /**
  140. * 码包号接口
  141. * @return void
  142. */
  143. public function Mabaolist()
  144. {
  145. if ($this->request->isGet() === false){
  146. $this->error('参数错误');
  147. }
  148. $param = $this->request->param();
  149. if (empty($param)){
  150. $this->error('参数错误');
  151. }
  152. if($param['process'] === ''){
  153. $param['process'] = '车缝';
  154. }
  155. //车缝码包号
  156. $chefeng = \db('设备_产量计酬')
  157. // ->where('子订单编号','like',substr($param['order'],0,12).'%')
  158. ->where('子订单编号',$param['order'])
  159. ->where('工序名称','车缝')
  160. ->column('serial');
  161. //查询工序码包号
  162. $complete = \db('设备_产量计酬')
  163. // ->where('子订单编号','like',substr($param['order'],0,12).'%')
  164. ->where('子订单编号',$param['order'])
  165. ->where('工序名称',$param['process'])
  166. ->where('mod_rq',null)
  167. ->column('serial');
  168. //查询删除码包号
  169. $delete = \db('设备_产量计酬')
  170. // ->where('子订单编号','like',substr($param['order'],0,12).'%')
  171. ->where('子订单编号',$param['order'])
  172. ->where('工序名称','车缝')
  173. ->whereNotNull('mod_rq')
  174. ->column('serial');
  175. $delete = array_unique($delete);
  176. $data['chefeng'] = $chefeng;
  177. $data['complete'] = $complete;
  178. $data['delete'] = $delete;
  179. $this->success('成功',$data);
  180. }
  181. }