public async Task <IActionResult> UpdateHealthInformationAsync([FromBody] UpdateHealthInformationRequestDto request)
        {
            var userBiz = new UserBiz();
            var model   = await userBiz.GetAsync(request.UserGuid);

            if (model is null || !model.Enable)
            {
                return(Failed(ErrorCode.Empty, "指定会员不存在,请检查"));
            }

            if (request.Items.Count == 0)
            {
                return(Failed(ErrorCode.Empty, "会员基础信息为空,请检查"));
            }

            var informationBiz = new HealthInformationBiz();

            var consumerHealthInfoBiz = new ConsumerHealthInfoBiz();

            var insertModels = new List <ConsumerHealthInfoModel>();
            var updateModels = new List <ConsumerHealthInfoModel>();

            var filterHealthInfos = new List <string>();

            foreach (var item in request.Items)
            {
                if (string.IsNullOrEmpty(item.InformationGuid))
                {
                    return(Failed(ErrorCode.Empty, "健康基础信息项数据为空,请检查"));
                }

                if (filterHealthInfos.Contains(item.InformationGuid))
                {
                    return(Failed(ErrorCode.Empty, "健康基础信息存在重复项,请检查"));
                }

                var healthInfoModel = await informationBiz.GetAsync(item.InformationGuid);

                if (healthInfoModel == null)
                {
                    return(Failed(ErrorCode.DataBaseError, "健康基础信息不存在,请检查"));
                }

                filterHealthInfos.Add(healthInfoModel.InformationGuid);

                var consumerHealthInfoModel = new ConsumerHealthInfoModel()
                {
                    InfoRecordGuid  = Guid.NewGuid().ToString("N"),
                    InformationGuid = item.InformationGuid,
                    UserGuid        = request.UserGuid,
                    CreatedBy       = UserID,
                    LastUpdatedBy   = UserID,
                    ResultValue     = item.ResultValue
                };

                var selectedOptionGuids = item.OptionGuids;

                if (healthInfoModel.InformationType == HealthInformationEnum.Decimal.ToString())
                {
                    if (!string.IsNullOrEmpty(item.ResultValue))
                    {
                        if (!decimal.TryParse(item.ResultValue, out var value))
                        {
                            return(Failed(ErrorCode.Empty, "数据类型不正确"));
                        }
                    }
                }
                else if (healthInfoModel.InformationType == HealthInformationEnum.Enum.ToString() ||
                         healthInfoModel.InformationType == HealthInformationEnum.Array.ToString())
                {
                    if (selectedOptionGuids.Count <= 0)
                    {
                        continue;
                    }

                    if (healthInfoModel.InformationType == HealthInformationEnum.Enum.ToString())
                    {
                        if (selectedOptionGuids.Count > 1)
                        {
                            return(Failed(ErrorCode.Empty, $"题目【{healthInfoModel.SubjectName}】答案存在多个"));
                        }
                    }

                    var options = await informationBiz.GetHealthInformationOptionAsync(item.InformationGuid);

                    var infoResult = selectedOptionGuids.Except(options.Select(s => s.OptionGuid));

                    if (infoResult != null && infoResult.Count() > 0)
                    {
                        return(Failed(ErrorCode.Empty, $"题目【{healthInfoModel.SubjectName}】答案选项不存在"));
                    }

                    consumerHealthInfoModel.OptionGuids = JsonConvert.SerializeObject(selectedOptionGuids);
                    consumerHealthInfoModel.ResultValue = null;
                }

                //用户没有填写任何信息,既不更新也不添加
                if (string.IsNullOrEmpty(consumerHealthInfoModel.OptionGuids) &&
                    string.IsNullOrEmpty(consumerHealthInfoModel.ResultValue?.Trim()))
                {
                    continue;
                }

                var consumerHealthInfo = await consumerHealthInfoBiz.GetConsumerHealthInfoAsync(item.InformationGuid, request.UserGuid);

                if (consumerHealthInfo != null)
                {
                    consumerHealthInfoModel.InfoRecordGuid  = consumerHealthInfo.InfoRecordGuid;
                    consumerHealthInfoModel.InformationGuid = consumerHealthInfo.InformationGuid;
                    consumerHealthInfoModel.LastUpdatedBy   = UserID;
                    consumerHealthInfoModel.LastUpdatedDate = DateTime.Now;

                    updateModels.Add(consumerHealthInfoModel);
                }
                else
                {
                    insertModels.Add(consumerHealthInfoModel);
                }
            }

            var result = await consumerHealthInfoBiz.CreateOrUpdateConsumerHealthInfo(insertModels, updateModels);

            return(result ? Success() : Failed(ErrorCode.DataBaseError, "更新健康基础信息失败"));
        }
Example #2
0
        public async Task <IActionResult> UpdateHealthInformationAsync([FromBody] GetHealthInformationRequestDto requestDto)
        {
            if (requestDto.UpdateType == 0)
            {
                var healthInfoModel = await new HealthInformationBiz().GetAsync(requestDto.InformationGuid);
                if (healthInfoModel == null)
                {
                    return(Failed(ErrorCode.DataBaseError, "健康基础信息不存在"));
                }
                ConsumerHealthInfoModel consumerHealthInfoModel = new ConsumerHealthInfoModel()
                {
                    InfoRecordGuid  = Guid.NewGuid().ToString("N"),
                    InformationGuid = requestDto.InformationGuid,
                    InformationType = healthInfoModel.InformationType,
                    UserGuid        = UserID,
                    CreatedBy       = UserID,
                    CreationDate    = DateTime.Now
                };

                if (healthInfoModel.InformationType == HealthInformationEnum.Decimal.ToString())
                {
                    //数值类型校验
                    decimal value = 0;
                    if (!Decimal.TryParse(requestDto.ResultValue, out value))
                    {
                        return(Failed(ErrorCode.DataBaseError, "请填写数值类型数据"));
                    }
                    consumerHealthInfoModel.ResultValue = requestDto.ResultValue;
                    consumerHealthInfoModel.OptionGuids = null;
                }
                else if (healthInfoModel.InformationType == HealthInformationEnum.Array.ToString() || healthInfoModel.InformationType == HealthInformationEnum.Enum.ToString())
                {
                    //差集
                    var healthInformationOptionList = await new HealthInformationOptionBiz().GetHealthInformationOptionAsync(requestDto.InformationGuid);
                    var infoResult = requestDto.OptionGuids.Except(healthInformationOptionList.Select(s => s.OptionGuid))?.ToList();
                    if (infoResult != null && infoResult.Count != 0)
                    {
                        return(Failed(ErrorCode.DataBaseError, "答案Id不存在"));
                    }
                    if (requestDto.OptionGuids == null || requestDto.OptionGuids.Count == 0)
                    {
                        return(Failed(ErrorCode.DataBaseError, "请选择答案"));
                    }
                    if (healthInfoModel.InformationType == HealthInformationEnum.Bool.ToString() || healthInfoModel.InformationType == HealthInformationEnum.Enum.ToString())
                    {
                        //单选和判断题选择值只能为一个答案
                        if (requestDto.OptionGuids.Count != 1)
                        {
                            return(Failed(ErrorCode.DataBaseError, "请选择一种答案"));
                        }
                    }
                    consumerHealthInfoModel.OptionGuids = JsonConvert.SerializeObject(requestDto.OptionGuids);
                    consumerHealthInfoModel.ResultValue = null;
                }
                else
                {
                    //暂不做校验
                    consumerHealthInfoModel.OptionGuids = null;
                    consumerHealthInfoModel.ResultValue = requestDto.ResultValue;
                }
                bool result = false;
                ConsumerHealthInfoBiz consumerHealthInfoBiz = new ConsumerHealthInfoBiz();
                var consumerHealthInfo = await consumerHealthInfoBiz.GetConsumerHealthInfoAsync(requestDto.InformationGuid, UserID);

                if (consumerHealthInfo != null)
                {
                    //存在即更新
                    consumerHealthInfoModel.InfoRecordGuid  = consumerHealthInfo.InfoRecordGuid;
                    consumerHealthInfoModel.InformationGuid = consumerHealthInfo.InformationGuid;
                    consumerHealthInfoModel.CreatedBy       = consumerHealthInfo.CreatedBy;
                    consumerHealthInfoModel.CreationDate    = consumerHealthInfo.CreationDate;
                    consumerHealthInfoModel.LastUpdatedBy   = UserID;
                    consumerHealthInfoModel.LastUpdatedDate = DateTime.Now;
                    result = await consumerHealthInfoBiz.UpdateAsync(consumerHealthInfoModel);
                }
                else
                {
                    result = await consumerHealthInfoBiz.InsertAsync(consumerHealthInfoModel);
                }
                return(result ? Success() : Failed(ErrorCode.DataBaseError, "更新健康基础信息失败"));
            }
            else
            {
                //固定五项数据更新
                var userBiz = new UserBiz();
                var model   = userBiz.GetUser(UserID);
                if (model == null)
                {
                    return(Failed(ErrorCode.DataBaseError, "用户不存在"));
                }
                model.IdentityNumber  = requestDto.IdentityNumber;
                model.LastUpdatedBy   = UserID;
                model.LastUpdatedDate = DateTime.Now;
                model.UserName        = requestDto.UserName;
                model.Birthday        = requestDto.Birthday;
                model.Gender          = requestDto.Gender;
                return(userBiz.UpdateUser(model) ? Success() : Failed(ErrorCode.DataBaseError, "更新用户信息失败"));
            }
        }