This commit is contained in:
2025-09-13 01:22:15 +08:00
parent 155e05fd6d
commit 1a4b8551a0
674 changed files with 146276 additions and 0 deletions

View File

@ -0,0 +1,706 @@
<?php
namespace Application\Controller;
use Application\Common\Com;
use Application\Common\ImageResizeExtends;
use Application\Common\StatusCode;
use Application\Form\CommonModel;
use Application\Service\Extension\Helper\CurlHelper;
use Application\Service\Extension\Helper\FormHelper;
use Application\Service\Extension\Helper\SDMHelper;
use Application\Service\Extension\Helper\StringHelper;
use Application\Service\Extension\Laminas;
use Application\Service\Extension\Uploader\adapter\Oss;
use Application\Service\Extension\Uploader\ImageUploader;
use EasyWeChat\Kernel\Exceptions\HttpException;
use EasyWeChat\Kernel\Exceptions\InvalidArgumentException;
use EasyWeChat\Kernel\Exceptions\InvalidConfigException;
use EasyWeChat\Kernel\Exceptions\RuntimeException;
use Gumlet\ImageResizeException;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\Mvc\MvcEvent;
use Laminas\Stdlib\ArrayUtils;
use Laminas\View\Model\JsonModel;
class CommonController extends AbstractActionController
{
/** @var string 上传附件接口地址 */
public const UPLOAD_URL = '/common/upload';
/** @var string 上传图片接口地址 */
public const UPLOAD_IMG_URL = '/common/uploadImg';
/** @var string 加密参数 */
public const SECRET_KEY = 'yikeen';
/** @var string[] 需要token验证的接口 */
public const AUTH_ACTION = [
'upload', // 上传附件
'showPic', // 图片预览
'signFileUrl', // 下载附件路径签名
];
protected function attachDefaultListeners()
{
$event = $this->getEventManager();
$event->attach(MvcEvent::EVENT_DISPATCH, [$this, 'checkLogin'], 99);
parent::attachDefaultListeners(); // TODO: Change the autogenerated stub
}
/**
* 检查是否登录
* @param MvcEvent $event
*/
function checkLogin(MvcEvent $event)
{
// $host = "{$_SERVER['REQUEST_SCHEME']}://{$this->getRequest()->getHeader('host')->getFieldValue()}/";
if (in_array($event->getRouteMatch()->getParam('action'), self::AUTH_ACTION)) {
if( ( $_COOKIE['thirdAppId'] ?? time() ) != ( $this->LocalService()->config['toolSys']['appId'] ?? '' ) ) {
if( ( $_REQUEST['bucket'] ?? '' ) != 'login_url'){
Laminas::$serviceManager->identity->getIdentityData();
}
}
}
}
public function errormsgAction() {
$code = $this->params()->fromQuery('code');
// $errData = explode('|', Crypt::blockCipher()->decrypt($code));
$errData = explode('|', $code);
echo "<pre>";print_r(file_get_contents(APP_PATH.'/runtime/'.$errData[1].'/'.str_ireplace(':','_', $errData[2]).'_'.$errData[0].'.log'));exit;
}
public function qrcodeAction() {
$filePath = APP_PATH . '/data/qrcode_258.jpg';
ImageResizeExtends::createFromString(file_get_contents($filePath))->output();
die;
}
/**
* 上传附件
* @url http://xxx.com/common/upload
* @return JsonModel
* @throws \League\Flysystem\FilesystemException
* @throws \OSS\Core\OssException
*/
public function uploadAction(): JsonModel
{
$uploader = new ImageUploader();
$config = Laminas::$app->getConfig();
$uploader->setConfig([
'allowExtensions' => ArrayUtils::merge($config['image_uploader']['allowFileExtensions'] ?? [], $config['image_uploader']['allowExtensions'] ?? []),
'maxSize' => $config['image_uploader']['fileMaxSize'],
'driver' => ImageUploader::DRIVER_OSS,
]);
return $this->RenderApiJson()->Success($uploader->save($uploader::getInstanceByName('file')));
}
/**
* 显示图片
* @throws ImageResizeException
*/
public function showPicAction()
{
if($this->request->isPost()){
$imgPath = $this->params()->fromPost('path');
$bucket = $_POST['bucket'] ?: 'yikeen';
$style = $_POST['style'] ?: 'thumb';
//******************正则匹配 path、bucket 和 style 参数 【后端先做兼容,前端后续会拆分传输相应的参数】*****************
preg_match_all('/(?:\?|&)([^&=]+)=([^&]+)/', $imgPath, $matches, PREG_SET_ORDER);
if(!empty($matches)) {
$params = [];
foreach ($matches as $match) {
$key = urldecode($match[1]);
$value = urldecode($match[2]);
if(empty($value)) continue;
$params[$key] = $value;
}
$imgPath = $params['path'];
if(isset($params['bucket'])) $bucket = $params['bucket'];
if(isset($params['style']) && $params['style'] != 'thumb') $style = $params['style'];
}
//******************************************************************************************************
}else{
$imgPath = trim($this->params()->fromQuery("path", ''), '/');
$bucket = $this->params()->fromQuery("bucket", 'yikeen');
$style = $this->params()->fromQuery("style", 'thumb');
}
$bucket = $bucket == 'tmp' || $bucket == 'login_url' ? 'yikeen' : $bucket;
$fileUpLoader = new Oss(Laminas::$app->getConfig()['image_uploader'], $bucket);
// style => ['iphone' => 最不清楚的, 'sample' => 还挺清楚的, 'origin' => 原图, 'thumb' => 高度为100的缩略图]
$imgUrl = $fileUpLoader->getSignUrl($imgPath, $style);
$imgContent = file_get_contents($imgUrl);
if(!$imgContent) {
$imgUrl = $fileUpLoader->getOriginUrl($imgPath);
$imgContent = file_get_contents($imgUrl);
if(!in_array($style, ['origin', 'ocr'])) {
$imgStyleMapWidth = [
'sample' => '1000',
'thumb' => '80',
'iphone' => '400',
];
$imageResizeExtends = ImageResizeExtends::createFromString($imgContent);
// 压缩图片
$imageResizeExtends = $imageResizeExtends->resizeToWidth($imgStyleMapWidth[$style]);
$imageResizeExtends->output();
exit;
}
}
if($_COOKIE['thirdAppId'] ?? '') {
$imageResizeExtends = ImageResizeExtends::createFromString($imgContent);
// 原图显示,检测图片的大小
$imgSize = Com::customFilesize($imgUrl);
if ($imgSize / 1024 / 1024 > 20) {
// 压缩图片
$imageResizeExtends = $imageResizeExtends->resizeToWidth(3000);
}
$imageResizeExtends->outputLength(null, null, get_headers($imgUrl, 1)['Content-Length']);
exit;
}
echo $imgContent;die;
}
/**
* Notes: 在线文件下载
* User: llbjj
* DateTime: 2024/5/31 9:11
*
* @throws \OSS\Core\OssException
* @throws \OSS\Http\RequestCore_Exception
*/
public function downloadAction() {
$filePath = trim($this->params()->fromQuery('path', ''), '/');
$fileName = $this->params()->fromQuery('fileName', '');
$bucket = $this->params()->fromQuery('bucket', 'yikeen');
$fileUpLoader = new Oss(Laminas::$app->getConfig()['image_uploader'], $bucket);
$fileUpLoader->downloadOnline($filePath, $fileName);
}
/**
* @note 文件签名
* @return JsonModel
*/
public function signFileUrlAction(): JsonModel
{
$filePath = $this->params()->fromPost('path');
$bucket = $this->params()->fromPost('bucket', 'yikeen');
$filePath = str_ireplace(Oss::getUploadDomain(), '', $filePath);
$fileUpLoader = new Oss(Laminas::$app->getConfig()['image_uploader'], $bucket);
return $this->RenderApiJson()->Success([
'signUrl' => $fileUpLoader->getSignUrl($filePath),
]);
}
/**
* 上传图片
* @url http://xxx.com/common/uploadImg
* @return JsonModel
* @throws \League\Flysystem\FilesystemException
* @throws \OSS\Core\OssException
*/
public function uploadImgAction(): JsonModel
{
$uploader = new ImageUploader();
$config = Laminas::$app->getConfig();
$uploader->setConfig([
'allowExtensions' => $config['image_uploader']['allowExtensions'],
'maxSize' => $config['image_uploader']['imgMaxSize'],
'driver' => ImageUploader::DRIVER_OSS,
]);
return $this->RenderApiJson()->Success($uploader->save($uploader::getInstanceByName('file')));
}
/**
* 渲染表单组件
* - TableButton (表格按钮)
*/
public function renderFormComponentAction(): JsonModel
{
$componentName = $this->params()->fromPost('component', '');
$item_id = $this->params()->fromPost('item_id',0);//副项目ID
//获取该项目下设置的化验单采集时间类型
$dateType = 1;
if(!empty($item_id)){
$dateType = Laminas::$serviceManager->itemCheckdate->getOneFieldVal('date_type','is_del = 0 and item_id = '.$item_id);
$dateType = empty($dateType) ? 1 : $dateType;
}
$dateType = intval($dateType);
$model = new CommonModel();
$datas = $model->render($componentName,$dateType);
return $this->RenderApiJson()->Success($datas,'',['dateType'=>$dateType]);
}
/**
* 验证公式格式
* @return JsonModel
*/
public function formatExpressionAction(): JsonModel
{
// 表单变量 //计算符号
list($constVar, $condition) = FormHelper::getCalculateConditionWithClass();
$expression = str_replace(' ', '', $_POST['expression']);
// 正则验证
$pregConst = implode('|', $constVar);
preg_match("/^($pregConst)=(.*)/", $expression, $match);
if (!$match || count($match) != 3 && $match[2] == '') {
return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, "语法错误 `a = b + c` 才是正确的格式, 或者你没有定义好的变量当作开头!!");
}
$expressionLen = strlen($expression);
$res = [];
for ($i = 0; $i < $expressionLen; $i++) {
if ($expression[$i] === '(') {
$res[] = $expression[$i];
} elseif ($expression[$i] === ')') {
$res[] = $expression[$i];
} elseif (in_array($expression[$i], $condition)) {
$res[] = $expression[$i];
} else {
$res[] = "$expression[$i]";
}
}
$parseExpression = (implode('', $res));
$exStr = array_filter(explode(' ', $parseExpression));
return $this->RenderApiJson()->Success([
'expression' => implode('', $exStr)
]);
}
/**
* @return JsonModel
*/
public function calculateExpressionAction(): JsonModel
{
// 防止被除数写0, eval报错好像try catch抓不到。
register_shutdown_function(function () {
$err = error_get_last();
if (isset($err['message']) && $err['message'] == 'Division by zero') {
$msg = ['code' => 60011, 'msg' => '请输入正确的数字'];
die(json_encode($msg));
}
});
try {
$formId = $this->params()->fromPost('id');
$expression = $this->LocalService()->itemForm->fetchOne([
'where' => ['id' => $formId]
])['expression'];
if (!$expression) {
return $this->RenderApiJson()->Success([], '该表单暂未设置公式。');
}
$expression = FormHelper::getFormatFormExpression($expression);
$runStr = $runExpression = '';
$constVar = FormHelper::getCalculateConditionWithClass()[0];
foreach ($expression['expression'] as $v) {
if (in_array($v, $constVar)) {
$runStr .= '$' . "$v = " . floatval($this->params()->fromPost($v) ?: 0) . '; ';
$runExpression .= '$' . $v;
} else {
$runExpression .= $v;
}
}
$func = <<<EOL
function run() {
$runStr;
return $runExpression;
}
EOL;
eval($func);
$res = round(run(), 2);
} catch (\Throwable $e) {
$res = -1;
}
return $this->RenderApiJson()->Success([
'res' => $res
]);
}
/**
* 计算公式
* @url: http://xxx.com/common/v2/calculateExpression
* @return JsonModel
*/
public function calculateExpressionV2Action(): JsonModel
{
$values = $this->params()->fromPost();
$expression = Laminas::$serviceManager->itemForm->fetchOne([
'where' => ['id' => $this->params()->fromPost('id')]
])['expression'];
$expressionArr = explode('=', $expression);
unset($expressionArr[0]);
$expression = implode('=', $expressionArr);
$exec = SDMHelper::app()->expression->setExpression($expression)->setValues($values)->execute();
return $this->RenderApiJson()->Success([
'res' => $exec->getExecuteVal(),
'message' => '',
'exStr' => $exec->getExecuteCompile(),
'values' => $values
]);
}
/**
* 获取上一个小程序版本
* @url http://xxx.com/common/miniVersion
* @return JsonModel
* @throws HttpException
* @throws InvalidArgumentException
* @throws InvalidConfigException
* @throws RuntimeException
* @throws \Psr\SimpleCache\InvalidArgumentException
*/
public function miniVersionAction(): JsonModel
{
$platform = $this->getRequest()->getPost('platform');
$refresh = $this->getRequest()->getPost('refresh');
$token = Laminas::$serviceManager->wechat->getMiniApp($platform)->access_token->getToken();
$cacheKey = "applets:" . $platform;
if (($cache = Laminas::$serviceManager->redisExtend->getRedisInstance()->get($cacheKey)) && !$refresh) {
$data = StringHelper::jsonDecode($cache);
return $this->RenderApiJson()->Success([
'last_version' => $data['version_list'][0]['user_version'],
'cached_at' => $data['cached_at']
]);
} else {
$response = CurlHelper::getMiniAppHistoryVersion($token['access_token']);
if (!$response) {
return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, "获取版本数据出错啦!");
}
$data = StringHelper::jsonDecode($response);
if ($data['errcode'] == 0) {
$data['cached_at'] = time();
Laminas::$serviceManager->redisExtend->getRedisInstance()->setex($cacheKey, 60*60*2, json_encode($data)); // 缓存两个小时
return $this->RenderApiJson()->Success([
'last_version' => $data['version_list'][0]['user_version'] ?? 99999, // 取不到给个默认值
'cached_at' => $data['cached_at']
]);
} else {
return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, $data['errmsg']);
}
}
}
/**
* 用于微信公众号和受试者手机号绑定
* @url xxx.com/common/patient-mobile
*/
public function patientMobileAction()
{
$mobile = $this->params()->fromQuery('mobile');
$openid = $this->params()->fromQuery('openid');
$sign = $this->params()->fromQuery('sign');
if ($sign !== md5($mobile . self::SECRET_KEY)) {
return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, 'sign error.');
}
// 不传openid 是查询当前手机号是否属于受试者
if (!$openid) {
if ($query = Laminas::$serviceManager->patient->fetchOne([
'where' => ['patient_tel' => $mobile, 'is_del' => 0]
])) {
if ($query['openid']) {
die('-1'); // 已经绑定用户了
} else {
die('1'); // 找不到手机号
}
}
die('0');
}
Laminas::$serviceManager->patient->isSetInfo(false)->update(['openid' => $openid], ['patient_tel' => $mobile]);
return $this->RenderApiJson()->Success();
}
public function editSendAction() {
$com = new Com();
// $id = $_POST['id'] ?:1;
$item_id = $_POST['item_id'] ?: 0;
$patient_id = $_POST['patient_id'] ?: 0;
$itemsig_id = $_POST['itemsig_id'] ?: 0;
$date = $_POST['date'] ? : 0;
if (empty($item_id) || empty($patient_id)) return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, '参数不正确');
//验证链接
if((strtotime(date('Y-m-d',$date)) != strtotime(date('Y-m-d'))) || empty($date)){
return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, '信息已过期');
}
$whereMess['where'] = [
'is_del' => 0,
'item_id' => $item_id,
];
$whereMess['columns'] = ['item_id','content'];
$itemMessageSendInfos = $this->LocalService()->itemMessageSend->fetchOne($whereMess);
if (empty($itemMessageSendInfos)) return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, '后台推送新增表单还未设置');
// if (empty($itemMessageSendInfos)){
// return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, '信息已过期');
// }
// $current_time = date('G');
// if ($current_time < $itemMessageSendInfos['send_time']){
// return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, '信息已过期');
// }
$fieldId = implode(',',array_column(json_decode($itemMessageSendInfos['content'],true),'id'));
$itemMessageFieldData = $this->LocalService()->itemMessageField->fetchAll(['where' => 'is_del=0 and item_id='.$item_id.' and (id in('.$fieldId.') or parent in('.$fieldId.'))','order' => ['mess_order']]);
$relation = [];
if(!empty($itemMessageFieldData)){
$relationFieldDatas = [];
$relationFieldData = [];
$relationIdArr = [];
$relationId = array_filter(array_column($itemMessageFieldData,'relation_id'));
if (!empty($relationId)){
$relationIds = implode(',',$relationId);
$relationFieldData = $this->LocalService()->itemMessageField->fetchAll(['where' => 'is_del=0 and item_id='.$item_id.' and (id in('.$relationIds.') or parent in('.$relationIds.'))','order' => ['mess_order']]);
}
if(!empty($relationFieldData)){
$relationFieldData = $com->getTree($relationFieldData,0,0,2,'parent');
$relationIdArr = array_column($relationFieldData,'id');
}
$relationFieldDatas = $this->LocalService()->itemMessageSend->getPatientattrTemplate($relationFieldData);
$unsetArr = [];
foreach ($itemMessageFieldData as $itemMessageFieldDataK=>$itemMessageFieldDataV){
if (!empty($itemMessageFieldDataV['relation_id'])){
$relationIdData = explode(',',$itemMessageFieldDataV['relation_id']);
foreach ($relationFieldDatas as $relationFieldDatasK=>$relationFieldDatasV) {
if (in_array($relationFieldDatasV['id'],$relationIdData)){
// $relationFieldDatasV['prop'] = $getTypeCode[$itemMessageFieldDataV['id']];
$relationFieldDatasV['prop'] = $relationFieldDatasV['id'];//$itemMessageFieldDataV['parent'].'-'.$itemMessageFieldDataV['id'].'-'.$relationFieldDatasV['id'];
$relation[$itemMessageFieldDataV['parent']][$itemMessageFieldDataV['id']][] = $relationFieldDatasV;
}
}
}
if (in_array($itemMessageFieldDataV['id'],$relationIdArr)){
unset($itemMessageFieldData[$itemMessageFieldDataK]);
}
}
}
!empty($itemMessageFieldData) && $itemMessageFieldData = $com->getTree($itemMessageFieldData,0,0,2,'parent');
$FormFileDatas = $this->LocalService()->itemMessageSend->getPatientattrTemplate($itemMessageFieldData);
$FormFileData =array_values($this->Introduce('MessageSend',['item_id'=>$item_id,'messageSend'=>$FormFileDatas,'MINI_PATIENT'=>1]));
$itemMessageSendPatientWhere = [
'where' => 'is_del=0 and is_write=0 and item_id='.$item_id.' and patient_id='.$patient_id.' and FROM_UNIXTIME(create_time ,"%Y-%m-%d")="'.date('Y-m-d').'"',
'columns'=>['item_id','content','itemsig_id','patient_id','id'],
];
$itemMessageSendInfo = $this->LocalService()->itemMessageSendPatient->fetchOne($itemMessageSendPatientWhere);
if (!empty($itemMessageSendInfo)){
$itemInfoName = $this->LocalService()->itemInfo->getOneFieldVal('name','id='.$item_id)?:'';
$patientInfo = $this->LocalService()->patient->fetchOne(['where'=>'is_del=0 and id='.$patient_id,'columns'=>['id','patient_name','patient_number']]);
$itemMessageSendInfo['itemInfoName'] = $itemInfoName;
$itemMessageSendInfo['patient_name'] = '';
if (!empty($patientInfo)){
if (!empty($patientInfo['patient_name'])){
$itemMessageSendInfo['patient_name'] = $patientInfo['patient_name'];
}
if (!empty($patientInfo['patient_number'])){
$itemMessageSendInfo['patient_name'] .= '【'.$patientInfo['patient_number'].'】';
}
}
if (!empty($itemMessageSendInfo['content'])){
$itemMessageSendInfo['content'] = json_decode($itemMessageSendInfo['content'],true);
}else{
$itemMessageSendInfo['content'] = [];
}
}else{
$itemMessageSendInfo = ['is_write'=>1];
}
// if (empty($itemMessageSendInfo)){
// $whereMess['where'] = 'is_del=0 and item_id = ' . $item_id;
// $whereMess['columns'] = ['item_id','content'];
// $itemMessageSendInfo = $this->LocalService()->itemMessageSend->fetchOne($whereMess);
// if (!empty($itemMessageSendInfo)){
// $itemMessageSendInfo['id'] = 0;
// $itemMessageSendInfo['patient_id'] = $patient_id;
// $itemInfoName = $this->LocalService()->itemInfo->getOneFieldVal('name','id='.$item_id)?:'';
// $patientInfo = $this->LocalService()->patient->fetchOne(['where'=>'is_del=0 and id='.$patient_id,'columns'=>['id','patient_name','patient_number']]);
//
// $itemMessageSendInfo['itemInfoName'] = $itemInfoName;
// $itemMessageSendInfo['patient_name'] = '';
// if (!empty($patientInfo)){
// if (!empty($patientInfo['patient_name'])){
// $itemMessageSendInfo['patient_name'] = $patientInfo['patient_name'];
// }
// if (!empty($patientInfo['patient_number'])){
// $itemMessageSendInfo['patient_name'] .= '【'.$patientInfo['patient_number'].'】';
// }
// }
//
// if (!empty($itemMessageSendInfo['content'])){
// $itemMessageSendInfo['content'] = json_decode($itemMessageSendInfo['content'],true);
// }else{
// $itemMessageSendInfo['content'] = [];
// }
// }else{
// $itemMessageSendInfo = [];
// }
// }else{
// $itemMessageSendInfo = ['is_write'=>1];
// }
$data['itemMessageSendInfo'] = $itemMessageSendInfo;
$data['FormFileData'] =$FormFileData;
$data['relation'] =$relation;
return $this->RenderApiJson()->Success($data);
}
public function savePatientSendAction() {
$id = $newData['id'] = $_POST['id'] ?: 0;
$newData['item_id'] = $_POST['item_id'] ?: 0;
$newData['patient_id'] = $_POST['patient_id'] ?: 0;
$newData['itemsig_id'] = $_POST['itemsig_id'] ?: 0;
$newData['content'] = $_POST['content'] ?: '';
$newData['create_user_id'] = $newData['update_user_id'] = $_POST['user_id'] ?: 0;
$date = $_POST['date'] ? : 0;
$com = new Com();
if (empty($newData['item_id']) || empty($newData['content']) || empty($newData['patient_id'])){
return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, '参数不正确');
}
//验证链接
if((strtotime(date('Y-m-d',$date)) != strtotime(date('Y-m-d'))) || empty($date)){
return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, '信息已过期');
}
$itemMessageSendInfo = $this->LocalService()->itemMessageSend->fetchOne(['where'=>'is_del=0 and item_id='.$newData['item_id']]);
if (empty($itemMessageSendInfo)){
return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, '信息已过期');
}
$current_time = date('G');
// if ($current_time < $itemMessageSendInfo['send_time']){
// return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, '信息已过期');
// }
$checkSave = [
'item_id'=>$newData['item_id'],
'sendPatientData'=>$newData['content'],
];
//没有填写数据
// $resultCheckSave = $this->LocalService()->itemMessageSend->checkSend($checkSave);
// if (empty($resultCheckSave)) return $this->RenderApiJson()->Success();
$itemMessageSendPatientWhere = [
'where' => 'is_del=0 and item_id='.$newData['item_id'].' and patient_id='.$newData['patient_id'].' and FROM_UNIXTIME(create_time ,"%Y-%m-%d")="'.date('Y-m-d').'"',
'columns'=>['item_id','content','itemsig_id','patient_id','id'],
];
$itemMessageSendPatientInfo = $this->LocalService()->itemMessageSendPatient->fetchOne($itemMessageSendPatientWhere);
if(empty($itemMessageSendPatientInfo) || !empty($itemMessageSendPatientInfo['is_write'])) return $this->RenderApiJson()->Success();
$itemMessageFieldData = $this->LocalService()->itemMessageField->fetchAll(['where' => 'is_del=0 and item_id='.$newData['item_id'],'order' => ['mess_order']]);
$itemMsgParent = [];
$itemMsgParents = [];
if (!empty($itemMessageFieldData)){
$itemMsgParents = array_column($itemMessageFieldData,null,'id');
foreach ($itemMessageFieldData as $itemMessageFieldDataK=>$itemMessageFieldDataV){
if (empty($itemMessageFieldDataV['parent']) && $itemMessageFieldDataV['is_required'] == 1){
$itemMsgParent[] = $itemMessageFieldDataV['id'];
}
}
$itemMessageFieldData = $com->getTree($itemMessageFieldData,0,0,2,'parent');
}
// !empty($itemMessageFieldData) && $itemMessageFieldData = $com->getTree($itemMessageFieldData,0,0,2,'parent');
$FormFileDatas = $this->LocalService()->itemMessageSend->getPatientattrTemplate($itemMessageFieldData);
$contentField = $newData;
if (!empty($newData['content'])){
$newContentData = json_decode($newData['content'],true);
foreach ($newContentData as $newContentDataK=>$newContentDataV){
$var_name = isset($itemMsgParents[$newContentDataV['id']]['var_name'])?$itemMsgParents[$newContentDataV['id']]['var_name']:'';
$names = isset($itemMsgParents[$newContentDataV['id']]['name'])?$itemMsgParents[$newContentDataV['id']]['name']:'';
if (in_array($newContentDataV['id'],$itemMsgParent) && empty($newContentDataV['value'])){
return $this->RenderApiJson()->Error(StatusCode::E_FIELD_VALIDATOR, '【'.$names.'】:不能为空');
}
$contentField[$var_name] = $newContentDataV['value'];
}
//必填写都填写则为已完成
// $newData['is_complete'] = 1;
$newData['is_write'] = 1;
unset($contentField['content']);
}
// echo '<pre>';print_r($contentField);die;
$FormFileData =$this->Introduce('MessageSendPatient',['item_id'=>$newData['item_id'],'messageSend'=>$FormFileDatas]);
// $newData['update_user_id'] = $newData['user_id'];
// $newData['create_user_id'] = $newData['user_id'];
empty($newData['id']) && $newData['id'] = $itemMessageSendPatientInfo['id'];
$newData['write_time'] = time();
// echo '<pre>';print_r($FormFileData);die;
$result = $this->LocalService()->itemMessageSendPatient->save($newData);
unset($newData['write_time']);
unset($newData['update_user_id']);
$realname = $this->LocalService()->adminUser->getOneFieldVal('realname','is_del=0 and id='.$newData['create_user_id'])?:'';
// unset($newData['create_user_id']);
$contentField['realname'] = $realname;
$contentField['data_type_flag'] = 1;
if (!empty($result)) $this->LocalService()->log->saveFileLog($newData['id'],'MessageSendPatient',$contentField,0,'暂无说明',$newData['item_id'],'',['item_id'=>$newData['item_id'],'messageSend'=>$FormFileData]);
return $this->RenderApiJson()->Success();
}
//引入
private function Introduce($formValidator, array $params = []){
$path=APP_PATH.'/formData/';
$fromMap=include $path.'formMap.php';
$fromData=include $path.ucfirst($formValidator).'Data.php';
if (!empty($fromData)){
if(is_callable($fromData)) return $fromData($params);
return $fromData;
}else{
return [];
}
}
}