面向的读者:特别在意自己的工作,想尽可能在意自己的工作、想尽可能做到最好的人,和那些想要帮助自己的组织、公司或者政府机构更好运转的人。

1.优秀的叛逆者,卓越的工作

叛逆者不是为了获得个人荣誉,而是为了引进新的想法,惠及同事、客户或团队成员。叛逆者在工作中扮演着很重要的角色,不论头衔、资历还是经验,他们是发现问题和推动解决问题的人。

成功的叛逆者的秘密

2.如何成为一名优秀的叛逆者

叛逆者会提出尖锐的问题,从不以事物的表象来判断它们的价值,也不接受事情一直以一成不变的方式进行下去。

能够预见未来,并可以早于他人注意到变革的迹象。最重要的是,想要创造积极的改变,而不只是抱怨问题。

有别于常人,时刻保持积极乐观,总是在同事放弃之时仍然相信有可能改变现状。

三种常见的叛逆者倾向

  • 拥有未来思维:相比实现确定可以完成的事情,创造可能性会让他们更有动力。叛逆者会一直在思考解决问题的可能性和更好的替代方案。

  • 总是在工作中提前行动:能够早早地发现新兴趋势。能比大多数同事提前考虑到要做的事。

  • 与众不同:拥有不同的背景和文化,因此在工作中有不同的思维方式。

叛逆者的主导思维方式是以未来为导向的,但同时也兼具过去或现在的思维方式,这让他们在解决当前问题时能使用更加切实可行的方法,也让他们能够利用数据和过去的经验来验证新的想法。

如果你的领导是一个以过去思维为主导的人,你应该给他呈现更多可靠的数据和研究来支持你的想法。对于那些偏向现在思维的领导,你需要向他们展现你的想法如何能被实际地执行,并且达到组织的目标。如果和你对话的是一群拥有未来思维的人,你需要做的,就是说明你想法的可能性和机会。

叛逆者善于在工作中提前行动,但也得注意不要顾此失彼,不论是发现机会,还是创造变革,都需要坚持不懈和不屈不挠。

3.为自己赢得信赖

要达到这个目标,你需要做好以下三个方面:

  1. 你和老板的关系——想领导之所想,急领导之所急

  2. 你和他人的关系——找到你的叛逆者同盟

  3. 你自身的成长——提升你的可信度

获得老板的信赖并消除他担忧的一个方法,就是分开阐明风险和不确定性

  1. 以开放的态度面对你的想法会带来的风险,向老板阐明你计划如何探究和管控这些风险;

  2. 以直率的态度面对不确定和未知的事情,并计划好怎样能够在实践新想法时快速应对问题,以避免产生新的风险。

提升我们的可信度

为了让自己在工作中受到重视,通过行动来增强信任是必不可少的。我们把建立可信度的核心归结为以下几点:

  1. 说到做到,不管你要做的这件事是否能帮助达成销售预期或按时完成项目。

  2. 全心全意帮助你所在的组织获得成功。

  3. 帮助他人,不求回报。

  4. 当你发现事情不按计划进行时,承认错误并提供预警。

  5. 不要八卦或中伤他人。

  6. 尊重他人: 按时参加会议;在截止期限前完成任务;不要超出规定的时间;及时回复有时效性的邮件。

4.掌握组织的全局

越了解工作中事情运转的方式,就越有可能找到最佳的办法来获得支持并将想法变为现实。我们无法改变组织的文化以及相关的政治文化规范。然而,我们需要熟知这些文化背景,并从中发现机会提升我们成功的几率。

事情究竟是如何运转的

为了让工作更有成效,我们需要学习组织实际运转的机制(而不是我们希望的机制或认为组织应有的机制)。而尤为重要的是,我们需要知道组织真正看重的是什么(不管是明确说明还是未明确说明的),以及决策是如何作出的。

真正看重的是什么

  1. 知晓组织最看重的方面,这能引导你调整自己的想法。

  2. 你的想法与组织关注的方面越相关,就越有可能得到组织的重视。

通过在分析中使用至少五个为什么来提问,你能挖掘出阻碍你实施想法的真正原因所在。

了解了你的工作环境,你就成功了一半;想要获得完全的成功,就得学会控制好你对自己的想法和远见的热情。以下是可以使用的几种有效方式

  1. 不要即兴发挥:心中要有目标。别摇摆不定。

  2. 表达感谢:感谢那些对你有帮助的人

5.交流你的想法

任何时候你想展示你的想法,有几点需要牢记在心:

  1. 展示利益攸关的内容

    要获得他人的关注,你需要把你的想法和他们在意的事情联系到一起。向他们展示你的想法和他们想要的东西息息相关。

    你的想法和人们想要达成的目标越相关,人们就越愿意考虑你的想法。如果你的想法能帮助人们从日益严重的恐惧或困惑中解脱出来,人们就会更关注你的想法。如果人们能从更宽广的角度更深刻地感受到问题的严重性,就会更重视你的想法。

  2. 描绘未来美好蓝图

    情感是促使人们去考虑一个想法和影响他们决定的一个重要因素。向其他人描绘你的想法为何能够开创一个更好的局面。并揭露现实情况和未来预期间的差距。让现状看起来不尽人意。

  3. 证明想法是可行的

    强调成功所需和危险所在。介绍计划进行中的里程碑。这能表现出你已经做了大量的功课,并清楚相关的风险、不确定性和实用性。人们会支持他们觉得可行的想法。但不需要向他人展示你做过的所有研究探索和那些杂项。

  4. 态度积极,言辞精辟

    展现出你积极热情的态度,表现得就像成功指日可待似的,但别得意忘形,忽视了别人的意见和想法。言辞要简短精辟。

  5. 寻求支持

    动员大家来支持你的想法。如果组织中百分之十的人都认可一个想法,那这个想法就很有可能被采用。可尽可能多的人沟通你的想法,找到你的盟友去继续说服其他人。

    你的任务是解决值得解决的问题,而不是兜售你解决问题的方式,用开发的态度去迎接他人所提出的新想。

  6. 评估他人对你想法的反应

    仔细倾听他人对你想法的反应。这能帮助你迈出下一步。你需要吸取他人的意见才能前进。如果他们取消你,那就幽默地问听众发笑的原因,记住:问题是叛逆者最好的伙伴。

万一他们不喜欢你的想法该怎么办

明智的方式是停下来并评估这个问题是否足够重要,值不值得你不顾人们冷淡的反应,继续讨论下去。如果连你最信任的同事都不认为你的想法合理和有价值,那就意味着你需要忘掉这个想法,或者继续完善这个想法。

6.应对恐惧、不确定和怀疑情绪

准备几个问题:

这么做如何能帮助我们完成重要的目标之一?这个想法可行吗?你对当前的状况了解多少,那些方面需要学习?风险有哪些?实现这个想法需要哪些资源(资金和人员)?我们可能得到的回报是否值得我们进行这样的投资在?这个想法需要花多长时间实现?你计划的如何去评估进度和成功?如何控制风险和降低未知?

7.叛逆者自理技巧

梦想绝不应该死,但梦想的版本可能需要经常更新。

三项叛逆者自理技巧:撤退(让自己适当休息);重置(重新评估你的目标和当前的情况,重新判断下一步该怎么走);弹性(找到你所需的优势)。

知道何时该退出或者何时该放弃你的想法,只有你自己才知道什么能让你充满能量,什么会损耗你的能力;哪些事还有协商的余地,而哪些事已经让你忍无可忍。

如果你抱有一个新想法,你的第一目标应该是让他人与你一起肩负责任并分享可能的机会,尽快用你的思想去影响他人,从而让你的想法不断成熟。

1.要点

1.不用poi,因为不是操作excel;

2.表格会存在行合并,所有要进行拆分

2.思路

由于拆分的逻辑麻烦,所有先在前台把table的格式把<td>汇聚成一个json格式的数据块传到后台中用json工具去拆分

3.核心代码

前端js做处理把table数据以json格式返回

//获取table的数据,以Json的格式返回
function getJsonCopyData($iframe,hasHeader){
	//---------------1.获取table的内容
	var ke_zeroborder=$iframe.find('.ke-content').find('table').html();
	var txt = "[";
	var rowNums=$(ke_zeroborder).find('tr').length;

	//兼容了带表头的情况,但后台要特殊处理表头 TODO
	for (var j = 0 ; j < rowNums; j++) {
		var r ="";
		var trs=$(ke_zeroborder).find('tr')[j];
		//
		var $tds=$(trs).find('td');
		if($(trs).text()===""){//空行,表示存在这一行和上一行整行合并了
			continue;
		}
		r = "{";
		var index=0;//单独记录下一次key的数字,用于记录从table的body开始每一行的行数
		for (var i = 0; i < $tds.length;i++) {
			var currTd=$tds[i];
			var rowSpan="",colspan="";
			if(typeof($(currTd).attr("rowspan"))!="undefined"){
				rowSpan= "%(#"+$(currTd).attr("rowspan")+"#)%" ;
			}
			//把双引号转义,记录rowspan用于传到后台拆分
			r += "\"" + index + "\"\:\"" + ($(currTd).text().replace(/"([^"]*)"/g, "'$1'")).trim() +rowSpan+"\",";
			index++;
		}
		if($tds.length>0){
			r = r.substring(0, r.length - 1);
			r += "},";
			txt += r;
		}
	}
	txt = txt.substring(0, txt.length - 1);
	txt += "]";
	//去掉html的<br>标签
	return stripHTML(txt).replace(/\s+/g,"");
}

然后是java后台的相关代码

/**
inscfeeInfo:[{"0":"险种","1":"手续费率","2":"佣金净保费结算","3":"佣金全保费结算","4":"业务性质"},{"0":"商业险","1":"50.88%","2":"45.79%","3":"43.20%","4":"车价30万以下;非过户的非营业客车,交商共保%(#2#)%"},{"0":"交强险","1":"50.88%","2":"45.79%","3":"43.20%"},{"0":"单交强","1":"45.58%","2":"41.02%","3":"38.70%","4":"车价30万以下;非过户的非营业客车,单交强"},{"0":"单商业","1":"37.1%","2":"33.39%","3":"31.50%","4":"车价30万以下;非过户的非营业客车,单商业"},{"0":"商业险","1":"50.88%","2":"45.79%","3":"43.20%","4":"车价30万以下;过户的非营业客车:交商共保(不含车损)%(#2#)%"},{"0":"交强险","1":"50.88%","2":"45.79%","3":"43.20%"},{"0":"单交强","1":"45.58%","2":"41.02%","3":"38.70%","4":"车价30万以下;过户的非营业客车:单交强"}]
 **/
 JSONArray jsonArrays= JSON.parseArray(inscfeeInfo);
 int rowNum=jsonArrays.size();//行数,也是 粘贴的行数

 List<JSONObject> listObject=new ArrayList<>();
 //通过数组来保存每一个列的数据,数量就是行数
 for(int i=0;i<rowNum;i++){
	 JSONObject object= (JSONObject) jsonArrays.get(i);
	 listObject.add(object);
 }

 OptionalInt colNumInt=listObject.stream().mapToInt(JSONObject::size).max();//列数
 int colNum=colNumInt.orElse(1);
 String[] colName=new String[colNum];//列的名称
//单独获取表头的数据 和 获取不需要拼接的列号
 for(int i=0;i<colNum;i++){
	 String name=String.valueOf(listObject.get(0).get(i+""));
	 if(StringUtil.isNotEmpty(name)){
		 int rowspanIndex=name.indexOf("%(#");
		 if(rowspanIndex==-1){
			 colName[i]=name;
		 }else{
			 colName[i]=name.substring(0, rowspanIndex);
		 }
	 }
 }
 listObject.remove(0);//去掉表头
 rowNum-=1;//去掉表头所以行数减一

 int[] colIndexs=new int[rowNum];//记录每一行当前的列数
 //获取表的body数据
 for(int i=0;i<colNum;i++){
	 String [] col=new String[rowNum];
	 for(int rowIndex=0;rowIndex<rowNum;){
		 JSONObject object=listObject.get(rowIndex);//获取下一个的json对象
		 String jsonValue=(String) object.get(colIndexs[rowIndex]+"");//获取列的值
		 if(StringUtil.isEmpty(jsonValue)){
			 jsonValue="";
		 }
		 if(jsonValue.contains("%(#")&&jsonValue.contains("#)%")){//存在rowspan的属性,且符合规定的格式
			 String value=jsonValue.substring(0, jsonValue.indexOf("%(#"));;
			 String rowspanStr=jsonValue.substring(jsonValue.indexOf("%(#")+3,jsonValue.indexOf("#)%"));
			 int rowspan=Integer.parseInt(rowspanStr);
			 for(int k=rowIndex;k<rowIndex+rowspan;k++){
				 col[k]=value;
			 }
			 if(rowspan!=0){
				 colIndexs[rowIndex]++;
				 rowIndex=rowIndex+rowspan;
			 }
		 }else{
			col[rowIndex]=jsonValue;
			colIndexs[rowIndex]++;
			rowIndex++;
		 }
	 }
	 list.add(col);
 }

//行列转换,得到行完成的数据的列表
List<String[]> results=new ArrayList<>();
for(int i=0;i<rowNum;i++){
	String[] result=new String[colNum];
	for(int j=0;j<colNum;j++){
		result[j]=list.get(j)[i];
	}
	results.add(result);
}

打包成Jar文件时指定要执行的主类的方式,注意<plugin>都要放在<build><plugins> XXXX</plugins></build>里面,项目都使用spring吗,通过maven命令mvn package就可以打包了。

使用maven-jar-plugin插件打包

<!--打成jar时,设定manifest的参数,比如指定运行的Main class,还有依赖的jar包,加入classpath中-->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>/data/lib</classpathPrefix>
                <mainClass>com.mo.spring.App</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

使用spring-boot-maven-plugin 插件打包

<properties>
    <start-class>com.mo.spring.App</start-class>
</properties>
... ...
<!--如果你的POM是继承spring-boot-starter-parent的话,则不需要下面的配置-->
<plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <version>1.3.5.RELEASE</version>
      <configuration>
        <mainClass>${start-class}</mainClass>
        <layout>ZIP</layout>
      </configuration>
      <executions>
        <execution>
          <goals>
            <goal>repackage</goal>
          </goals>
        </execution>
      </executions>
</plugin>

使用maven-shade-plugin插件打包

用于把多个jar包,打成1个jar包。一般Java项目都会依赖其他第三方jar包,最终打包时,希望把其他jar包包含在一个jar包里

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.4.3</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <manifestEntries>
                            <Main-Class>com.mo.spring.App</Main-Class>
                            <X-Compile-Source-JDK>${maven.compile.source}</X-Compile-Source-JDK>
                            <X-Compile-Target-JDK>${maven.compile.target}</X-Compile-Target-JDK>
                        </manifestEntries>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

参考资料

  1. Maven的几个常用plugin

  2. Maven生成可以直接运行的jar包的多种方式