19626
2023-10-09 25f056535350a0b80bad50d2cc45311998e5d1cd
force-app/main/default/classes/lexPCLLostReportLwcController.cls
@@ -31,30 +31,11 @@
   public static integer secondNum {get; set;}
   // add tcm 20211122 end
   @AuraEnabled
   public static LostReport getLostReport(){
      try {
         return LostReport;
      } catch (Exception e) {
         throw new AuraHandledException(e.getMessage());
      }
   }
   @AuraEnabled( cacheable = true )
    public static List< Account > getAccounts() {
        return [ SELECT Id, Name, Industry FROM Account LIMIT 10 ];
    }
    @AuraEnabled( cacheable = true )
    public static void saveAccounts(List<Account> accList){
        Insert accList;
        /*if(accList.size()>0 && accList != null){
            insert accList;
        }*/
    }
   @AuraEnabled(cacheable=true)
    public static Id getUserProfileId() {
        Id profileId = [SELECT ProfileId FROM User WHERE Id = :UserInfo.getUserId()].ProfileId;
        return profileId;
    }
   @AuraEnabled
    public static String getPickList(String objectName, String fieldName) {
      List<Map<String, String>> lstPickvals = new List<Map<String, String>>();
@@ -70,6 +51,8 @@
      Map<string,List<Map<String, String>>> pickList =  new Map<string,List<Map<String, String>>>();
      List<Map<String, String>> zhuji = new List<Map<String, String>>();
      List<Map<String, String>> jingzi = new List<Map<String, String>>();
      List<Map<String, String>> xixiaoji = new List<Map<String, String>>();
      List<Map<String, String>> guangyuan = new List<Map<String, String>>();
      List<Map<String, String>> xiaojingzhong = new List<Map<String, String>>();
      List<Map<String, String>> nengliang = new List<Map<String, String>>();
      List<Map<String, String>> qita = new List<Map<String, String>>();
@@ -80,19 +63,25 @@
      nengliang.add(empty);
      qita.add(empty);
      for (Integer i = 0; i < lstPickvals.size(); i++) {
         if ((i >= 0 && i <= 6) || i == 36) {
         if ((i >= 0 && i <= 6) || i == 38) {
            zhuji.add(lstPickvals[i]);
         }
         if ((i >= 7 && i <= 23) || i == 36) {
         if ((i >= 7 && i <= 23) || i == 38) {
            jingzi.add(lstPickvals[i]);
         }
         if ((i >= 24 && i <= 29) || i == 35) {
         if ((i >= 24 && i <= 29) || i == 35|| i == 38) {
            xiaojingzhong.add(lstPickvals[i]);
         }
         if ((i >= 30 && i <= 34) || i == 36) {
         if ((i >= 30 && i <= 34) || i == 38) {
            nengliang.add(lstPickvals[i]);
         }
         if (i == 36) {
            guangyuan.add(lstPickvals[i]);
         }
         if (i == 37) {
            xixiaoji.add(lstPickvals[i]);
         }
         if (i == 38) {
            qita.add(lstPickvals[i]);
         }
      }
@@ -100,30 +89,11 @@
      pickList.put('镜子', jingzi);
      pickList.put('小镜种', xiaojingzhong);
      pickList.put('能量', nengliang);
      pickList.put('洗消机', xixiaoji);
      pickList.put('光源', guangyuan);
      pickList.put('其他', qita);
        return JSON.serialize(pickList);
    }
   @AuraEnabled
   public static String getPickListByFilter(String objectName,String fieldName,String controlFieldName,String controlFieldValue){
      try {
         Schema.DescribeFieldResult fieldDescribe = Schema.getGlobalDescribe().get(objectName).getDescribe().fields.getMap().get(fieldName).getDescribe();
         // 如果该字段为选项列表类型,则获取选项列表
         List<Schema.PicklistEntry> picklistValues = fieldDescribe.getPicklistValues();
         // 根据控制字段的值筛选出对应的选项
         List<Map<String, Object>> lstPickvals = new List<Map<String, Object>>();
         for (Schema.PicklistEntry entry : picklistValues) {
            if (entry.isActive() && entry.getValue().startsWith(controlFieldValue)) {
               lstPickvals.add(new Map<String, Object>{'label' => entry.getValue(), 'value' => entry.getValue()});
            }
         }
         String jsonStr = JSON.serialize(lstPickvals);
         return jsonStr;
      } catch (Exception e) {
         throw new AuraHandledException(e.getMessage());
      }
   }
   @AuraEnabled
   public static Map<string,object> init (string oppId1,string lostReportId1,string pageStatus1,string lostType1,string submitFlag1){
      try {
@@ -193,13 +163,15 @@
          Lost_Reason_Sub__c,Lost_By_Company__c,
          LostTotalAmount__c,LostType__c,
          Report_Status__c,Sales_assistant__c,
          TotalAmountLost__c,
          InclusionUltrasound__c, //20230506 lt DB202304618804  包含超声
          ModifyAfterApproval__c,Approved_Day__c,//20230814 lt DB202308068183 失单报告审批节点增加助理审批节点 add
          Opportunity__c, Opportunity__r.Sales_assistant_ID__c,
          Opportunity__r.Sales_manager_departmentID__c,
          Manager_sales__c,recordtypeid,recordtype.DeveloperName
          from Lost_cancel_report__c
          where id =: lostReportId limit 1];
         System.debug('chenjingwu' + lostReportList);
         if(lostReportList.size() == 0) {
            pageStatus = null;
            maps.put('message', '您没有查看这个失单/部分失单报告的权限!');
@@ -216,7 +188,18 @@
            lostReportList[0].LostType__c ='部分失单';
         }
         // 权限,如果当前状态不是草案中,那么需要跳转到只读页面
         if(!'草案'.equals(lostReportList[0].Report_Status__c) && userinfo.getProfileId() != (ID) '00e10000000Y3o5AAC') {
      //原:!'草案'.equals(lostReportList[0].Report_Status__c) && userinfo.getProfileId() != (ID) '00e10000000Y3o5AAC'
      // 20230814 lt DB202308068183 失单报告审批节点增加助理审批节点 end 改if条件
      if(
         !('草案'.equals(lostReportList[0].Report_Status__c)
         || userinfo.getProfileId() == (ID) '00e10000000Y3o5AAC'
         ||('批准'.equals(lostReportList[0].Report_Status__c) &&
            (userinfo.getProfileId() == (ID) '00e10000000xnp2AAA' ||
            userinfo.getProfileId() == (ID) '00e10000000xnpRAAQ' ||
            userinfo.getProfileId() == (ID) '00e10000000xnpHAAQ'))
         )
        ){
            pageStatus = 'View';
         }
         oppId = lostReportList[0].Opportunity__c;
@@ -225,11 +208,12 @@
         [
            select id, LostPrice__c, Lost_By_Company__c,
            Lost_reason_main__c,Lost_Reason_Sub__c,Name,Agency__c, AgencyMannual__c,
            // ProductCategory__c,ProductClass__c,
            Lost_cancel_report__c,Lost_By_Company_Mannual__c,
            Lost_cancel_report__c,Lost_By_Company_Mannual__c,ChannelSpecificReasons__c,
            ( select id,PCLLostBrand__c,LostProduct__c,
            LostProduct__r.Name,
              LostProductMannual__c,            //SWAG-C6P9PX lt 20210913 add
              ProductCategory__c,ProductClass__c, //add tcm 20211123
              ProductCategory__c,
              ProductClass__c, //add tcm 20211123
              Quantity__c,Name, LostBrandName__c 
              from PCLLostBrand__c.PCLLostBrandProduct__r)
            from PCLLostBrand__c
@@ -248,8 +232,11 @@
               system.debug('check products:'+ (templostBrand.PCLLostBrandProduct__r != null) + '|' + (templostBrand.PCLLostBrandProduct__r.size() > 0));
               if (templostBrand.PCLLostBrandProduct__r != null && templostBrand.PCLLostBrandProduct__r.size() > 0) {
                  for( PCLLostProduct__c tempProduct: templostBrand.PCLLostBrandProduct__r) {
                     tempProductList.add(new PCLLostProducts(productCount,tempProduct));
                     PCLLostProducts pro = new PCLLostProducts(productCount,tempProduct);
                     if(tempProduct.LostProduct__r.Name != null){
                        pro.productName = tempProduct.LostProduct__r.Name;
                     }
                     tempProductList.add(pro);
                     productCount++;
                  }
               } else {
@@ -262,10 +249,15 @@
                        newProduct.LostProductss.LostBrandName__c = templostBrand.Lost_By_Company__c;
                     }
                     system.debug('aaa4+++'+templostBrand.Lost_By_Company_Mannual__c);
                  tempProductList.add(newProduct);
                  productCount++;
               }
               LostBrandList.add( new LostBrand(brandCount,tempProductList, templostBrand));
               LostBrand br = new LostBrand(brandCount,tempProductList, templostBrand);
               if(tempLostBrand.ChannelSpecificReasons__c != null){
                  br.reasonFlag = true;
               }
               LostBrandList.add(br);
               brandCount++;
            }
@@ -276,6 +268,68 @@
      brandNo = 0;
      // 读取竞争对手品牌
      // BrandmapSet();
      if (lostReportId != null) {
         // List<ProcessInstance> pros = [
         // SELECT
         // ProcessDefinition.Name,
         //    (
         //    SELECT
         //    Id,
         //    StepStatus,
         //    IsPending,
         //    Comments,
         //    CreatedDate,
         //    Actor.Name,
         //    OriginalActor.Name,
         //    ProcessNode.Name FROM StepsAndWorkitems order by IsPending DESC, CreatedDate DESC
         // )
         // FROM ProcessInstance where TargetObjectId =:LostReport.lostReport.id order by CreatedDate DESC
         // ];
         // List<ProcessInstanceHistory> items = new List<ProcessInstanceHistory>();
         // for(ProcessInstance pro: pros){
         //    items.add(pro.StepsAndWorkitems);
         // }
         // LostReport.approvalHistorys = items;
         List<ProcessInstance> pros = [
         SELECT
         ProcessDefinition.Name,
            (
            SELECT
            Id,
            StepStatus,
            IsPending,
            Comments,
            CreatedDate,
            Actor.Name,
            OriginalActor.Name,
            ProcessNode.Name FROM StepsAndWorkitems order by IsPending DESC, CreatedDate DESC
         )
         FROM ProcessInstance where TargetObjectId =:LostReport.lostReport.id order by CreatedDate DESC
         ];
         if(pros.size() > 0){
            List<ProcessInstanceHistory> items = new List<ProcessInstanceHistory>();
            maps.put('allowUserId',pros[0].StepsAndWorkitems[0].OriginalActor.Id);
            maps.put('userProfileId',UserInfo.getProfileId());
            for(ProcessInstance pro: pros){
               items.addAll(pro.StepsAndWorkitems);
            }
            for(ProcessInstanceHistory pro: pros[0].StepsAndWorkitems){
               if(pro.StepStatus == 'Started'){
                  maps.put('submitUserId',pro.OriginalActorId);
               }
            }
            LostReport.approvalHistorys = items;
         }else{
            List<ProcessInstanceHistory> items = new List<ProcessInstanceHistory>();
            LostReport.approvalHistorys = items;
         }
      }else{
         List<ProcessInstanceHistory> items = new List<ProcessInstanceHistory>();
         LostReport.approvalHistorys = items;
      }
      if(string.isNotEmpty(submitFlag)) {
         maps.put('message', '提交成功!');
         maps.put('LostReport', LostReport);
@@ -286,177 +340,8 @@
      // Map<String,String> ele = new Map<String,String>();
      // LostReport.LostBrands[0].columns.add();
      maps.put('LostReport', LostReport);
      maps.put('userId',UserInfo.getUserId());
      return maps;
   }
   //写到js
   // 编辑 只有系统管理员或者草案中可以编辑
   @AuraEnabled
   public static String edit2(){
      if( userinfo.getProfileId() == (ID) '00e10000000Y3o5AAC' ||
          '草案'.equals(LostReport.LostReport.Report_Status__c)
          ) {
         pageStatus = 'Edit';
         init1();
      }
      else{
         return '只有在草案中才能进行编辑!';
      }
      return null;
   }
   // 设置品牌
   @AuraEnabled
   public static void setBrand(){
      list<LostBrand> LostBrandlist =  LostReport.LostBrands;
      LostBrand tempBrand = LostBrandlist.get(setBrandNo);
      string brandName = tempBrand.lostBrand.Lost_By_Company__c;
      // fy SWAG-CCC6F6 start
      if(!'其他'.equals(tempBrand.lostBrand.Lost_By_Company_Mannual__c)){
         tempBrand.lostBrand.Lost_By_Company_Mannual__c = null;
      }
      system.debug('aaa5+++'+tempBrand.lostBrand.Lost_By_Company_Mannual__c);
      // fy SWAG-CCC6F6 end
      // ID compID = CompetitionMap.get(brandName);
      for(PCLLostProducts tempLostProduct : tempBrand.LostProducts ) {
         // test
         // tempLostProduct.LostProductss.Competitor__c = compID;
         tempLostProduct.LostProductss.LostBrandName__c = brandName;
         tempLostProduct.LostProductss.LostProduct__c = null;
         tempLostProduct.LostProductss.LostProductMannual__c = null;
         tempLostProduct.LostProductss.Quantity__c = null;
         tempLostProduct.LostProductss.ProductClass__c = null;
         tempLostProduct.LostProductss.ProductCategory__c = null;
         tempLostProduct.bool=false;
      }
   }
   // 设置品牌
   @AuraEnabled
   public static void setbrandmannual(){
      list<LostBrand> LostBrandlist =  LostReport.LostBrands;
      LostBrand tempBrand = LostBrandlist.get(setBrandNo);
      string brandName = tempBrand.lostBrand.Lost_By_Company__c;
      String brandNameMannual = tempBrand.lostBrand.Lost_By_Company_Mannual__c;
      // ID compID = CompetitionMap.get(brandName);
      for(PCLLostProducts tempLostProduct : tempBrand.LostProducts ) {
         // test
         // tempLostProduct.LostProductss.Competitor__c = compID;
         system.debug('aaaa3++'+brandNameMannual);
         if ('其他'.equals(brandName) && brandNameMannual != null && !''.equals(brandNameMannual)) {
            tempLostProduct.LostProductss.LostBrandName__c = brandNameMannual;
            // tempLostProduct.LostProductss.LostProduct__c = null;
            // tempLostProduct.LostProductss.LostProductMannual__c = null;
            // tempLostProduct.LostProductss.Quantity__c = null;
            // tempLostProduct.LostProductss.ProductClass__c = null;
            // tempLostProduct.LostProductss.ProductCategory__c = null;
            // tempLostProduct.bool=false;
         }
      }
   }
   // 保存
   // @AuraEnabled
   // public static String save(LostReport report){
   //    try {
   //       if(!dataEntry(report)) {
   //          return null;
   //       }
   //       // brandCount = LostReport.LostBrands.size();
   //       pageStatus = 'View';
   //       return '保存成功!';
   //    } catch (Exception e) {
   //       return e.getMessage();
   //    }
   // }
   //读取并构建竞争对手品牌
   // public void BrandmapSet(){
   //    CompetitionMap = new map<string, id>();
   //    list <Competition_Company__c> competitionList
   //        =  [select id,name from Competition_Company__c];
   //    for(Competition_Company__c tempComp : competitionList ) {
   //       CompetitionMap.put(tempComp.name, tempComp.id);
   //    }
   // }
   // 数据检查
   @AuraEnabled
   public static boolean DataCheck(LostReport report){
      LostReport = report;
      boolean dataCheck = true;
      if(string.isBlank(LostReport.LostReport.LostType__c))
      {
         LostReport.LostReport.LostType__c.addError('必须填写失单类型!');
         dataCheck = false;
      }
      for(LostBrand tempLostBrand : LostReport.LostBrands ) {
         system.debug('aaaa1++'+tempLostBrand.lostBrand.Lost_By_Company_Mannual__c);
         if(string.isblank(tempLostBrand.lostBrand.Lost_By_Company__c)) {
            tempLostBrand.lostBrand.Lost_By_Company__c.addError('请填写失单品牌!');
            dataCheck = false;
         }// fy SWAG-CCC6F6 start
         else if('其他'.equals(tempLostBrand.lostBrand.Lost_By_Company__c)&&string.isblank(tempLostBrand.lostBrand.Lost_By_Company_Mannual__c)){
            tempLostBrand.lostBrand.Lost_By_Company_Mannual__c.addError('请填写失单品牌(手动)!');
            dataCheck = false;
         }// fy SWAG-CCC6F6 end
         system.debug('aaaa2++'+tempLostBrand.lostBrand.Lost_By_Company_Mannual__c);
         if(tempLostBrand.lostBrand.LostPrice__c == null) {
            tempLostBrand.lostBrand.LostPrice__c.addError('失单金额必填!');
            dataCheck = false;
         }
         if(string.isblank(tempLostBrand.lostBrand.Lost_reason_main__c )) {
            tempLostBrand.lostBrand.Lost_reason_main__c.addError('失单理由(主)必填!');
            dataCheck = false;
         }
         if(string.isblank(tempLostBrand.lostBrand.Agency__c )) {
            tempLostBrand.lostBrand.Agency__c.addError('中标经销商必填!');
            dataCheck = false;
         }
         // 检查是否有超过1个有数的产品
         integer productCount = 0;
         for( PCLLostProducts temlostProduct : tempLostBrand.LostProducts) {
            if (temlostProduct.LostProductss.LostProduct__c != null || temlostProduct.LostProductss.LostProductMannual__c != null) {
               System.debug('失单型号' + temlostProduct.LostProductss.LostProduct__c);
               System.debug('失单型号手动' + temlostProduct.LostProductss.LostProductMannual__c);
               productCount ++;
            }
            // update tcm 20211123 start
            if((temlostProduct.LostProductss.LostProduct__c!=null || temlostProduct.LostProductss.LostProductMannual__c!=null)&&(temlostProduct.LostProductss.Quantity__c==null || temlostProduct.LostProductss.Quantity__c ==0)) {
               temlostProduct.LostProductss.Quantity__c.addError('请填写失单数量!');
               dataCheck = false;
            }
            if((temlostProduct.LostProductss.LostProduct__c!=null || temlostProduct.LostProductss.LostProductMannual__c!=null)&&temlostProduct.LostProductss.ProductCategory__c==null) {
               if (temlostProduct.LostProductss.ProductClass__c==null) {
                  temlostProduct.LostProductss.ProductClass__c.addError('失单产品类别必填!');
                  temlostProduct.LostProductss.ProductCategory__c.addError('失单产品必填!');
               }else {
                  temlostProduct.LostProductss.ProductCategory__c.addError('失单产品必填!');
               }
               dataCheck = false;
            }
            // 当失单品牌名为其他时,报错字段为失单对手型号(手动) thh 2022-01-17 start
            if ((temlostProduct.LostProductss.LostProduct__c==null && temlostProduct.LostProductss.LostProductMannual__c==null)&&(temlostProduct.LostProductss.ProductCategory__c!=null||temlostProduct.LostProductss.Quantity__c!=null)) {
               if(tempLostBrand.lostBrand.Lost_By_Company__c != '其他'){
                  temlostProduct.LostProductss.LostProduct__c.addError('失单对手型号或失单对手型号(手动)必填!');
               } else{
                  temlostProduct.LostProductss.LostProductMannual__c.addError('失单对手型号或失单对手型号(手动)必填!');
               }
               dataCheck = false;
            }
            // 当失单品牌名为其他时,报错字段为失单对手型号(手动) thh 2022-01-17 end
            // update tcm 20211123 end
         }
         // 当失单品牌名为其他时,报错字段为失单对手型号(手动) thh 2022-01-17 start
         if (productCount == 0 && tempLostBrand.LostProducts != null && tempLostBrand.LostProducts.size() > 0) {
            if(tempLostBrand.lostBrand.Lost_By_Company__c != '其他'){
               tempLostBrand.LostProducts[0].LostProductss.LostProduct__c.addError('至少录入1条失单对手型号信息!');
            }else{
               tempLostBrand.LostProducts[0].LostProductss.LostProductMannual__c.addError('至少录入1条失单对手型号信息!');
            }
            dataCheck = false;
         }
         // 当失单品牌名为其他时,报错字段为失单对手型号(手动) thh 2022-01-17 end
      }
      return dataCheck;
   }
   @AuraEnabled
   public static String searchBrands(){
@@ -481,20 +366,28 @@
      String jsonStr = JSON.serialize(lstPickvals);
        return jsonStr;
   }
   public static list<LostBrand> brandcopy(LostReport report){
      list<LostBrand> tempbrands = new list<LostBrand>();
      for(LostBrand tempbrand: report.LostBrands) {
         LostBrand LostBrand =
            new LostBrand(tempbrand.lineNo,tempbrand.LostProducts );
         LostBrand.lostBrand = tempbrand.lostBrand.clone();
         LostBrand.lostBrand.id = tempbrand.lostBrand.id;
         tempbrands.add(LostBrand);
   @AuraEnabled
   public static string searchBatchIfForProduct(String productName){
      try {
         List<BatchIF_Transfer__c> transfer = [select
                                  Internal_value__c
                                  from BatchIF_Transfer__c
                                  where Dropped_Flag__c = false
                                          and Table__c = 'PCLLostBrand__c' and Column__c = 'Lost_By_Company__c' and External_value__c =: productName];
         if(transfer.size() > 0){
            return transfer[0].Internal_value__c;
         }else{
            return null;
         }
      } catch (Exception e) {
         throw new AuraHandledException(e.getMessage());
      }
      return tempbrands;
   }
   // 数据录入
   @AuraEnabled
   public static Map<String,String> dataEntry(String report1,List<Id> deleteBrandIdList,List<Id> deleteProductIdList){
      // LostReport report = (LostReport)JSON.deserializeUntyped(report1, LostReport.class);
      LostReport report = (LostReport)JSON.deserialize(report1, LostReport.class);
      Map<String,String> messageMap = new Map <String,String>();
      system.debug('save---start:');
@@ -506,12 +399,22 @@
         report.lostReport.recordTypeID  =  report.lostReport.LostType__c== '失单'?Schema.SObjectType.Lost_cancel_report__c.getRecordTypeInfosByDeveloperName().get('PCL_Lost_report').getRecordTypeId() : Schema.SObjectType.Lost_cancel_report__c.getRecordTypeInfosByDeveloperName().get('PCL_PartLost_report').getRecordTypeId();
         report.lostReport.LostTotalAmount__c    = 0;
         report.lostReport.of_lost_system_processor__c   = 0;
         report.lostReport.TotalAmountLost__c    = 0;
         report.lostReport.Lost_reason_main__c = null;
         report.lostReport.Lost_Reason_Sub__c  = null;
         report.lostReport.Lost_By_Company__c = null;
            //批准日不为空时给修改后再批准赋值
         if(report.lostReport.Approved_Day__c != null){
            report.lostReport.ModifyAfterApproval__c = true;
         }
         for(LostBrand tempLostBrand : report.LostBrands) {
            if(string.isNotBlank(tempLostBrand.lostBrand.Lost_By_Company__c)) {
               report.lostReport.LostTotalAmount__c += tempLostBrand.lostBrand.LostPrice__c;
               Decimal med = tempLostBrand.lostBrand.LostPrice__c/1.13/1000;
               Decimal med1 = med.setScale(2);
               // System.debug('---lt123不含税数值(人工)Decimal---'+med);
               // System.debug('---lt123不含税数值(人工)Decimal两位小数---'+med1);
               report.lostReport.TotalAmountLost__c += med1;
               report.lostReport.Lost_reason_main__c =
               report.lostReport.Lost_reason_main__c == null
                  ? tempLostBrand.lostBrand.Lost_reason_main__c
@@ -624,13 +527,57 @@
               }
            }
         }
            List<ProcessInstance> pros = [
            SELECT
            ProcessDefinition.Name,
             (
               SELECT
               Id,
               StepStatus,
               IsPending,
               Comments,
               CreatedDate,
               Actor.Name,
               OriginalActor.Name,
               ProcessNode.Name FROM StepsAndWorkitems order by IsPending DESC, CreatedDate DESC
            )
            FROM ProcessInstance where TargetObjectId =:reportId order by CreatedDate DESC
            ];
            List<ProcessInstanceHistory> items = new List<ProcessInstanceHistory>();
            for(ProcessInstance pro: pros){
               items.addAll(pro.StepsAndWorkitems);
            }
            if(items.size() > 0){
               report.approvalHistorys = items;
            }else{
               List<ProcessInstanceHistory> items1 = new List<ProcessInstanceHistory>();
               report.approvalHistorys = items1;
            }
         // lostReportId = report.lostReport.id;
         system.debug('save---end:');
         messageMap.put('LostReport',JSON.serialize(report));
      }catch (Exception ex) {
      }catch (Exception e) {
         Database.rollback(sp);
         // 这里需要写一些报错信息
         messageMap.put('error', ex.getMessage());
         // if (e.getMessage().contains(',')) {
            //     System.debug(LoggingLevel.INFO, '*** e: ' + e);
            //     String exc = '' + e.getMessage();
            //     Integer left = exc.indexOf(':') + 1;
            //     Integer right = exc.lastIndexOf(':');
            //     String str = exc.substring(left,right);
            //     left = str.indexOf(',') +  1;
            //     String newStr = str.substring(left);
            //     messageMap.put('error', ''+ newStr);
            // }else {
            //     messageMap.put('error', ''+ e.getMessage());
            // }
         messageMap.put('error', ''+ e.getMessage());
         return messageMap;
      }
      return messageMap;
@@ -639,31 +586,66 @@
   
   // 提交
   @AuraEnabled
   public static Map<string,Object> submit(String report1,String reportId){
      LostReport report = (LostReport)JSON.deserialize(report1, LostReport.class);
   public static Map<string,Object> submit(String reportStatus,Boolean modifyAfterApproval,String reportId){
      // LostReport report = (LostReport)JSON.deserialize(report1, LostReport.class);
      Map<string,string> messages = new Map<string,string>();
      if(!'草案'.equals(report.lostReport.Report_Status__c) ) {
      if(!'草案'.equals(reportStatus) && modifyAfterApproval == false) {
         messages.put('error', '只有在草案中才能提交申请!');
         return messages;
      }
      Map<string,Object> objs = new Map<string,Object>();
      Lost_cancel_report__c report = new Lost_cancel_report__c();
      Savepoint sp = Database.setSavepoint();
      try{
         report.lostReport.Id = reportId;
         report.lostReport.Report_Status__c = '提交';
         update report.lostReport;
         Approval.ProcessSubmitRequest psr = new Approval.ProcessSubmitRequest();
         psr.setObjectId(reportId);
         Approval.ProcessResult submitResult = Approval.process(psr);
         report.Id = reportId;
         report.Report_Status__c = '提交';
         update report;
         // Approval.ProcessSubmitRequest psr = new Approval.ProcessSubmitRequest();
         // psr.setObjectId(reportId);
         // Approval.ProcessResult submitResult = Approval.process(psr);
         objs.put('uri', '/apex/PCLLostReportPage');
         objs.put('Id', reportId);
         objs.put('pageStatus', 'View');
         objs.put('submitFlag', '1');
         List<ProcessInstance> pros = [
            SELECT
            ProcessDefinition.Name,
             (
               SELECT
               Id,
               StepStatus,
               IsPending,
               Comments,
               CreatedDate,
               Actor.Name,
               OriginalActor.Name,
               ProcessNode.Name FROM StepsAndWorkitems order by IsPending DESC, CreatedDate DESC
            )
            FROM ProcessInstance where TargetObjectId =:reportId order by CreatedDate DESC
         ];
         List<ProcessInstanceHistory> items = new List<ProcessInstanceHistory>();
         for(ProcessInstance pro:pros){
            items.addAll(pro.StepsAndWorkitems);
         }
         objs.put('approvalHistorys',items);
         return objs;
      }catch(exception ex) {
      }catch(exception e) {
         Database.rollback(sp);
         messages.put('error', ex.getMessage());
         return messages;
         if (e.getMessage().contains(',')) {
                System.debug(LoggingLevel.INFO, '*** e: ' + e);
                String exc = '' + e.getMessage();
                Integer left = exc.indexOf(':') + 1;
                Integer right = exc.lastIndexOf(':');
                String str = exc.substring(left,right);
                left = str.indexOf(',') +  1;
                String newStr = str.substring(left);
                objs.put('error', ''+ newStr);
            }else {
                objs.put('error', ''+ e.getMessage());
            }
         return objs;
      }
   }
   // +++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -679,51 +661,17 @@
      return lostBrand;
   }
   // 删除品牌 这个有参数brandNo,才知道是删除那个品牌
   @AuraEnabled
   public static String Remove(){
      system.debug('RemoveBrandNo:'+RemoveBrandNo);
      list<LostBrand> tempLostBrands = new List<lostBrand>();
      Integer i = 0;
      for(integer j = 0; j< LostReport.LostBrands.size(); j++ ) {
         LostBrand templostBrand  = LostReport.LostBrands.get(j);
         if(j != RemoveBrandNo) {
            templostBrand.lineNo = i;
            tempLostBrands.add(templostBrand);
            i++;
         }else if(!string.isBlank(templostBrand.lostBrand.id)) {
            deleteBrandIDSet.add(templostBrand.lostBrand.id);
         }
      }
      LostReport.LostBrands =  tempLostBrands;
      brandCount = LostReport.LostBrands.size();
      return null;
   }
   // 添加型号, 这个有参数brandNo,才知道是添加到那个品牌
   // update tcm 20211125 添加型号时自动带出品牌 start
   @AuraEnabled
   public static String addProduct(){
      system.debug('brandNo:'+brandNo);
      LostBrand tempLostBrand = LostReport.LostBrands.get(brandNo);
      // PCLLostProduct__c plp = new PCLLostProduct__c(Competitor__c=CompetitionMap.get(LostReport.LostBrands[brandNo].lostBrand.Lost_By_Company__c));
      string brandName = tempLostBrand.lostBrand.Lost_By_Company__c;
      PCLLostProduct__c plp = new PCLLostProduct__c();
      plp.LostBrandName__c = brandName;
      tempLostBrand.LostProducts.add(new PCLLostProducts(tempLostBrand.LostProducts.size(),plp));
      tempLostBrand.ProductSize = tempLostBrand.LostProducts.size();
      return null;
   }
   @AuraEnabled
   public static PCLLostProducts getLostProduct(){
   public static PCLLostProducts getNewLostProduct(Integer lineNo2){
      PCLLostProducts pro = null;
      try {
         PCLLostProduct__c plp = new PCLLostProduct__c();
         return new PCLLostProducts(0,plp);
         pro = new PCLLostProducts(lineNo2);
      } catch (Exception e) {
         throw new AuraHandledException(e.getMessage());
         System.debug(e.getMessage());
      }
      return pro;
   }
   // update tcm 20211125 添加型号时自动带出品牌 end
   // 页面的数据结构
   public class LostReport {
@@ -731,17 +679,22 @@
      public Lost_cancel_report__c lostReport { get; set; }
      @AuraEnabled
      public list<LostBrand> LostBrands { get; set; }
      @AuraEnabled
      public list<ProcessInstanceHistory> approvalHistorys { get; set; }
      public LostReport(){
         lostReport = new Lost_cancel_report__c();
         LostBrands = new list<LostBrand> {new LostBrand(0)};
         approvalHistorys = new list<ProcessInstanceHistory>();
      }
      public LostReport(Lost_cancel_report__c lostReport){
         this.lostReport = lostReport;
         LostBrands = new list<LostBrand> {new LostBrand(0)};
         approvalHistorys = new list<ProcessInstanceHistory>();
      }
      public LostReport(Lost_cancel_report__c lostReport,  list<LostBrand> LostBrands){
         this.lostReport = lostReport;
         this.LostBrands = LostBrands;
         approvalHistorys = new list<ProcessInstanceHistory>();
      }
   }
@@ -754,9 +707,14 @@
      public list<PCLLostProducts> LostProducts;
      @AuraEnabled
      public Integer ProductSize;
      @AuraEnabled
      public Boolean reasonFlag = false;
      @AuraEnabled
      public String brandTitle;
      public LostBrand( integer lineNo ){
         lostBrand = new PCLLostBrand__c();
         this.lineNo = lineNo;
         this.brandTitle = '失单品牌' + (lineNo + 1);
         LostProducts = new list<PCLLostProducts> {new PCLLostProducts()};
         ProductSize = 1;
         lostBrand = new PCLLostBrand__c();
@@ -764,12 +722,14 @@
      public LostBrand( integer lineNo, list<PCLLostProducts> LostProducts ){
         lostBrand = new PCLLostBrand__c();
         this.lineNo = lineNo;
         this.brandTitle = '失单品牌' + (lineNo + 1);
         this.LostProducts = LostProducts;
         ProductSize = LostProducts.size();
      }
      public LostBrand( integer lineNo, list<PCLLostProducts> LostProducts,  PCLLostBrand__c lostBrand){
         this.lostBrand = lostBrand;
         this.lineNo = lineNo;
         this.brandTitle = '失单品牌' + (lineNo + 1);
         this.LostProducts = LostProducts;
         ProductSize = LostProducts.size();
      }
@@ -810,11 +770,12 @@
   public static void search() {
      if (LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.LostProduct__c==null) {
         LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.ProductClass__c=null;
         LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.ProductCategory__c=null;
         LostReport.LostBrands[topNum].LostProducts[secondNum].bool=false;
      }else {
         Product2 prd = [select Id,ProductClass__c, ProductCategory__c from Product2 where Id =:LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.LostProduct__c];
         Product2 prd = [select Id,ProductClass__c
         , ProductCategory__c
         from Product2 where Id =:LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.LostProduct__c];
         if (prd.ProductCategory__c!=null) {
            LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.ProductClass__c=prd.ProductClass__c;
            LostReport.LostBrands[topNum].LostProducts[secondNum].LostProductss.ProductCategory__c=prd.ProductCategory__c;
@@ -831,7 +792,10 @@
   public static string searchProduct(String lostProduct){
      Product2 prd = null;
      try {
         prd = [select Id,ProductClass__c, ProductCategory__c from Product2 where Id =:lostProduct];
         prd = [select Id
         ,ProductClass__c
         , ProductCategory__c
         from Product2 where Id =:lostProduct];
      } catch (Exception e) {
         throw new AuraHandledException(e.getMessage());
      }
@@ -840,4 +804,38 @@
   // add tcm 20211118 end
   @AuraEnabled
    public static String submitForApproval(String recordId, String comments,String action){
      try {
         List<ProcessInstanceWorkitem> workItems = [
            SELECT Id, ProcessInstanceId
            FROM ProcessInstanceWorkitem
            WHERE ProcessInstance.TargetObjectId = :recordId
         ];
         Approval.ProcessWorkitemRequest req = new Approval.ProcessWorkitemRequest();
         req.setWorkitemId(workItems.get(0).Id);
         req.setAction(action);
         req.setComments(comments);
         Approval.ProcessResult result = Approval.process(req);
         return null;
      } catch (Exception e) {
         return e.getMessage();
      }
    }
   @AuraEnabled
    public static String reassignStep(String recordId, String newActorId ){
      try {
         List<ProcessInstanceWorkItem> workItemList = [SELECT ActorId FROM ProcessInstanceWorkitem WHERE ProcessInstance.TargetObjectId = : recordId];
           ApprovalHistoryUtil.reassignStep(workItemList, newActorId);
         return null;
      } catch (Exception e) {
         return e.getMessage();
      }
    }
}