getUserByPer('crm', 'leads', 'teamsave'); break; case 'crm_customer' : $data_name = 'customer_id'; $authIds = $userModel->getUserByPer('crm', 'customer', 'teamsave'); break; case 'crm_contacts' : $data_name = 'contacts_id'; $authIds = $userModel->getUserByPer('crm', 'contacts', 'teamsave'); break; case 'crm_business' : $data_name = 'business_id'; $authIds = $userModel->getUserByPer('crm', 'business', 'teamsave'); break; case 'crm_contract' : $data_name = 'contract_id'; $authIds = $userModel->getUserByPer('crm', 'contract', 'teamsave'); break; case 'crm_receivables' : $data_name = 'receivables_id'; $authIds = $userModel->getUserByPer('crm', 'receivables', 'teamsave'); break; } if (!is_array($types_id) && $types_id) { $types_id = [$types_id]; } $errorMessage = []; foreach ($types_id as $k => $v) { if ($types == 'crm_receivables') { $resData = db($types)->where([$data_name => $v])->field('number as name,owner_user_id,rw_user_id,ro_user_id')->find(); } else { $resData = db($types)->where([$data_name => $v])->field('name,owner_user_id,rw_user_id,ro_user_id')->find(); } if (!in_array($resData['owner_user_id'], $authIds) && $resData['owner_user_id'] && $is_module !== 1) { $errorMessage[] = $resData['name'] . '处理团队操作失败,错误原因:无权限'; continue; } $type = $type ?: 1; $data = []; //读写 $old_rw_user_id = stringToArray($resData['rw_user_id']) ?: []; //去重 //只读 $old_ro_user_id = stringToArray($resData['ro_user_id']) ?: []; //去重 if ($is_del == 1) { $all_rw_user_id = $old_rw_user_id ? array_diff($old_rw_user_id, $user_id) : ''; // 差集 $data['rw_user_id'] = $all_rw_user_id ? arrayToString($all_rw_user_id) : ''; //去空 $all_ro_user_id = $old_ro_user_id ? array_diff($old_ro_user_id, $user_id) : ''; // 差集 $data['ro_user_id'] = $all_ro_user_id ? arrayToString($all_ro_user_id) : ''; //去空 } elseif ($is_del == 2) { if ($type == 2) { $all_ro_user_id = $old_ro_user_id ? array_diff($old_ro_user_id, $user_id) : []; // 差集 $all_rw_user_id = $old_rw_user_id ? array_merge($old_rw_user_id, $user_id) : $user_id; // 合并 } else { $all_rw_user_id = $old_rw_user_id ? array_diff($old_rw_user_id, $user_id) : []; // 差集 $all_ro_user_id = $old_ro_user_id ? array_merge($old_ro_user_id, $user_id) : $user_id; // 合并 } $data['rw_user_id'] = $all_rw_user_id ? arrayToString($all_rw_user_id) : ''; //去空 $data['ro_user_id'] = $all_ro_user_id ? arrayToString($all_ro_user_id) : ''; //去空 } else { $del_ro_user_id = []; //需要删除的只读 $del_rw_user_id = []; //需要删除的读写 foreach ($user_id as $key => $val) { if (in_array($val, $old_ro_user_id) && !in_array($val, $old_rw_user_id) && $type == 2) { $del_ro_user_id[] = $val; } if (in_array($val, $old_rw_user_id) && !in_array($val, $old_ro_user_id) && $type == 1) { $del_rw_user_id[] = $val; } } if ($type == 2) { $all_rw_user_id = $old_rw_user_id ? array_diff(array_merge($old_rw_user_id, $user_id), $del_rw_user_id) : $user_id; // 合并 $all_ro_user_id = $old_ro_user_id ? array_diff($old_ro_user_id, $del_ro_user_id) : $user_id; // 合并 $data['rw_user_id'] = $all_rw_user_id ? arrayToString($all_rw_user_id) : ''; //去空 if ($del_ro_user_id) { $data['ro_user_id'] = $all_ro_user_id ? arrayToString($all_ro_user_id) : ''; //去空 } } else { $all_rw_user_id = $old_rw_user_id ? array_diff($old_rw_user_id, $del_rw_user_id) : $user_id; // 合并 $all_ro_user_id = $old_ro_user_id ? array_diff(array_merge($old_ro_user_id, $user_id), $del_ro_user_id) : $user_id; // 合并 $data['ro_user_id'] = $all_ro_user_id ? arrayToString($all_ro_user_id) : ''; //去空 if ($del_rw_user_id) { $data['rw_user_id'] = $all_rw_user_id ? arrayToString($all_rw_user_id) : ''; //去空 } } } $res = !empty($param['user_id']) ?$param['user_id'] :[]; $types_data = ['crm_leads' => 6, 'crm_customer' => 1, 'crm_contacts' => 2, 'crm_business' => 3, 'crm_contract' => 4, 'crm_receivables' => 5]; $target_time = $param['target_time']; $request = []; foreach ($res as $val) { $request['team_user_id'] = $val; $request['target_time'] = $target_time; $request['auth'] = $type; $request['target_id'] = $v; $dataInfo = db('crm_team')->where(['target_id' => $v, 'types' => $types_data[$types],'team_user_id'=>$val])->find(); if ($dataInfo) { $res = db('crm_team')->where(['target_id' => $v, 'types' => $types_data[$types],'team_user_id'=>$val])->update($request); } else { $request['types'] = $types_data[$types]; $res = db('crm_team')->insert($request); } } $upData = db($types)->where([$data_name => $v])->update($data); if (!$upData && !$res) { $errorMessage[] = $resData['name'] . '处理团队操作失败'; } } return $errorMessage ?: 1; } //根据时间段获取所包含的年份 function getYearByTime($start_time, $end_time) { $yearArr = []; $monthArr = monthList($start_time, $end_time); foreach ($monthArr as $v) { $yearArr[date('Y', $v)] = date('Y', $v); } return $yearArr; } //根据时间段获取所包含的月份 function getmonthByTime($start_time, $end_time) { $monthList = []; $monthArr = monthList($start_time, $end_time); foreach ($monthArr as $v) { $monthList[date('Y', $v)][] = date('m', $v); } return $monthList; } function encrypt($data, $key) { header('Content-type:text/html;charset=utf-8'); $key = md5($key); $x = 0; $len = mb_strlen($data); $l = mb_strlen($key); for ($i = 0; $i < $len; $i++) { if ($x == $l) { $x = 0; } $char .= $key{$x}; $x++; } for ($i = 0; $i < $len; $i++) { $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256); } return base64_encode($str); } /** * [对加密的数据进行解密] * @E-mial wuliqiang_aa@163.com * @TIME 2017-04-07 * @WEB http://blog.iinu.com.cn * @param [数据] $data [已经进行加密的数据] * @param [密钥] $key [解密的唯一方法] */ function decrypt($data, $key = '72-crm') { header('Content-type:text/html;charset=utf-8'); $key = md5($key); $x = 0; $data = base64_decode($data); $len = mb_strlen($data); $l = mb_strlen($key); for ($i = 0; $i < $len; $i++) { if ($x == $l) { $x = 0; } $char .= mb_substr($key, $x, 1); $x++; } for ($i = 0; $i < $len; $i++) { if (ord(mb_substr($data, $i, 1)) < ord(mb_substr($char, $i, 1))) { $str .= chr((ord(mb_substr($data, $i, 1)) + 256) - ord(mb_substr($char, $i, 1))); } else { $str .= chr(ord(mb_substr($data, $i, 1)) - ord(mb_substr($char, $i, 1))); } } return $str; } function getFieldData($list,$types,$user_id){ $fieldModel = new \app\admin\model\Field(); $indexField = $fieldModel->getIndexField($types, $user_id, 1) ? : array('name'); // 列表展示字段 $userField = $fieldModel->getFieldByFormType($types, 'user'); // 人员类型 $structureField = $fieldModel->getFieldByFormType($types, 'structure'); // 部门类型 $datetimeField = $fieldModel->getFieldByFormType($types, 'datetime'); // 日期时间类型 $booleanField = $fieldModel->getFieldByFormType($types, 'boolean_value'); // 布尔值类型字段 $dateIntervalField = $fieldModel->getFieldByFormType($types, 'date_interval'); // 日期区间类型字段 $positionField = $fieldModel->getFieldByFormType($types, 'position'); // 地址类型字段 $handwritingField = $fieldModel->getFieldByFormType($types, 'handwriting_sign'); // 手写签名类型字段 $locationField = $fieldModel->getFieldByFormType($types, 'location'); // 定位类型字段 $boxField = $fieldModel->getFieldByFormType($types, 'checkbox'); // 多选类型字段 $floatField = $fieldModel->getFieldByFormType($types, 'floatnumber'); // 货币类型字段 $db_id=substr($types,strripos($types,"_")+1).'_id';; $extraData = []; $business_id_list = !empty($list) ? array_column($list, $db_id) : []; $extraList = db($types.'_data')->whereIn($db_id, $business_id_list)->select(); foreach ($extraList AS $key => $value) { $extraData[$value[$db_id]][$value['field']] = $value['content']; } $grantData = getFieldGrantData($user_id); foreach ($grantData[$types] as $key => $value) { foreach ($value as $ke => $va) { if($va['maskType']!=0){ $fieldGrant[$ke]['maskType'] = $va['maskType']; $fieldGrant[$ke]['form_type'] = $va['form_type']; $fieldGrant[$ke]['field'] = $va['field']; } } } foreach ($list AS $k => $v) { # 用户类型字段 foreach ($userField as $key => $val) { if (in_array($val, $indexField)) { $usernameField = !empty($v[$val]) ? db('admin_user')->whereIn('id', stringToArray($v[$val]))->column('realname') : []; $list[$k][$val] = implode($usernameField, ','); } } # 部门类型字段 foreach ($structureField as $key => $val) { if (in_array($val, $indexField)) { $structureNameField = !empty($v[$val]) ? db('admin_structure')->whereIn('id', stringToArray($v[$val]))->column('name') : []; $list[$k][$val] = implode($structureNameField, ','); } } # 日期时间类型字段 foreach ($datetimeField as $key => $val) { $list[$k][$val] = !empty($v[$val]) ? date('Y-m-d H:i:s', $v[$val]) : null; } // 布尔值类型字段 foreach ($booleanField as $key => $val) { $list[$k][$val] = !empty($v[$val]) ? (string)$v[$val] : '0'; } // 处理日期区间类型字段的格式 foreach ($dateIntervalField as $key => $val) { $list[$k][$val] = !empty($extraData[$v['customer_id']][$val]) ? json_decode($extraData[$v['customer_id']][$val], true) : null; } // 处理地址类型字段的格式 foreach ($positionField as $key => $val) { $list[$k][$val] = !empty($extraData[$v['customer_id']][$val]) ? json_decode($extraData[$v['customer_id']][$val], true) : null; } // 手写签名类型字段 foreach ($handwritingField as $key => $val) { $handwritingData = !empty($v[$val]) ? db('admin_file')->where('file_id', $v[$val])->value('file_path') : null; $list[$k][$val] = ['url' => !empty($handwritingData) ? getFullPath($handwritingData) : null]; } // 定位类型字段 foreach ($locationField as $key => $val) { $list[$k][$val] = !empty($extraData[$v['customer_id']][$val]) ? json_decode($extraData[$v['customer_id']][$val], true) : null; } // 多选框类型字段 foreach ($boxField as $key => $val) { $list[$k][$val] = !empty($v[$val]) ? trim($v[$val], ',') : null; } // 货币类型字段 foreach ($floatField as $key => $val) { $list[$k][$val] = $v[$val] != '0.00' ? (string)$v[$val] : null; } //掩码相关类型字段 foreach ($fieldGrant AS $key => $val){ //掩码相关类型字段 if ($val['maskType']!=0 && $val['form_type'] == 'mobile') { $pattern = "/(1[3458]{1}[0-9])[0-9]{4}([0-9]{4})/i"; $rs = preg_replace($pattern, "$1****$2", $v[$val['field']]); $list[$k][$val['field']] = !empty($v[$val['field']]) ? (string)$rs : null; } elseif ($val['maskType']!=0 && $val['form_type'] == 'email') { $email_array = explode("@", $v[$val['field']]); $prevfix = (strlen($email_array[0]) < 4) ? "" : substr($v[$val['field']], 0, 2); //邮箱前缀 $str = preg_replace('/([\d\w+_-]{0,100})@/', "***@", $v[$val['field']], -1, $count); $rs = $prevfix . $str; $list[$k][$val['field']] = !empty($v[$val['field']]) ?$rs: null; } elseif ($val['maskType']!=0 && in_array($val['form_type'],['position','floatnumber'])) { $list[$k][$val['field']] = !empty($v[$val['field']]) ? (string)substr_replace($v[$val['field']], '*****',0,strlen($v[$val['field']])) : null; } } } return $list; }