Пример #1
0
        /// <summary>
        /// 保存数据
        /// </summary>
        /// <param name="paramHead">待保存的车辆信息</param>
        /// <param name="paramVehicleOemPartsList">待保存的原厂件信息列表</param>
        /// <param name="paramVehicleBrandPartsList">待保存的品牌件信息列表</param>
        /// <param name="paramIsJoinVinInfo">是否合并当前车架号的信息</param>
        /// <returns></returns>
        public bool SaveDetailDS(VehicleModelMatchAutoPartsManagerUIModel paramHead, SkyCarBindingList <VehicleOemPartsInfoUIModel, MDLBS_VehicleOemPartsInfo> paramVehicleOemPartsList, SkyCarBindingList <VehicleThirdPartsInfoUIModel, MDLBS_VehicleThirdPartsInfo> paramVehicleBrandPartsList, bool paramIsJoinVinInfo)
        {
            var funcName = "SaveDetailDS";

            LogHelper.WriteBussLogStart(BussID, LoginInfoDAX.UserName, funcName, "", "", null);

            #region 准备数据

            //待同步的[车辆信息列表]
            List <VehicleModelMatchAutoPartsManagerUIModel> syncVehicleInfoList = new List <VehicleModelMatchAutoPartsManagerUIModel>();
            //待同步的[车辆原厂件信息列表]
            List <VehicleOemPartsInfoUIModel> syncVehicleOemPartsInfoList = new List <VehicleOemPartsInfoUIModel>();
            //待同步的[车辆品牌件信息列表]
            List <VehicleThirdPartsInfoUIModel> syncVehicleBrandPartsInfoList = new List <VehicleThirdPartsInfoUIModel>();

            #region 车辆信息

            //待保存的[车辆信息]
            MDLBS_VehicleInfo saveVehicleInfo = new MDLBS_VehicleInfo();

            if (paramIsJoinVinInfo)
            {
                #region 合并当前车架号对应信息的场合

                //查询当前车架号对应的车辆信息
                _bll.QueryForObject <MDLBS_VehicleInfo, MDLBS_VehicleInfo>(new MDLBS_VehicleInfo
                {
                    WHERE_VC_VIN     = paramHead.VC_VIN,
                    WHERE_VC_IsValid = true,
                }, saveVehicleInfo);
                saveVehicleInfo.VC_UpdatedBy       = LoginInfoDAX.UserName;
                saveVehicleInfo.VC_UpdatedTime     = BLLCom.GetCurStdDatetime();
                saveVehicleInfo.WHERE_VC_ID        = saveVehicleInfo.VC_ID;
                saveVehicleInfo.WHERE_VC_VersionNo = saveVehicleInfo.VC_VersionNo;

                //查询当前车架号对应的所有[原厂件信息]
                List <MDLBS_VehicleOemPartsInfo> resultVehicleOemPartsInfoList = new List <MDLBS_VehicleOemPartsInfo>();
                _bll.QueryForList <MDLBS_VehicleOemPartsInfo, MDLBS_VehicleOemPartsInfo>(new MDLBS_VehicleOemPartsInfo
                {
                    WHERE_VOPI_VC_VIN  = saveVehicleInfo.VC_VIN,
                    WHERE_VOPI_IsValid = true,
                }, resultVehicleOemPartsInfoList);

                //查询当前车架号对应的所有[品牌件信息]
                List <MDLBS_VehicleThirdPartsInfo> resultVehicleBrandPartsInfoList = new List <MDLBS_VehicleThirdPartsInfo>();
                _bll.QueryForList <MDLBS_VehicleThirdPartsInfo, MDLBS_VehicleThirdPartsInfo>(new MDLBS_VehicleThirdPartsInfo
                {
                    WHERE_VTPI_VC_VIN  = saveVehicleInfo.VC_VIN,
                    WHERE_VTPI_IsValid = true,
                }, resultVehicleBrandPartsInfoList);

                //移除重复的[原厂件信息]
                foreach (var loopOemParts in resultVehicleOemPartsInfoList)
                {
                    var curOemParts = paramVehicleOemPartsList.FirstOrDefault(
                        x => x.VOPI_VC_VIN == loopOemParts.VOPI_VC_VIN && x.VOPI_OEMNo == loopOemParts.VOPI_OEMNo);
                    if (curOemParts != null)
                    {
                        paramVehicleOemPartsList.Remove(curOemParts);
                    }
                }

                //移除重复的[品牌件信息]
                foreach (var loopBrandParts in resultVehicleBrandPartsInfoList)
                {
                    var curBrandParts = paramVehicleBrandPartsList.FirstOrDefault(x =>
                                                                                  x.VTPI_VC_VIN == loopBrandParts.VTPI_VC_VIN &&
                                                                                  x.VTPI_ThirdNo == loopBrandParts.VTPI_ThirdNo);
                    if (curBrandParts != null)
                    {
                        paramVehicleBrandPartsList.Remove(curBrandParts);
                    }
                }
                #endregion
            }
            else
            {
                #region  合并当前车架号对应信息的场合

                //将UIModel转为TBModel
                saveVehicleInfo = paramHead.ToTBModelForSaveAndDelete <MDLBS_VehicleInfo>();
                //判断主键是否被赋值
                if (string.IsNullOrEmpty(paramHead.VC_ID))
                {
                    saveVehicleInfo.VC_ID          = Guid.NewGuid().ToString();
                    saveVehicleInfo.VC_CreatedBy   = LoginInfoDAX.UserName;
                    saveVehicleInfo.VC_CreatedTime = BLLCom.GetCurStdDatetime();
                }
                saveVehicleInfo.VC_UpdatedBy   = LoginInfoDAX.UserName;
                saveVehicleInfo.VC_UpdatedTime = BLLCom.GetCurStdDatetime();
                #endregion
            }

            VehicleModelMatchAutoPartsManagerUIModel syncehicleInfo = new VehicleModelMatchAutoPartsManagerUIModel();
            _bll.CopyModel(saveVehicleInfo, syncehicleInfo);
            syncehicleInfo.VC_OperateType = "Save";
            syncVehicleInfoList.Add(syncehicleInfo);

            #endregion

            #region 原厂件信息

            //添加的明细
            foreach (var loopDetailItem in paramVehicleOemPartsList.InsertList)
            {
                loopDetailItem.VOPI_VC_VIN      = saveVehicleInfo.VC_VIN;
                loopDetailItem.VOPI_CreatedBy   = LoginInfoDAX.UserName;
                loopDetailItem.VOPI_CreatedTime = BLLCom.GetCurStdDatetime();
                loopDetailItem.VOPI_UpdatedBy   = LoginInfoDAX.UserName;
                loopDetailItem.VOPI_UpdatedTime = BLLCom.GetCurStdDatetime();

                loopDetailItem.VOPI_OperateType = "Save";
            }

            //更新的明细
            foreach (var loopDetailItem in paramVehicleOemPartsList.UpdateList)
            {
                loopDetailItem.VOPI_VC_VIN      = saveVehicleInfo.VC_VIN;
                loopDetailItem.VOPI_UpdatedBy   = LoginInfoDAX.UserName;
                loopDetailItem.VOPI_UpdatedTime = BLLCom.GetCurStdDatetime();

                loopDetailItem.VOPI_OperateType = "Save";
            }

            //删除的明细
            foreach (var loopDetailItem in paramVehicleOemPartsList.DeleteList)
            {
                loopDetailItem.VOPI_OperateType = "Delete";
            }
            syncVehicleOemPartsInfoList.AddRange(paramVehicleOemPartsList.InsertList);
            syncVehicleOemPartsInfoList.AddRange(paramVehicleOemPartsList.UpdateList);
            syncVehicleOemPartsInfoList.AddRange(paramVehicleOemPartsList.DeleteList);
            #endregion

            #region 品牌件信息

            //添加的明细
            foreach (var loopDetailItem in paramVehicleBrandPartsList.InsertList)
            {
                loopDetailItem.VTPI_VC_VIN      = saveVehicleInfo.VC_VIN;
                loopDetailItem.VTPI_CreatedBy   = LoginInfoDAX.UserName;
                loopDetailItem.VTPI_CreatedTime = BLLCom.GetCurStdDatetime();
                loopDetailItem.VTPI_UpdatedBy   = LoginInfoDAX.UserName;
                loopDetailItem.VTPI_UpdatedTime = BLLCom.GetCurStdDatetime();

                loopDetailItem.VTPI_OperateType = "Save";
            }

            //更新的明细
            foreach (var loopDetailItem in paramVehicleBrandPartsList.UpdateList)
            {
                loopDetailItem.VTPI_VC_VIN      = saveVehicleInfo.VC_VIN;
                loopDetailItem.VTPI_UpdatedBy   = LoginInfoDAX.UserName;
                loopDetailItem.VTPI_UpdatedTime = BLLCom.GetCurStdDatetime();

                loopDetailItem.VTPI_OperateType = "Save";
            }

            //删除的明细
            foreach (var loopDetailItem in paramVehicleBrandPartsList.DeleteList)
            {
                loopDetailItem.VTPI_OperateType = "Delete";
            }
            syncVehicleBrandPartsInfoList.AddRange(paramVehicleBrandPartsList.InsertList);
            syncVehicleBrandPartsInfoList.AddRange(paramVehicleBrandPartsList.UpdateList);
            syncVehicleBrandPartsInfoList.AddRange(paramVehicleBrandPartsList.DeleteList);
            #endregion

            #endregion

            #region  步到平台

            if (!SynchronizeVehicleRelateInfo(syncVehicleInfoList, syncVehicleOemPartsInfoList, syncVehicleBrandPartsInfoList))
            {
                //同步到平台失败
                ResultMsg = MsgHelp.GetMsg(MsgCode.E_0018, new object[] { SystemActionEnum.Name.SAVE, "同步平台失败" });
                return(false);
            }
            #endregion

            #region 带事务的保存

            try
            {
                DBManager.BeginTransaction(DBCONFIG.Coeus);

                #region 保存[车辆信息]

                var saveVehicleInfoResult = _bll.Save(saveVehicleInfo, saveVehicleInfo.VC_ID);
                if (!saveVehicleInfoResult)
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);

                    //保存本地失败的场合,还原平台上保存的信息
                    RestoreSavePlatformInfo(saveVehicleInfo, paramVehicleOemPartsList, paramVehicleBrandPartsList);

                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.BS_VehicleInfo });
                    LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                    return(false);
                }

                #endregion

                #region 保存[车辆原厂件信息]

                var saveOemPartsResult = _bll.UnitySave(paramVehicleOemPartsList);
                if (!saveOemPartsResult)
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);

                    //保存本地失败的场合,还原平台上保存的信息
                    RestoreSavePlatformInfo(saveVehicleInfo, paramVehicleOemPartsList, paramVehicleBrandPartsList);

                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.BS_VehicleOemPartsInfo });
                    LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                    return(false);
                }

                #endregion

                #region 保存[车辆品牌件信息]

                var saveBrandPartsResult = _bll.UnitySave(paramVehicleBrandPartsList);
                if (!saveBrandPartsResult)
                {
                    DBManager.RollBackTransaction(DBCONFIG.Coeus);

                    //保存本地失败的场合,还原平台上保存的信息
                    RestoreSavePlatformInfo(saveVehicleInfo, paramVehicleOemPartsList, paramVehicleBrandPartsList);

                    ResultMsg = MsgHelp.GetMsg(MsgCode.E_0010, new object[] { SystemActionEnum.Name.SAVE + SystemTableEnums.Name.BS_VehicleBrandPartsInfo });
                    LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ResultMsg, "", null);
                    return(false);
                }

                #endregion

                DBManager.CommitTransaction(DBCONFIG.Coeus);
            }
            catch (Exception ex)
            {
                DBManager.RollBackTransaction(DBCONFIG.Coeus);

                //保存本地失败的场合,还原平台上保存的信息
                RestoreSavePlatformInfo(saveVehicleInfo, paramVehicleOemPartsList, paramVehicleBrandPartsList);

                ResultMsg = MsgHelp.GetMsg(MsgCode.E_0018, new object[] { SystemActionEnum.Name.SAVE, ex.Message });
                LogHelper.WriteBussLogEndNG(BussID, LoginInfoDAX.UserName, funcName, ex.Message, "", null);
                return(false);
            }

            #endregion

            //将最新数据回写给DetailDS
            CopyModel(saveVehicleInfo, paramHead);

            #region 更新[车辆原厂件信息]版本号
            foreach (var loopInsertDetail in paramVehicleOemPartsList.InsertList)
            {
                //新增时版本号为1
                loopInsertDetail.VOPI_VersionNo = 1;
            }
            foreach (var loopUpdateDetail in paramVehicleOemPartsList.UpdateList)
            {
                //更新时版本号加1
                loopUpdateDetail.VOPI_VersionNo = loopUpdateDetail.VOPI_VersionNo + 1;
            }
            #endregion

            #region 更新[车辆品牌件信息]版本号
            foreach (var loopInsertDetail in paramVehicleBrandPartsList.InsertList)
            {
                //新增时版本号为1
                loopInsertDetail.VTPI_VersionNo = 1;
            }
            foreach (var loopUpdateDetail in paramVehicleBrandPartsList.UpdateList)
            {
                //更新时版本号加1
                loopUpdateDetail.VTPI_VersionNo = loopUpdateDetail.VTPI_VersionNo + 1;
            }
            #endregion

            return(true);
        }
Пример #2
0
        /// <summary>
        /// 保存本地失败的场合,还原平台上保存的信息
        /// </summary>
        /// <param name="paramHead">待保存的车辆信息</param>
        /// <param name="paramVehicleOemPartsList">待保存的原厂件信息列表</param>
        /// <param name="paramVehicleBrandPartsList">待保存的品牌件信息列表</param>
        private void RestoreSavePlatformInfo(MDLBS_VehicleInfo paramHead, SkyCarBindingList <VehicleOemPartsInfoUIModel, MDLBS_VehicleOemPartsInfo> paramVehicleOemPartsList, SkyCarBindingList <VehicleThirdPartsInfoUIModel, MDLBS_VehicleThirdPartsInfo> paramVehicleBrandPartsList)
        {
            #region 1. 待还原平台数据的[车辆信息]

            var restoreSyncVehicleInfo = new VehicleModelMatchAutoPartsManagerUIModel();
            _bll.QueryForObject <MDLBS_VehicleInfo, VehicleModelMatchAutoPartsManagerUIModel>(new MDLBS_VehicleInfo
            {
                WHERE_VC_VIN     = paramHead.VC_VIN,
                WHERE_VC_IsValid = true,
            }, restoreSyncVehicleInfo);
            if (string.IsNullOrEmpty(restoreSyncVehicleInfo.VC_ID))
            {
                _bll.CopyModel(paramHead, restoreSyncVehicleInfo);
                restoreSyncVehicleInfo.VC_OperateType = "Delete";
            }
            else
            {
                restoreSyncVehicleInfo.VC_OperateType = "Save";
            }
            List <VehicleModelMatchAutoPartsManagerUIModel> restoreVehicleInfoList = new List <VehicleModelMatchAutoPartsManagerUIModel>();
            restoreVehicleInfoList.Add(restoreSyncVehicleInfo);

            #endregion

            #region 2. 待还原平台数据的[车辆原厂件信息]列表

            List <VehicleOemPartsInfoUIModel> restoreVehicleOemPartsInfoList = new List <VehicleOemPartsInfoUIModel>();
            foreach (var loopInsert in paramVehicleOemPartsList.InsertList)
            {
                loopInsert.VOPI_OperateType = "Delete";
            }
            restoreVehicleOemPartsInfoList.AddRange(paramVehicleOemPartsList.InsertList);
            foreach (var loopDelete in paramVehicleOemPartsList.DeleteList)
            {
                loopDelete.VOPI_OperateType = "Save";
            }
            restoreVehicleOemPartsInfoList.AddRange(paramVehicleOemPartsList.DeleteList);
            //查询待更新数据的原保存内容
            List <MDLBS_VehicleOemPartsInfo> updateVehicleOemPartsInfoList = new List <MDLBS_VehicleOemPartsInfo>();
            string updateOemPartsIdStr = string.Empty;
            _bll.QueryForList(SQLID.BS_VehicleModelMatchAutoPartsManager_SQL05, new MDLBS_VehicleOemPartsInfo
            {
                WHERE_VOPI_ID = updateOemPartsIdStr,
            }, updateVehicleOemPartsInfoList);
            foreach (var loopUpdate in paramVehicleOemPartsList.UpdateList)
            {
                var curUpdateVehicleOemParts =
                    updateVehicleOemPartsInfoList.FirstOrDefault(x => x.VOPI_ID == loopUpdate.VOPI_ID);
                if (curUpdateVehicleOemParts != null && !string.IsNullOrEmpty(curUpdateVehicleOemParts.VOPI_ID))
                {
                    _bll.CopyModel(curUpdateVehicleOemParts, loopUpdate);
                }
                loopUpdate.VOPI_OperateType = "Save";
            }
            restoreVehicleOemPartsInfoList.AddRange(paramVehicleOemPartsList.UpdateList);

            #endregion

            #region 3. 待还原平台数据的[车辆品牌件信息]列表
            List <VehicleThirdPartsInfoUIModel> restoreVehicleBrandPartsInfoList = new List <VehicleThirdPartsInfoUIModel>();
            foreach (var loopInsert in paramVehicleBrandPartsList.InsertList)
            {
                loopInsert.VTPI_OperateType = "Delete";
            }
            restoreVehicleBrandPartsInfoList.AddRange(paramVehicleBrandPartsList.InsertList);
            foreach (var loopDelete in paramVehicleBrandPartsList.DeleteList)
            {
                loopDelete.VTPI_OperateType = "Save";
            }
            restoreVehicleBrandPartsInfoList.AddRange(paramVehicleBrandPartsList.DeleteList);
            //查询待更新数据的原保存内容
            List <MDLBS_VehicleThirdPartsInfo> updateVehicleBrandPartsInfoList = new List <MDLBS_VehicleThirdPartsInfo>();
            string updateBrandPartsIdStr = string.Empty;
            _bll.QueryForList(SQLID.BS_VehicleModelMatchAutoPartsManager_SQL06, new MDLBS_VehicleThirdPartsInfo
            {
                WHERE_VTPI_ID = updateBrandPartsIdStr,
            }, updateVehicleBrandPartsInfoList);
            foreach (var loopUpdate in paramVehicleBrandPartsList.UpdateList)
            {
                var curUpdateVehicleBrandParts =
                    updateVehicleBrandPartsInfoList.FirstOrDefault(x => x.VTPI_ID == loopUpdate.VTPI_ID);
                if (curUpdateVehicleBrandParts != null && !string.IsNullOrEmpty(curUpdateVehicleBrandParts.VTPI_ID))
                {
                    _bll.CopyModel(curUpdateVehicleBrandParts, loopUpdate);
                }
                loopUpdate.VTPI_OperateType = "Save";
            }
            restoreVehicleBrandPartsInfoList.AddRange(paramVehicleBrandPartsList.UpdateList);

            #endregion

            //同步到平台
            SynchronizeVehicleRelateInfo(restoreVehicleInfoList, restoreVehicleOemPartsInfoList, restoreVehicleBrandPartsInfoList);
        }