|
|
@@ -342,121 +342,125 @@ class Product extends Api
|
|
|
* @params string to_pro
|
|
|
* @params int is_copy_gy
|
|
|
*/
|
|
|
- public function copyProductGy(){
|
|
|
- if (Request::instance()->isPost() == false){
|
|
|
+ public function copyProductGy()
|
|
|
+ {
|
|
|
+ $request = Request::instance();
|
|
|
+ if (!$request->isPost()) {
|
|
|
$this->error('非法请求');
|
|
|
}
|
|
|
- $params = Request::instance()->post();
|
|
|
- if (empty($params['from_code']) || empty($params['to_code']) ){
|
|
|
+
|
|
|
+ $params = $request->post();
|
|
|
+ if (empty($params['from_code']) || empty($params['to_code'])) {
|
|
|
$this->error('参数不能为空');
|
|
|
}
|
|
|
- if ($params['is_copy_gy'] == 1){
|
|
|
- if (empty($params['to_pro'])){
|
|
|
- $this->error('工艺方案不能为空');
|
|
|
- }
|
|
|
- //查出参考的工艺数据
|
|
|
- $where['Gy0_cpdh'] = $params['from_code'];
|
|
|
- $where['Gy0_方案'] = $params['from_pro'];
|
|
|
- $gyList = db('产品_工艺资料')->where($where)->select();
|
|
|
- if (empty($gyList)){
|
|
|
- $this->error('参考产品无工艺资料数据');
|
|
|
- }
|
|
|
- $UniqID = db('产品_工艺资料')->order('UniqID desc')->value('UniqID');
|
|
|
- foreach ($gyList as $key=>$value){
|
|
|
- unset($gyList[$key]['UniqID']);
|
|
|
- $UniqID ++;
|
|
|
- $gyList[$key]['Gy0_方案'] = $params['to_pro'];
|
|
|
- $gyList[$key]['Gy0_cpdh'] = $params['to_code'];
|
|
|
- $gyList[$key]['UniqID'] = $UniqID;
|
|
|
+
|
|
|
+ // 定义数据处理策略
|
|
|
+ $strategies = [
|
|
|
+ 'gy' => [
|
|
|
+ 'flag' => 'is_copy_gy',
|
|
|
+ 'table' => '产品_工艺资料',
|
|
|
+ 'source_field' => 'Gy0_cpdh',
|
|
|
+ 'uniq_field' => 'UniqID',
|
|
|
+ 'extra_check' => function () use ($params) {
|
|
|
+ if (empty($params['to_pro'])) {
|
|
|
+ $this->error('工艺方案不能为空');
|
|
|
+ }
|
|
|
+ },
|
|
|
+ 'data_mapper' => function ($item, $seq) use ($params) {
|
|
|
+ return [
|
|
|
+ 'Gy0_方案' => $params['to_pro'],
|
|
|
+ 'Gy0_cpdh' => $params['to_code'],
|
|
|
+ 'UniqID' => $seq
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ 'yj' => [
|
|
|
+ 'flag' => 'is_copy_yj',
|
|
|
+ 'table' => '产品_印件资料',
|
|
|
+ 'source_field' => 'yj_cpdh',
|
|
|
+ 'uniq_field' => 'UniqId',
|
|
|
+ 'data_mapper' => function ($item, $seq) use ($params) {
|
|
|
+ return [
|
|
|
+ 'yj_cpdh' => $params['to_code'],
|
|
|
+ 'UniqId' => $seq
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ 'yb' => [
|
|
|
+ 'flag' => 'is_copy_yb',
|
|
|
+ 'table' => '产品_印版资料',
|
|
|
+ 'source_field' => 'YB_Cpdh',
|
|
|
+ 'uniq_field' => 'UniqID',
|
|
|
+ 'data_mapper' => function ($item, $seq) use ($params) {
|
|
|
+ return [
|
|
|
+ 'YB_Cpdh' => $params['to_code'],
|
|
|
+ 'UniqID' => $seq
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ ];
|
|
|
+
|
|
|
+ $processed = false;
|
|
|
+ foreach ($strategies as $key => $strategy) {
|
|
|
+ if (($params[$strategy['flag']] ?? 0) != 1) continue;
|
|
|
+
|
|
|
+ $processed = true;
|
|
|
+ if (isset($strategy['extra_check'])) {
|
|
|
+ call_user_func($strategy['extra_check']);
|
|
|
}
|
|
|
- }
|
|
|
- if ($params['is_copy_yj'] == 1){
|
|
|
- //查出参考的印件资料
|
|
|
- $yjList = db('产品_印件资料')->where('yj_cpdh',$params['from_code'])->select();
|
|
|
- if (empty($yjList)){
|
|
|
- $this->error('参考产品无印件资料数据');
|
|
|
+
|
|
|
+ // 构建查询条件
|
|
|
+ $query = db($strategy['table'])->where($strategy['source_field'], $params['from_code']);
|
|
|
+ if ($key === 'gy') {
|
|
|
+ $query->where('Gy0_方案', $params['from_pro']);
|
|
|
}
|
|
|
- $Uniqid = db('产品_印件资料')->order('UniqId desc')->value('UniqId');
|
|
|
- foreach ($yjList as $key=>$value){
|
|
|
- unset($yjList[$key]['UniqId']);
|
|
|
- $Uniqid ++;
|
|
|
- $yjList[$key]['yj_cpdh'] = $params['to_code'];
|
|
|
- $yjList[$key]['UniqId'] = $Uniqid;
|
|
|
+
|
|
|
+ $data = $query->select();
|
|
|
+ if (empty($data)) {
|
|
|
+ $this->error("参考产品无{$strategy['table']}数据");
|
|
|
}
|
|
|
- }
|
|
|
- if ($params['is_copy_yb'] == 1){
|
|
|
- $UniqId = db('产品_印版资料')->order('UniqID desc')->value('UniqID');
|
|
|
- $option['YB_Cpdh'] = $params['from_code'];
|
|
|
- $ybList = db('产品_印版资料')->where($option)->select();
|
|
|
- if (empty($ybList)){
|
|
|
- $this->error('参考产品无印版资料数据');
|
|
|
+
|
|
|
+ // 生成序列号
|
|
|
+ $maxId = db($strategy['table'])
|
|
|
+ ->order("{$strategy['uniq_field']} desc")
|
|
|
+ ->value($strategy['uniq_field']) ?: 0;
|
|
|
+
|
|
|
+ // 处理数据
|
|
|
+ $processedData = [];
|
|
|
+ $currentSeq = 1;
|
|
|
+ foreach ($data as $item) {
|
|
|
+ unset($item[$strategy['uniq_field']]);
|
|
|
+ $mapped = array_merge(
|
|
|
+ $item,
|
|
|
+ call_user_func($strategy['data_mapper'], $item, $maxId + $currentSeq)
|
|
|
+ );
|
|
|
+ $processedData[] = $mapped;
|
|
|
+ $currentSeq++;
|
|
|
}
|
|
|
- foreach ($ybList as $key=>$value){
|
|
|
- unset($ybList[$key]['UniqID']);
|
|
|
- $UniqId++;
|
|
|
- $ybList[$key]['YB_Cpdh'] = $params['to_code'];
|
|
|
- $ybList[$key]['UniqID'] = $UniqId;
|
|
|
+
|
|
|
+ // 事务处理
|
|
|
+ db()->startTrans();
|
|
|
+ try {
|
|
|
+ db($strategy['table'])
|
|
|
+ ->where($strategy['source_field'], $params['to_code'])
|
|
|
+ ->delete();
|
|
|
+
|
|
|
+ if (!db($strategy['table'])->insertAll($processedData)) {
|
|
|
+ throw new \Exception("Insert failed");
|
|
|
+ }
|
|
|
+
|
|
|
+ db()->commit();
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ db()->rollback();
|
|
|
+ $this->error("复制{$strategy['table']}数据失败: " . $e->getMessage());
|
|
|
}
|
|
|
}
|
|
|
- if ($params['is_copy_gy'] == 1 && $params['is_copy_yb'] == 1 && $params['is_copy_yj'] == 1){
|
|
|
- $gyResult = db('产品_工艺资料')->insertAll($gyList);
|
|
|
- if (!$gyResult){
|
|
|
- $this->error('复制产品工艺资料数据失败');
|
|
|
- }
|
|
|
- $yjResult = \db('产品_印件资料')->insertAll($yjList);
|
|
|
- if (!$yjResult){
|
|
|
- $this->error('复制产品印件资料数据失败');
|
|
|
- }
|
|
|
- $ybResult = db('产品_印版资料')->insertAll($ybList);
|
|
|
- if (!$ybResult){
|
|
|
- $this->error('复制产品印版资料数据失败');
|
|
|
- }
|
|
|
- }elseif ($params['is_copy_gy'] == 1 && $params['is_copy_yb'] == 1 && $params['is_copy_yj'] == 0){
|
|
|
- $gyResult = db('产品_工艺资料')->insertAll($gyList);
|
|
|
- if (!$gyResult){
|
|
|
- $this->error('复制产品工艺资料数据失败');
|
|
|
- }
|
|
|
- $ybResult = db('产品_印版资料')->insertAll($ybList);
|
|
|
- if (!$ybResult){
|
|
|
- $this->error('复制产品印版资料数据失败');
|
|
|
- }
|
|
|
- }elseif ($params['is_copy_gy'] == 1 && $params['is_copy_yb'] == 0 && $params['is_copy_yj'] == 1){
|
|
|
- $gyResult = db('产品_工艺资料')->insertAll($gyList);
|
|
|
- if (!$gyResult){
|
|
|
- $this->error('复制产品工艺资料数据失败');
|
|
|
- }
|
|
|
- $yjResult = \db('产品_印件资料')->insertAll($yjList);
|
|
|
- if (!$yjResult){
|
|
|
- $this->error('复制产品印件资料数据失败');
|
|
|
- }
|
|
|
- }elseif ($params['is_copy_gy'] == 1 && $params['is_copy_yb'] == 0 && $params['is_copy_yj'] == 0){
|
|
|
- $gyResult = db('产品_工艺资料')->insertAll($gyList);
|
|
|
- if (!$gyResult){
|
|
|
- $this->error('复制产品工艺资料数据失败');
|
|
|
- }
|
|
|
- }elseif ($params['is_copy_gy'] == 0 && $params['is_copy_yb'] == 1 && $params['is_copy_yj'] == 1){
|
|
|
- $yjResult = \db('产品_印件资料')->insertAll($yjList);
|
|
|
- if (!$yjResult){
|
|
|
- $this->error('复制产品印件资料数据失败');
|
|
|
- }
|
|
|
- $ybResult = db('产品_印版资料')->insertAll($ybList);
|
|
|
- if (!$ybResult){
|
|
|
- $this->error('复制产品印版资料数据失败');
|
|
|
- }
|
|
|
- }elseif ($params['is_copy_gy'] == 0 && $params['is_copy_yb'] == 1 && $params['is_copy_yj'] == 0){
|
|
|
- $ybResult = db('产品_印版资料')->insertAll($ybList);
|
|
|
- if (!$ybResult){
|
|
|
- $this->error('复制产品印版资料数据失败');
|
|
|
- }
|
|
|
- }elseif ($params['is_copy_gy'] == 0 && $params['is_copy_yb'] == 0 && $params['is_copy_yj'] == 1) {
|
|
|
- $yjResult = \db('产品_印件资料')->insertAll($yjList);
|
|
|
- if (!$yjResult) {
|
|
|
- $this->error('复制产品印件资料数据失败');
|
|
|
- }
|
|
|
- }else{
|
|
|
- $this->success('工艺、印版至少选中一个');
|
|
|
+
|
|
|
+ if (!$processed) {
|
|
|
+ $this->error('请至少选择一个复制项目');
|
|
|
}
|
|
|
- $this->success('工艺复制成功');
|
|
|
+
|
|
|
+ $this->success('数据复制成功');
|
|
|
}
|
|
|
/**
|
|
|
* 工艺方案更名
|