RelatedSalaryAccounting.php 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use \think\Request;
  5. use \think\Db;
  6. /**
  7. * 关联工资核算接口
  8. */
  9. class RelatedSalaryAccounting extends Api
  10. {
  11. protected $noNeedLogin = ['*'];
  12. protected $noNeedRight = ['*'];
  13. /**
  14. * 首页
  15. *
  16. */
  17. public function index()
  18. {
  19. $this->success('请求成功');
  20. }
  21. /**
  22. * 关联工资核算侧边栏
  23. * @ApiMethod (GET)
  24. */
  25. public function getTab()
  26. {
  27. //get请求
  28. if(!$this->request->isGet()){
  29. $this->error('请求方式错误');
  30. }
  31. // $rows = db()->table('绩效工资汇总')
  32. // ->whereTime('sczl_rq', '>=', strtotime('-25 months'))
  33. // ->group('sys_ny')
  34. // ->order('sys_ny desc')
  35. // ->limit(25)
  36. // ->column('sys_ny');
  37. $rows = db('db_大废品')
  38. ->cache(true,86400)
  39. ->whereTime('sys_rq', '>=', strtotime('-25 months'))
  40. ->group("DATE_FORMAT(`sys_rq`, '%Y%m')")
  41. ->order('sys_rq desc')
  42. ->limit(25)
  43. ->column("DATE_FORMAT(`sys_rq`, '%Y%m')");
  44. foreach($rows as $k=>$v){
  45. $datas[$k]['label']=$v;
  46. $datas[$k]['children']=[
  47. ['label'=>'胶印车间','rq'=>$v],
  48. ['label'=>'凹印车间','rq'=>$v],
  49. ['label'=>'丝印车间','rq'=>$v],
  50. ['label'=>'模切车间','rq'=>$v],
  51. ['label'=>'检验车间','rq'=>$v]];
  52. }
  53. $this->success('成功',$datas);
  54. }
  55. /**
  56. * 关联工资核算上侧列表
  57. * @ApiMethod (GET)
  58. * @param string $date 年月
  59. * @param string $department 部门
  60. */
  61. public function getList()
  62. {
  63. //get请求
  64. if(!$this->request->isGet()){
  65. $this->error('请求方式错误');
  66. }
  67. $req = $this->request->param();
  68. $year = substr($req['date'],0,4);
  69. $month = substr($req['date'],-2);
  70. $start_time = $year . '-' . $month . '-01 00:00:00';
  71. $end_time = date('Y-m-t', strtotime("$year-$month-01")) . ' 23:59:59';
  72. $gz = db('人事_关联工资设置')->alias('r')->cache(true,3600)
  73. ->join('绩效工资汇总 j', 'r.被关联员工 = j.bh AND r.日期 = j.sczl_rq')
  74. ->join('人事_基本资料 n', 'n.员工编号 = r.关联员工')
  75. ->field('r.关联员工, j.bh, sum(j.个人计件工资) as 个人计件工资, sum(j.个人加班工资) as 个人加班工资,
  76. sum(j.装版工时,j.保养工时,j.打样工时) as 定额补差, DATE_FORMAT(j.sczl_rq,"%Y.%m.%d") as 日期')
  77. ->where('r.日期', 'between', [$start_time, $end_time])
  78. ->where('n.所在部门', 'like', $req['department'] . '%')
  79. ->group('LEFT(j.sczl_rq, 10), j.bh')
  80. ->select();
  81. $data = [];
  82. foreach($gz as $v){
  83. if (!isset($data[$v['关联员工']][$v['日期']])) {
  84. $data[$v['关联员工']][$v['日期']] = [
  85. '个人计件工资' => 0,
  86. '个人加班工资' => 0,
  87. '定额补差' => 0
  88. ];
  89. }
  90. $data[$v['关联员工']][$v['日期']]['个人计件工资'] += (float) $v['个人计件工资'];
  91. $data[$v['关联员工']][$v['日期']]['个人加班工资'] += (float) $v['个人加班工资'];
  92. $data[$v['关联员工']][$v['日期']]['定额补差'] += (float) $v['定额补差'];
  93. }
  94. $res=db('人事_关联工资设置')
  95. ->cache(true,86400)
  96. ->join('人事_基本资料','人事_基本资料.员工编号=人事_关联工资设置.关联员工','LEFT')
  97. ->field('关联员工 as 员工编号,rtrim(人事_基本资料.员工姓名) as 员工姓名,rtrim(人事_基本资料.职称职务) as 职称职务,
  98. rtrim(人事_基本资料.所在部门) as 所在部门,DATE_FORMAT(日期,"%Y.%m.%d") as 日期,关联系数,count(被关联员工) as 关联人数')
  99. ->group('LEFT(日期, 10),关联员工')
  100. ->where(['日期'=>['between',"$start_time,$end_time"],'人事_基本资料.所在部门'=>['like',$req['department'].'%']])
  101. ->order('关联员工,日期')
  102. ->select();
  103. foreach($res as &$v){
  104. if(isset($data[$v['员工编号']][$v['日期']])){
  105. $v['关联计件工资'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['个人计件工资']/$v['关联人数']*$v['关联系数'],2));
  106. $v['关联加班工资'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['个人加班工资']/$v['关联人数']*$v['关联系数'],2));
  107. $v['关联定额补差'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['定额补差']/$v['关联人数']*$v['关联系数'],2));
  108. $v['关联计时工资'] = floatval(number_format($data[$v['员工编号']][$v['日期']]['定额补差']/$v['关联人数']*$v['关联系数']*9.5,2));
  109. $v['关联工资合计'] = floatval(number_format(
  110. ($data[$v['员工编号']][$v['日期']]['个人计件工资'] +
  111. $data[$v['员工编号']][$v['日期']]['个人加班工资'] +
  112. $data[$v['员工编号']][$v['日期']]['定额补差'] +
  113. $data[$v['员工编号']][$v['日期']]['定额补差']*9.5
  114. )/$v['关联人数']*$v['关联系数'],2));
  115. }else{
  116. $v['关联计件工资'] = '';
  117. $v['关联加班工资'] = '';
  118. $v['关联定额补差'] = '';
  119. $v['关联计时工资'] = '';
  120. $v['关联工资合计'] = '';
  121. }
  122. }
  123. if(!$res){
  124. $this->error('失败');
  125. }
  126. $this->success('成功',$res);
  127. }
  128. /**
  129. * 关联工资核算下侧列表
  130. * @ApiMethod (GET)
  131. * @param string $date 年月
  132. * @param string $code 员工编号
  133. */
  134. public function getAllList()
  135. {
  136. //get请求
  137. if(!$this->request->isGet()){
  138. $this->error('请求方式错误');
  139. }
  140. $req = $this->request->param();
  141. $year=substr($req['date'],0,4);
  142. $month=substr($req['date'],-2);
  143. if($month==12){
  144. $start_time=$year.'-12-01 00:00:00';
  145. $end_time=($year+1).'-01-01 00:00:00';
  146. }else{
  147. $start_time=$year.'-'.$month.'-01 00:00:00';
  148. $end_time=$year.'-'.($month+1).'-01 00:00:00';
  149. }
  150. $gz=db('绩效工资汇总')
  151. ->cache(true,86400)
  152. ->field('bh,rtrim(xm) as 姓名,sum(个人计件工资) as 个人计件工资,sum(个人加班工资) as 个人加班工资,
  153. (sum(装版工时) + sum(保养工时) + sum(打样工时)) as 定额补差, DATE_FORMAT(sczl_rq,"%Y.%m.%d") as sczl_rq')
  154. ->group('LEFT(sczl_rq, 10),bh')
  155. ->where(['sys_ny'=>$req['date']])
  156. ->select();
  157. foreach($gz as $v){
  158. $data[$v['bh']][$v['sczl_rq']]=$v;
  159. }
  160. $res=db('人事_关联工资设置')->cache(true,86400)
  161. ->join('人事_基本资料','人事_基本资料.员工编号=人事_关联工资设置.关联员工','LEFT')
  162. ->field('DATE_FORMAT(日期,"%Y.%m.%d") as 日期,关联员工 as 员工编号,rtrim(人事_基本资料.员工姓名) as 员工姓名,
  163. rtrim(人事_基本资料.职称职务) as 职称职务,rtrim(人事_基本资料.所在部门) as 所在部门,被关联员工,权重')
  164. ->group('LEFT(日期, 10),被关联员工')
  165. ->where(['日期'=>['between',"$start_time,$end_time"],'关联员工'=>$req['code']])
  166. ->order('关联员工,日期')
  167. ->select();
  168. if(!$res){
  169. $this->error('失败');
  170. }
  171. foreach($res as &$v){
  172. if(isset($data[$v['被关联员工']][$v['日期']])){
  173. $v['被关联姓名']=$data[$v['被关联员工']][$v['日期']]['姓名'];
  174. $v['计件工资']=$data[$v['被关联员工']][$v['日期']]['个人计件工资'];
  175. $v['加班工资']=$data[$v['被关联员工']][$v['日期']]['个人加班工资'];
  176. $v['定额补差']=$data[$v['被关联员工']][$v['日期']]['定额补差'];
  177. $v['计时工资']=floatval(number_format($data[$v['被关联员工']][$v['日期']]['定额补差']*9.5,2));
  178. }else{
  179. $v['被关联姓名']='';
  180. $v['计件工资']='';
  181. $v['加班工资']='';
  182. $v['定额补差']='';
  183. $v['计时工资']='';
  184. }
  185. }
  186. $this->success('成功',$res);
  187. }
  188. /**
  189. * 关联工资核算详情
  190. * @ApiMethod (GET)
  191. * @param string $date 日期
  192. * @param string $code 员工编号
  193. */
  194. public function getDetail()
  195. {
  196. //get请求
  197. if(!$this->request->isGet()){
  198. $this->error('请求方式错误');
  199. }
  200. $req = $this->request->param();
  201. $start_time=$req['date'].' 00:00:00';
  202. $end_time=$req['date'].' 23:59:59';
  203. $gz=db('绩效工资汇总')
  204. ->cache(true,86400)
  205. ->field('bh,rtrim(xm) as 姓名,sum(个人计件工资) as 个人计件工资,sum(个人加班工资) as 个人加班工资,
  206. DATE_FORMAT(sczl_rq,"%Y.%m.%d") as sczl_rq')
  207. ->group('LEFT(sczl_rq, 10),bh')
  208. ->where(['sczl_rq'=>$start_time])
  209. ->select();
  210. foreach($gz as $v){
  211. $data[$v['bh']][$v['sczl_rq']]=$v;
  212. }
  213. $res=db('人事_关联工资设置')->cache(true,86400)
  214. ->join('人事_基本资料','人事_基本资料.员工编号=人事_关联工资设置.关联员工','LEFT')
  215. ->field('DATE_FORMAT(日期,"%Y.%m.%d") as 日期,关联员工 as 员工编号,rtrim(人事_基本资料.员工姓名) as 员工姓名,
  216. rtrim(人事_基本资料.职称职务) as 职称职务,人事_基本资料.所在部门,被关联员工,权重')
  217. ->group('LEFT(日期, 10),被关联员工')
  218. ->where(['日期'=>['between',"$start_time,$end_time"],'关联员工'=>$req['code']])
  219. ->order('关联员工,日期')
  220. ->select();
  221. if(!$res){
  222. $this->error('失败');
  223. }
  224. foreach($res as &$v){
  225. if(isset($data[$v['被关联员工']][$v['日期']])){
  226. $v['被关联姓名']=$data[$v['被关联员工']][$v['日期']]['姓名'];
  227. $v['个人计件工资']=$data[$v['被关联员工']][$v['日期']]['个人计件工资'];
  228. $v['个人加班工资']=$data[$v['被关联员工']][$v['日期']]['个人加班工资'];
  229. }else{
  230. $v['个人计件工资']='';
  231. $v['个人加班工资']='';
  232. }
  233. }
  234. $this->success('成功',$res);
  235. }
  236. /**
  237. * 定位
  238. * @ApiMethod GET
  239. */
  240. public function search(){
  241. //get请求
  242. if(!$this->request->isGet()){
  243. $this->error('请求方式错误');
  244. }
  245. $req = $this->request->param();
  246. $year=substr($req['date'],0,4);
  247. $month=substr($req['date'],-2);
  248. if($month==12){
  249. $start_time=$year.'-12-01 00:00:00';
  250. $end_time=($year+1).'-01-01 00:00:00';
  251. }else{
  252. $start_time=$year.'-'.$month.'-01 00:00:00';
  253. $end_time=$year.'-'.($month+1).'-01 00:00:00';
  254. }
  255. $gd = db()->table('工单_基本资料')->where('Gd_cpmc',$req['search'])->value('Gd_gdbh');
  256. if($gd){
  257. $req['search']=$gd;
  258. }
  259. $gz=db('绩效工资汇总')
  260. ->cache(true,86400)
  261. ->field('bh,rtrim(xm) as 姓名,sum(个人计件工资) as 个人计件工资,sum(个人加班工资) as 个人加班工资,
  262. DATE_FORMAT(sczl_rq,"%Y.%m.%d") as sczl_rq')
  263. ->group('LEFT(sczl_rq, 10),bh')
  264. ->where(['sys_ny'=>$req['date']])
  265. ->select();
  266. foreach($gz as $v){
  267. $data[$v['bh']][$v['sczl_rq']]=$v;
  268. }
  269. $res=db('人事_关联工资设置')->cache(true,86400)
  270. ->join('人事_基本资料','人事_基本资料.员工编号=人事_关联工资设置.关联员工','LEFT')
  271. ->field('关联员工 as 员工编号,rtrim(人事_基本资料.员工姓名) as 员工姓名,rtrim(人事_基本资料.职称职务) as 职称职务,
  272. 人事_基本资料.所在部门,DATE_FORMAT(日期,"%Y.%m.%d") as 日期,关联系数,count(被关联员工) as 关联人数')
  273. ->group('LEFT(日期, 10),关联员工')
  274. ->where(['日期'=>['between',"$start_time,$end_time"],'关联员工'=>$req['search']])
  275. ->order('关联员工,日期')
  276. ->select();
  277. foreach($res as &$v){
  278. if(isset($data[$v['员工编号']][$v['日期']])){
  279. $v['个人计件工资']=$data[$v['员工编号']][$v['日期']]['个人计件工资'];
  280. $v['个人加班工资']=$data[$v['员工编号']][$v['日期']]['个人加班工资'];
  281. }else{
  282. $v['个人计件工资']='';
  283. $v['个人加班工资']='';
  284. }
  285. }
  286. if(!$res){
  287. $this->error('失败');
  288. }
  289. $this->success('成功',$res);
  290. }
  291. /**
  292. * 关联工资设置
  293. * @ApiMethod (GET)
  294. * @param string $date 日期
  295. * @param string $code 员工编号
  296. */
  297. public function setting()
  298. {
  299. //get请求
  300. if(!$this->request->isGet()){
  301. $this->error('请求方式错误');
  302. }
  303. $req = $this->request->param();
  304. $req['date']=str_replace('.','-',$req['date']);
  305. $start_time=$req['date'].' 00:00:00';
  306. $end_time=$req['date'].' 23:59:59';
  307. $gz=db('绩效工资汇总')
  308. ->cache(true,86400)
  309. ->field('bh,rtrim(xm) as 姓名,sum(个人计件工资) as 个人计件工资,sum(个人加班工资) as 个人加班工资,
  310. DATE_FORMAT(sczl_rq,"%Y.%m.%d") as sczl_rq')
  311. ->group('LEFT(sczl_rq, 10),bh')
  312. ->where(['sczl_rq'=>$start_time])
  313. ->select();
  314. foreach($gz as $v){
  315. $data[$v['bh']][$v['sczl_rq']]=$v;
  316. }
  317. $res=db('人事_关联工资设置')
  318. ->cache(true,86400)
  319. ->join('人事_基本资料','人事_基本资料.员工编号=人事_关联工资设置.关联员工','LEFT')
  320. ->field('DATE_FORMAT(日期,"%Y.%m.%d") as 日期,关联员工 as 关联人员工号,rtrim(人事_基本资料.员工姓名) as 关联人员姓名,
  321. 被关联员工 as 班组员工编号,权重 as 组员权重,关联系数 as 日关联系数,人事_关联工资设置.UniqID')
  322. ->group('被关联员工')
  323. ->where(['日期'=>['between',"$start_time,$end_time"],'关联员工'=>$req['code']])
  324. ->order('关联员工,日期')
  325. ->select();
  326. if(!$res){
  327. $this->error('失败');
  328. }
  329. foreach($res as &$v){
  330. if(isset($data[$v['班组员工编号']][$v['日期']])){
  331. $bh=$v['班组员工编号'];
  332. $rq=$v['日期'];
  333. $v['班组员工编号']=$bh.'('.$data[$bh][$rq]['姓名'].')';
  334. $v['计件工资基数']=$data[$bh][$rq]['个人计件工资'];
  335. $v['加班工资基数']=$data[$bh][$rq]['个人加班工资'];
  336. $v['日关联人数']=count($res);
  337. }else{
  338. $v['个人计件工资']='';
  339. $v['个人加班工资']='';
  340. }
  341. }
  342. $this->success('成功',$res);
  343. }
  344. /**
  345. * 更新关联系数
  346. * @ApiMethod (GET)
  347. * @param string $date 日期
  348. * @param string $code 员工编号
  349. */
  350. public function updateNum()
  351. {
  352. //get请求
  353. if(!$this->request->isGet()){
  354. $this->error('请求方式错误');
  355. }
  356. $req = $this->request->param();
  357. $req['date']=str_replace('.','-',$req['date']);
  358. $start_time=$req['date'].' 00:00:00';
  359. // $sql=db()->table('人事_关联工资设置')
  360. // ->where(['日期'=>$start_time,'关联员工'=>$req['code']])
  361. // ->fetchSql(true)
  362. // ->setField('关联系数',$req['num']);
  363. // Db::query($sql);
  364. $data['mod_rq'] = date('Y-m-d H:i:s');
  365. $data['关联系数']=$req['num'];
  366. //开启事务
  367. db()->startTrans();
  368. try{
  369. $sql=db()->table('人事_关联工资设置')
  370. ->where(['日期'=>$start_time,'关联员工'=>$req['code']])
  371. ->fetchSql(true)
  372. // ->cache(true,86400)
  373. ->update($data);
  374. $res=Db::query($sql);
  375. // 提交事务
  376. db()->commit();
  377. } catch (\Exception $e) {
  378. // 回滚事务
  379. db()->rollback();
  380. $this->error($e->getMessage());
  381. }
  382. if($res===false) $this->error('失败');
  383. $this->success('成功');
  384. }
  385. /**
  386. * 关联组员权重查询
  387. * @ApiMethod (GET)
  388. * @param string $date 日期
  389. * @param string $code 员工编号
  390. */
  391. public function weightDetail()
  392. {
  393. //get请求
  394. if(!$this->request->isGet()){
  395. $this->error('请求方式错误');
  396. }
  397. $req = $this->request->param();
  398. $req['date']=str_replace('.','-',$req['date']);
  399. $start_time=$req['date'].' 00:00:00';
  400. $end_time=$req['date'].' 23:59:59';
  401. $res=db('人事_基本资料')
  402. ->cache(true,86400)
  403. ->join('人事_关联工资设置','人事_基本资料.员工编号=人事_关联工资设置.被关联员工','LEFT')
  404. ->join('人事_员工照片','人事_基本资料.照片ID=人事_员工照片.UniqId','LEFT')
  405. ->field('人事_关联工资设置.被关联员工 as 员工编号,rtrim(员工姓名) as 姓名,rtrim(所在部门) as 部门名称,人事_基本资料.职称职务 as 职务,
  406. DATE_FORMAT(聘用日期,"%Y.%m.%d") as 入职日期,权重 as 关联权重')
  407. ->group('被关联员工')
  408. ->where(['人事_关联工资设置.日期'=>['between',"$start_time,$end_time"],'人事_关联工资设置.被关联员工'=>$req['code']])
  409. ->order('关联员工,日期')
  410. ->select();
  411. if(!$res){
  412. $this->error('失败');
  413. }
  414. $this->success('成功',$res);
  415. }
  416. /**
  417. * 批量附加组员列表
  418. * @ApiMethod (GET)
  419. * @param string $date 日期
  420. * @param string $code 员工编号
  421. */
  422. public function batchAddLst()
  423. {
  424. //get请求
  425. if(!$this->request->isGet()){
  426. $this->error('请求方式错误');
  427. }
  428. $req = $this->request->param();
  429. $req['date']=str_replace('.','-',$req['date']);
  430. $start_time=$req['date'].' 00:00:00';
  431. $end_time=$req['date'].' 23:59:59';
  432. $gz=db('绩效工资汇总')
  433. ->cache(true,86400)
  434. ->field('bh,rtrim(xm) as 姓名,sum(个人计件工资) as 个人计件工资,sum(个人加班工资) as 个人加班工资,
  435. DATE_FORMAT(sczl_rq,"%Y.%m.%d") as sczl_rq,sczl_bzdh')
  436. ->group('LEFT(sczl_rq, 10),bh')
  437. ->where(['sczl_rq'=>$start_time])
  438. ->select();
  439. foreach($gz as $v){
  440. $data[$v['bh']][$v['sczl_rq']]=$v;
  441. }
  442. $res=db('人事_关联工资设置')
  443. ->cache(true,86400)
  444. ->join('人事_基本资料','人事_基本资料.员工编号=人事_关联工资设置.被关联员工','LEFT')
  445. ->field('DATE_FORMAT(日期,"%Y.%m.%d") as 日期,人事_基本资料.所在部门,人事_基本资料.职称职务,被关联员工 as 班组员工编号,人事_关联工资设置.UniqID')
  446. // ->group('被关联员工')
  447. ->where(['日期'=>['between',"$start_time,$end_time"],'关联员工'=>['NEQ',$req['code']]])
  448. ->order('人事_基本资料.所在部门')
  449. ->select();
  450. if(!$res){
  451. $this->error('失败');
  452. }
  453. foreach($res as &$v){
  454. if(isset($data[$v['班组员工编号']][$v['日期']])){
  455. $bh=$v['班组员工编号'];
  456. $rq=$v['日期'];
  457. $v['班组员工编号']=$bh.'('.$data[$bh][$rq]['姓名'].')';
  458. $v['班组']=$data[$bh][$rq]['sczl_bzdh'];
  459. $v['计件工资基数']=$data[$bh][$rq]['个人计件工资'];
  460. $v['加班工资基数']=$data[$bh][$rq]['个人加班工资'];
  461. }else{
  462. $v['计件工资基数']='删除';
  463. $v['加班工资基数']='';
  464. }
  465. }
  466. foreach($res as $k=>$v){
  467. if($v['计件工资基数']=='删除'){
  468. unset($res[$k]);
  469. }
  470. }
  471. array_multisort($res);
  472. $this->success('成功',$res);
  473. }
  474. /**
  475. * 批量附加组员定位
  476. * @ApiMethod (GET)
  477. * @param string $date 日期
  478. * @param string $search 员工编号
  479. */
  480. public function batchAddSearch()
  481. {
  482. //get请求
  483. if(!$this->request->isGet()){
  484. $this->error('请求方式错误');
  485. }
  486. $req = $this->request->param();
  487. $req['date']=str_replace('.','-',$req['date']);
  488. $start_time=$req['date'].' 00:00:00';
  489. $end_time=$req['date'].' 23:59:59';
  490. $gd = db()->table('工单_基本资料')->where('Gd_cpmc',$req['search'])->value('Gd_gdbh');
  491. if($gd){
  492. $req['search']=$gd;
  493. }
  494. $gz=db('绩效工资汇总')
  495. ->cache(true,86400)
  496. ->field('bh,rtrim(xm) as 姓名,sum(个人计件工资) as 个人计件工资,sum(个人加班工资) as 个人加班工资,
  497. DATE_FORMAT(sczl_rq,"%Y.%m.%d") as sczl_rq,sczl_bzdh')
  498. ->group('LEFT(sczl_rq, 10),bh')
  499. ->where(['sczl_rq'=>$start_time])
  500. ->select();
  501. foreach($gz as $v){
  502. $data[$v['bh']][$v['sczl_rq']]=$v;
  503. }
  504. $res=db('人事_关联工资设置')
  505. ->cache(true,86400)
  506. ->join('人事_基本资料','人事_基本资料.员工编号=人事_关联工资设置.被关联员工','LEFT')
  507. ->field('DATE_FORMAT(日期,"%Y.%m.%d") as 日期,人事_基本资料.所在部门,人事_基本资料.职称职务,被关联员工 as 班组员工编号,人事_关联工资设置.UniqID')
  508. // ->group('被关联员工')
  509. ->where(['日期'=>['between',"$start_time,$end_time"],'被关联员工'=>['EQ',$req['search']]])
  510. ->order('人事_基本资料.所在部门')
  511. ->select();
  512. if(!$res){
  513. $this->error('失败');
  514. }
  515. foreach($res as &$v){
  516. if(isset($data[$v['班组员工编号']][$v['日期']])){
  517. $bh=$v['班组员工编号'];
  518. $rq=$v['日期'];
  519. $v['班组员工编号']=$bh.'('.$data[$bh][$rq]['姓名'].')';
  520. $v['班组']=$data[$bh][$rq]['sczl_bzdh'];
  521. $v['计件工资基数']=$data[$bh][$rq]['个人计件工资'];
  522. $v['加班工资基数']=$data[$bh][$rq]['个人加班工资'];
  523. }else{
  524. $v['计件工资基数']='删除';
  525. $v['加班工资基数']='';
  526. }
  527. }
  528. foreach($res as $k=>$v){
  529. if($v['计件工资基数']=='删除'){
  530. unset($res[$k]);
  531. }
  532. }
  533. $this->success('成功',$res);
  534. }
  535. /**
  536. * 关联组员复制列表
  537. * @ApiMethod (GET)
  538. * @param string $date 日期
  539. */
  540. public function copyLst()
  541. {
  542. //get请求
  543. if(!$this->request->isGet()){
  544. $this->error('请求方式错误');
  545. }
  546. $req = $this->request->param();
  547. $req['date']=str_replace('.','-',$req['date']);
  548. $start_time=$req['date'].' 00:00:00';
  549. $end_time=$req['date'].' 23:59:59';
  550. $res=db('人事_关联工资设置')
  551. ->cache(true,86400)
  552. ->join('人事_基本资料','人事_基本资料.员工编号=人事_关联工资设置.关联员工','LEFT')
  553. ->field('关联员工 as 员工编号,人事_基本资料.员工姓名,人事_基本资料.所在部门,人事_基本资料.职称职务,人事_关联工资设置.UniqID')
  554. ->group('关联员工')
  555. ->where(['日期'=>['between',"$start_time,$end_time"]])
  556. // ->order('人事_关联工资设置.关联员工')
  557. ->select();
  558. if(!$res){
  559. $this->error('失败');
  560. }
  561. $this->success('成功',$res);
  562. }
  563. /**
  564. * 批量附加组员
  565. * @ApiMethod POST
  566. * @params string UniqID
  567. */
  568. public function batchAdd(){
  569. if (Request::instance()->isPost() == false){
  570. $this->error('非法请求');
  571. }
  572. $params = Request::instance()->post();
  573. if (!isset($params) || !isset($params[0]['UniqID'])){
  574. $this->error('参数不能为空');
  575. }
  576. //开启事务
  577. db()->startTrans();
  578. try{
  579. foreach($params as $k=>$v){
  580. $v['mod_rq']=date('Y-m-d H:i:s');
  581. $sql=db()->table('人事_关联工资设置')
  582. ->where(['UniqID'=>$v['UniqID']])
  583. ->fetchSql(true)
  584. ->update($v);
  585. $res=Db::query($sql);
  586. }
  587. // 提交事务
  588. db()->commit();
  589. } catch (\Exception $e) {
  590. // 回滚事务
  591. db()->rollback();
  592. $this->error($e->getMessage());
  593. }
  594. if($res===false) $this->error('失败');
  595. $this->success('成功');
  596. }
  597. /**
  598. * 批量删除组员
  599. * @ApiMethod POST
  600. * @params string UniqID
  601. */
  602. public function batchDel(){
  603. if (Request::instance()->isPost() == false){
  604. $this->error('非法请求');
  605. }
  606. $params = Request::instance()->post();
  607. if (!isset($params) || !isset($params[0]['UniqID'])){
  608. $this->error('参数不能为空');
  609. }
  610. //开启事务
  611. db()->startTrans();
  612. try{
  613. foreach($params as $k=>$v){
  614. $v['mod_rq']=date('Y-m-d H:i:s');
  615. $v['关联员工']='';
  616. $sql=db()->table('人事_关联工资设置')
  617. ->where(['UniqID'=>$v['UniqID']])
  618. ->fetchSql(true)
  619. ->update($v);
  620. $res=Db::query($sql);
  621. }
  622. // 提交事务
  623. db()->commit();
  624. } catch (\Exception $e) {
  625. // 回滚事务
  626. db()->rollback();
  627. $this->error($e->getMessage());
  628. }
  629. if($res===false) $this->error('失败');
  630. $this->success('成功');
  631. }
  632. /**
  633. * 关联组员复制
  634. * @ApiMethod POST
  635. * @params string UniqID
  636. */
  637. public function copy(){
  638. if (Request::instance()->isPost() == false){
  639. $this->error('非法请求');
  640. }
  641. $params = Request::instance()->post();
  642. if (!isset($params) || !isset($params[0])){
  643. $this->error('参数不能为空');
  644. }
  645. //开启事务
  646. db()->startTrans();
  647. try{
  648. foreach($params as $v){
  649. $v['old_time']=str_replace('.','-',$v['old_time']).' 00:00:00';
  650. $v['new_time']=str_replace('.','-',$v['new_time']).' 00:00:00';
  651. db()->table('人事_关联工资设置')
  652. ->where(['关联员工'=>$v['关联员工'],'日期'=>$v['new_time']])
  653. ->delete();
  654. $data=Db::table('人事_关联工资设置')
  655. ->field('日期,关联员工,关联系数,被关联员工,权重,sys_id')
  656. ->where(['关联员工'=>$v['关联员工'],'日期'=>$v['old_time']])
  657. ->select();
  658. $id=Db::table('人事_关联工资设置')->order('UniqID desc')->limit(1)->value('UniqID');
  659. $i=1;
  660. foreach($data as &$value){
  661. $value['日期']=$v['new_time'];
  662. $value['UniqID']=$i+$id;
  663. $value['sys_rq']=date('Y-m-d H:i:s');
  664. $i++;
  665. }
  666. $sql=db()->table('人事_关联工资设置')
  667. ->fetchSql(true)
  668. ->insertAll($data);
  669. $res=Db::query($sql);
  670. }
  671. // 提交事务
  672. db()->commit();
  673. } catch (\Exception $e) {
  674. // 回滚事务
  675. db()->rollback();
  676. $this->error($e->getMessage());
  677. }
  678. if($res===false) $this->error('失败');
  679. $this->success('成功');
  680. }
  681. }