|
|
@@ -818,17 +818,17 @@ class CostAccounting extends Api
|
|
|
->select();
|
|
|
$data = [];
|
|
|
foreach ($list as $k => $v) {
|
|
|
- $data[] = [
|
|
|
- 'Sys_ny' => $param['month'],
|
|
|
- '部门名称' => $v['使用部门'],
|
|
|
- '费用类型' => '直接',
|
|
|
- '设备编号' => $v['sczl_jtbh'],
|
|
|
- '科目名称' => $v['设备名称'],
|
|
|
- '耗电量' => $v['通电工时'],
|
|
|
- '单位电价' => 0.69,
|
|
|
- 'Sys_id' => $param['sys_id'],
|
|
|
- 'Sys_rq' => date('Y-m-d H:i:s', time()),
|
|
|
- ];
|
|
|
+ $data[] = [
|
|
|
+ 'Sys_ny' => $param['month'],
|
|
|
+ '部门名称' => $v['使用部门'],
|
|
|
+ '费用类型' => '直接',
|
|
|
+ '设备编号' => $v['sczl_jtbh'],
|
|
|
+ '科目名称' => $v['设备名称'],
|
|
|
+ '耗电量' => $v['通电工时'],
|
|
|
+ '单位电价' => 0.69,
|
|
|
+ 'Sys_id' => $param['sys_id'],
|
|
|
+ 'Sys_rq' => date('Y-m-d H:i:s', time()),
|
|
|
+ ];
|
|
|
}
|
|
|
$sql = db('成本_各月水电气')->fetchSql(true)->insertAll($data);
|
|
|
$res = db()->query($sql);
|
|
|
@@ -994,6 +994,8 @@ class CostAccounting extends Api
|
|
|
if ($this->request->isGet() === false) {
|
|
|
$this->error('请求错误');
|
|
|
}
|
|
|
+
|
|
|
+ // 获取客户列表
|
|
|
$list = db('成本v23_完工工单车间成本汇总')
|
|
|
->alias('a')
|
|
|
->join('工单_基本资料 b', 'a.工单编号 = b.Gd_gdbh')
|
|
|
@@ -1008,16 +1010,97 @@ class CostAccounting extends Api
|
|
|
->group('客户编号, 客户名称')
|
|
|
->order('客户编号')
|
|
|
->select();
|
|
|
+
|
|
|
if (empty($list)) {
|
|
|
$this->error('未找到完工数据');
|
|
|
}
|
|
|
+
|
|
|
$data = [];
|
|
|
foreach ($list as $k => $v) {
|
|
|
- $data[] = $v['客户编号'] .'-->'.$v['客户名称'];
|
|
|
+ $data[] = $v['客户编号'] . '-->' . $v['客户名称'];
|
|
|
}
|
|
|
- $this->success('成功', $data);
|
|
|
+
|
|
|
+ // 树形日期结构(年月日)
|
|
|
+ $dateList = db('成本v23_完工工单车间成本汇总')
|
|
|
+ ->alias('a')
|
|
|
+ ->join('工单_基本资料 b', 'a.工单编号 = b.Gd_gdbh')
|
|
|
+ ->join('产品_基本资料 c', 'b.成品代号 = c.产品编号')
|
|
|
+ ->where('b.成品代号', '<>', '')
|
|
|
+ ->where('c.客户编号', '<>', '')
|
|
|
+ ->where('c.客户名称', '<>', '')
|
|
|
+ ->field('DISTINCT DATE_FORMAT(a.Sys_rq, \'%Y-%m-%d\') AS Sys_rq')
|
|
|
+ ->order('a.Sys_rq DESC')
|
|
|
+ ->select();
|
|
|
+
|
|
|
+ $tree = [];
|
|
|
+ foreach ($dateList as $val) {
|
|
|
+ $rq = $val['Sys_rq'];
|
|
|
+ $year = date('Y', strtotime($rq));
|
|
|
+ $month = date('Y-m', strtotime($rq));
|
|
|
+ $day = $rq;
|
|
|
+
|
|
|
+ // 年
|
|
|
+ if (!isset($tree[$year])) {
|
|
|
+ $tree[$year] = [
|
|
|
+ 'year' => $year,
|
|
|
+ 'children' => []
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 月
|
|
|
+ if (!isset($tree[$year]['children'][$month])) {
|
|
|
+ $tree[$year]['children'][$month] = [
|
|
|
+ 'month' => $month,
|
|
|
+ 'children' => []
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 日
|
|
|
+ if (!in_array($day, $tree[$year]['children'][$month]['children'])) {
|
|
|
+ $tree[$year]['children'][$month]['children'][] = $day;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 重新索引
|
|
|
+ $tree = array_values($tree);
|
|
|
+ foreach ($tree as &$yearItem) {
|
|
|
+ $yearItem['children'] = array_values($yearItem['children']);
|
|
|
+ }
|
|
|
+ $this->success('成功', [
|
|
|
+ 'data' => $data, // 客户列表
|
|
|
+ 'list' => $tree // 树形日期(年-月-日层级)
|
|
|
+ ]);
|
|
|
}
|
|
|
|
|
|
+// public function GetCompletionWorkOrderCostTab()
|
|
|
+// {
|
|
|
+// if ($this->request->isGet() === false) {
|
|
|
+// $this->error('请求错误');
|
|
|
+// }
|
|
|
+// $list = db('成本v23_完工工单车间成本汇总')
|
|
|
+// ->alias('a')
|
|
|
+// ->join('工单_基本资料 b', 'a.工单编号 = b.Gd_gdbh')
|
|
|
+// ->join('产品_基本资料 c', 'b.成品代号 = c.产品编号')
|
|
|
+// ->where('b.成品代号', '<>', '')
|
|
|
+// ->where('c.客户编号', '<>', '')
|
|
|
+// ->where('c.客户名称', '<>', '')
|
|
|
+// ->field([
|
|
|
+// 'TRIM(c.客户名称) as 客户名称',
|
|
|
+// 'TRIM(c.客户编号) as 客户编号'
|
|
|
+// ])
|
|
|
+// ->group('客户编号, 客户名称')
|
|
|
+// ->order('客户编号')
|
|
|
+// ->select();
|
|
|
+// if (empty($list)) {
|
|
|
+// $this->error('未找到完工数据');
|
|
|
+// }
|
|
|
+// $data = [];
|
|
|
+// foreach ($list as $k => $v) {
|
|
|
+// $data[] = $v['客户编号'] .'-->'.$v['客户名称'];
|
|
|
+// }
|
|
|
+// $this->success('成功', $data);
|
|
|
+// }
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 完工工单成本列表
|
|
|
@@ -1036,30 +1119,35 @@ class CostAccounting extends Api
|
|
|
$this->error('参数错误');
|
|
|
}
|
|
|
|
|
|
-// 参数过滤和安全处理
|
|
|
- $param = array_map(function($value) {
|
|
|
+ // 参数过滤
|
|
|
+ $param = array_map(function ($value) {
|
|
|
return is_string($value) ? trim($value) : $value;
|
|
|
}, $param);
|
|
|
|
|
|
$where = [];
|
|
|
|
|
|
-// 精确查询成品代号
|
|
|
+ //按成品代号查询
|
|
|
if (!empty($param['code'])) {
|
|
|
$code = htmlspecialchars($param['code'], ENT_QUOTES);
|
|
|
$where['b.成品代号'] = ['like', $code . '%'];
|
|
|
}
|
|
|
|
|
|
- // 分页参数处理
|
|
|
+ //按日期 Sys_rq 查询
|
|
|
+ if (!empty($param['Sys_rq'])) {
|
|
|
+ $where['a.sys_rq'] = ['like', $param['Sys_rq'] . '%'];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分页参数
|
|
|
$page = max(1, intval($param['page'] ?? 1));
|
|
|
- $pageSize = max(1, min(100, intval($param['limit'] ?? 30))); // 限制最大100条
|
|
|
+ $pageSize = max(1, min(100, intval($param['limit'] ?? 30)));
|
|
|
|
|
|
- // 搜索条件处理
|
|
|
+ // 搜索
|
|
|
if (!empty($param['search'])) {
|
|
|
$search = htmlspecialchars($param['search'], ENT_QUOTES);
|
|
|
$where['a.工单编号|b.成品名称'] = ['like', $search . '%'];
|
|
|
}
|
|
|
|
|
|
- // 获取总数用于分页(性能优化)
|
|
|
+ // 查询总数
|
|
|
$totalQuery = db('成本v23_完工工单车间成本汇总')
|
|
|
->alias('a')
|
|
|
->join('工单_基本资料 b', 'a.工单编号 = b.Gd_gdbh')
|
|
|
@@ -1067,7 +1155,7 @@ class CostAccounting extends Api
|
|
|
|
|
|
$total = $totalQuery->count();
|
|
|
|
|
|
- // 分页查询数据
|
|
|
+ // 查询列表
|
|
|
$list = [];
|
|
|
if ($total > 0) {
|
|
|
$offset = ($page - 1) * $pageSize;
|
|
|
@@ -1081,20 +1169,90 @@ class CostAccounting extends Api
|
|
|
'TRIM(b.成品名称) as 成品名称',
|
|
|
])
|
|
|
->where($where)
|
|
|
- ->order('a.工单编号 DESC') // 添加排序,避免分页混乱
|
|
|
+ ->order('a.工单编号 DESC')
|
|
|
->limit($offset, $pageSize)
|
|
|
->select();
|
|
|
}
|
|
|
if (empty($list)) {
|
|
|
$this->error('未找到完工成本数据');
|
|
|
}
|
|
|
- $data = [
|
|
|
+ $data = [
|
|
|
'total' => $total,
|
|
|
'list' => $list,
|
|
|
];
|
|
|
$this->success('成功', $data);
|
|
|
}
|
|
|
|
|
|
+// public function CompletionWorkOrderCostList()
|
|
|
+// {
|
|
|
+// if ($this->request->isGet() === false) {
|
|
|
+// $this->error('请求错误');
|
|
|
+// }
|
|
|
+// $param = $this->request->param();
|
|
|
+// if (empty($param)) {
|
|
|
+// $this->error('参数错误');
|
|
|
+// }
|
|
|
+//
|
|
|
+//// 参数过滤和安全处理
|
|
|
+// $param = array_map(function($value) {
|
|
|
+// return is_string($value) ? trim($value) : $value;
|
|
|
+// }, $param);
|
|
|
+//
|
|
|
+// $where = [];
|
|
|
+//
|
|
|
+//// 精确查询成品代号
|
|
|
+// if (!empty($param['code'])) {
|
|
|
+// $code = htmlspecialchars($param['code'], ENT_QUOTES);
|
|
|
+// $where['b.成品代号'] = ['like', $code . '%'];
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 分页参数处理
|
|
|
+// $page = max(1, intval($param['page'] ?? 1));
|
|
|
+// $pageSize = max(1, min(100, intval($param['limit'] ?? 30))); // 限制最大100条
|
|
|
+//
|
|
|
+// // 搜索条件处理
|
|
|
+// if (!empty($param['search'])) {
|
|
|
+// $search = htmlspecialchars($param['search'], ENT_QUOTES);
|
|
|
+// $where['a.工单编号|b.成品名称'] = ['like', $search . '%'];
|
|
|
+// }
|
|
|
+//
|
|
|
+// // 获取总数用于分页(性能优化)
|
|
|
+// $totalQuery = db('成本v23_完工工单车间成本汇总')
|
|
|
+// ->alias('a')
|
|
|
+// ->join('工单_基本资料 b', 'a.工单编号 = b.Gd_gdbh')
|
|
|
+// ->where($where);
|
|
|
+//
|
|
|
+// $total = $totalQuery->count();
|
|
|
+//
|
|
|
+// // 分页查询数据
|
|
|
+// $list = [];
|
|
|
+// if ($total > 0) {
|
|
|
+// $offset = ($page - 1) * $pageSize;
|
|
|
+//
|
|
|
+// $list = db('成本v23_完工工单车间成本汇总')
|
|
|
+// ->alias('a')
|
|
|
+// ->join('工单_基本资料 b', 'a.工单编号 = b.Gd_gdbh')
|
|
|
+// ->field([
|
|
|
+// 'a.*',
|
|
|
+// 'TRIM(b.成品代号) as 成品代号',
|
|
|
+// 'TRIM(b.成品名称) as 成品名称',
|
|
|
+// ])
|
|
|
+// ->where($where)
|
|
|
+// ->order('a.工单编号 DESC') // 添加排序,避免分页混乱
|
|
|
+// ->limit($offset, $pageSize)
|
|
|
+// ->select();
|
|
|
+// }
|
|
|
+// if (empty($list)) {
|
|
|
+// $this->error('未找到完工成本数据');
|
|
|
+// }
|
|
|
+// $data = [
|
|
|
+// 'total' => $total,
|
|
|
+// 'list' => $list,
|
|
|
+// ];
|
|
|
+// $this->success('成功', $data);
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* 按工序归结人工费统计表
|
|
|
@@ -1112,6 +1270,8 @@ class CostAccounting extends Api
|
|
|
|
|
|
// 2. 参数获取和验证
|
|
|
$year = $this->request->param('year');
|
|
|
+ $month = $this->request->param('month');
|
|
|
+
|
|
|
if (empty($year)) {
|
|
|
$this->error('缺少必要参数:year');
|
|
|
}
|
|
|
@@ -1123,35 +1283,69 @@ class CostAccounting extends Api
|
|
|
'烫金', '模切', '机检', '手检'
|
|
|
];
|
|
|
|
|
|
- // 4. 批量查询并组装数据
|
|
|
+ // 4. 构建查询条件(使用传统数组方式)
|
|
|
+ if (!empty($month)) {
|
|
|
+ // 传了年份和月份,查询具体月份
|
|
|
+ $dateStr = $year . str_pad($month, 2, '0', STR_PAD_LEFT);
|
|
|
+ $where = "sys_ny = '{$dateStr}'";
|
|
|
+ $queryType = 'month';
|
|
|
+ } else {
|
|
|
+ // 只传了年份,查询整年
|
|
|
+ $where = "sys_ny like '{$year}%'";
|
|
|
+ $queryType = 'year';
|
|
|
+ }
|
|
|
+
|
|
|
+ // 5. 批量查询并组装数据
|
|
|
$result = [];
|
|
|
foreach ($processList as $process) {
|
|
|
// 查询当前工序的数据
|
|
|
- $processData = db('绩效工资汇总')
|
|
|
- ->where('sys_ny', 'like', $year . '%')
|
|
|
- ->where('sczl_type', 'like', '%' . $process . '%')
|
|
|
+ $query = db('绩效工资汇总')
|
|
|
+ ->where($where)
|
|
|
+ ->where("sczl_type like '%{$process}%'")
|
|
|
->field('
|
|
|
SUM(班组车头产量) as 车头产量,
|
|
|
SUM(班组换算产量) as 补产产量,
|
|
|
SUM(个人计件工资) as 计件工资,
|
|
|
SUM(个人加班工资) as 加班工资,
|
|
|
sys_ny as 年月
|
|
|
- ')
|
|
|
- ->group('sys_ny')
|
|
|
- ->select();
|
|
|
+ ');
|
|
|
+
|
|
|
+ // 根据查询粒度决定是否分组
|
|
|
+ if ($queryType == 'year') {
|
|
|
+ // 查询整年数据,按年月分组
|
|
|
+ $processData = $query->group('sys_ny')->select();
|
|
|
+ } else {
|
|
|
+ // 查询具体月份,不需要分组
|
|
|
+ $processData = $query->select();
|
|
|
+ }
|
|
|
|
|
|
// 处理查询结果
|
|
|
if (!empty($processData)) {
|
|
|
foreach ($processData as &$item) {
|
|
|
$item['核算产量'] = $item['车头产量'] + $item['补产产量'];
|
|
|
$item['产量工资合计'] = $item['计件工资'] + $item['加班工资'];
|
|
|
+
|
|
|
+ // 格式化年月显示
|
|
|
+ if (isset($item['年月']) && strlen($item['年月']) == 6) {
|
|
|
+ $item['年份'] = substr($item['年月'], 0, 4);
|
|
|
+ $item['月份'] = substr($item['年月'], 4, 2);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
$result[$process] = $processData;
|
|
|
}
|
|
|
|
|
|
- // 5. 返回结果(开发调试用)
|
|
|
+ // 6. 添加查询参数说明
|
|
|
+ $result['_meta'] = [
|
|
|
+ 'query_type' => $queryType,
|
|
|
+ 'year' => $year,
|
|
|
+ 'month' => $month ?: 'all',
|
|
|
+ 'total_processes' => count($processList)
|
|
|
+ ];
|
|
|
+
|
|
|
+ // 7. 返回结果
|
|
|
$this->success('成功', $result);
|
|
|
}
|
|
|
-}
|
|
|
+
|
|
|
+}
|