通知的特点

通知通常是下行文,是运用最广泛的一种公文,适用于批转下级机关的公文、发布党内法规、任免人员、传达上级机关的指示、转发上级机关和不相隶属机关的公文、传达和发布要求下级机关办理和需要有关单位周知或者执行的事项等。

通知具有多样性、广泛性、指导性和时效性等特点。根据适用范围,通知可以分为批转性通知、转发性通知、发布性通知、事务性通知、任免性通知、告知性通知。

由于通知的功能多、种类多,因此具体的写法也有较大的区别。总体来说,通知的主体格式要素主要有标题、主送机关、正文、发文机关署名和成文日期等。

 显示效果

示例代码所生成的OFD文件:下载

 示例代码

package test.create.c12;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.bouncycastle.asn1.ASN1BitString;
import org.bouncycastle.asn1.DERBitString;

import iofd.layout.signature.SignatureRequest;
import iofd.official.OfficialDocument;
import iofd.official.gbt9704.bean.SealInfo;
import iofd.official.gbt9704.contants.ContentLevel;
import iofd.official.gbt9704.contants.OfficialDocumentType;
import iofd.official.gbt9704.style.OfficialDocContent;
import iofd.pki.core.asn1.SM2Signature;
import iofd.pki.core.sm2.Sm2Signer;
import iofd.signature.OfdSignatureHelper;
import iofd.signature.OfdSignatureHelper.DigestInfo;
import iofd.signature.asn1.seal.SeSeal;
import test.create.TestDocUtil;
import test.create.c11.C1101SealHelloWorld;

/**
 * 公文:通知
 * */
public class C1208TongZhi {

	public static void main(String[] args) throws Throwable {
		C1208TongZhi o = new C1208TongZhi();
		o.done();
	}

	private void done() throws Throwable {
		String clzName = this.getClass().getSimpleName();
		System.out.println(clzName + " begin");
		
		OfficialDocument official = new OfficialDocument(OfficialDocumentType.TONG_ZHI);
		official.setIssuerAgency("中华人民共和国测试符");
		official.setIssueNum("国办发明电〔2010〕40号");
		
		List titles = new ArrayList<>();
		titles.add("测试符办公厅关于2011年");
		titles.add("部分节假日安排的通知");
		official.setTitles(titles);
		
		List mainSend = new ArrayList<>();
		mainSend.add("各省、自治区、直辖市人民政府");
		mainSend.add("测试符各部委、各直属机构");
		official.setMainSend(mainSend);
		
		official.addContent("根据测试符《关于修改<全国年节及纪念日放假办法>的决定》,为便于各地区、各部门及早合理安排节假日旅游、交通运输、生产经营等有关工作,经测试符批准,现将2011年元旦、春节、清明节、劳动节、端午节、中秋节和国庆节放假调休日期的具体安排通知如下。");
		
		OfficialDocContent p = new OfficialDocContent();
		p.add("一、元旦:", ContentLevel.ONE);
		p.add("1月1日至3日放假公休,共3天。");
		official.addContent(p);
		
		p = new OfficialDocContent();
		p.add("二、春节:", ContentLevel.ONE);
		p.add("2月2日(农历除夕)至8日放假调休,共7天。1月30日(星期日)、2月12日(星期六)上班。");
		official.addContent(p);
		
		p = new OfficialDocContent();
		p.add("三、清明节:", ContentLevel.ONE);
		p.add("4月3日至5日放假调休,共3天。4月2日(星期六)上班。");
		official.addContent(p);
		
		p = new OfficialDocContent();
		p.add("四、劳动节:", ContentLevel.ONE);
		p.add("4月30日至5月2日放假公休,共3天。");
		official.addContent(p);
		
		p = new OfficialDocContent();
		p.add("五、端午节:", ContentLevel.ONE);
		p.add("6月4日至6日放假公休,共3天。");
		official.addContent(p);
		
		p = new OfficialDocContent();
		p.add("六、中秋节:", ContentLevel.ONE);
		p.add("9月10日至12日放假公休,共3天。");
		official.addContent(p);
		
		p = new OfficialDocContent();
		p.add("七、国庆节:", ContentLevel.ONE);
		p.add("10月1日至7日放假调休,共7天。10月8日(星期六)、10月9日(星期日)上班。");
		official.addContent(p);
		
		official.addContent("节假日期间,各地区、各部门要妥善安排好值班和安全、保卫等工作,遇有重大突发事件发生,要按规定及时报告并妥善处置,确保人民群众祥和平安度过节日假期。");
		
		List sealList = new ArrayList<>();
		SealInfo info = new SealInfo();
		info.setName("测试符办公厅");
		info.setDate("2010年 12 月 9 日");
		info.setSeal(C1101SealHelloWorld.SEAL1);
		sealList.add(info);
		official.setSeals(sealList);
		
		official.setPrintOrg("中华人民共和国测试符办公厅");
		official.setPrintDate("2010 年 12 月 9 日");
		
		String digestFileName = TestDocUtil.getOfdFilePath(this.getClass(), "_digest",  false);
		String finalFileName = TestDocUtil.getOfdFilePath(this.getClass(), false);
		official.save(finalFileName);
		
		List signReqList = official.getSignatureRequestList();
		for(int i = 0; signReqList != null && i < signReqList.size(); i++) {
			File ofdFile = new File(finalFileName);
			File digestFile = new File(digestFileName);
			File finalFile = new File(finalFileName);
			SignatureRequest req = signReqList.get(i);
			SeSeal seSeal = req.getSeal();
			OfdSignatureHelper helper = OfdSignatureHelper.newInstance();
			DigestInfo digestInfo = helper.createSm3Digest(ofdFile, digestFile, C1101SealHelloWorld.pubKey, seSeal, req.getBoundary(), req.getClip(), req.getPageRef());
			byte[] digest = digestInfo.getDigest();
			
			/*
			 * 注意:这部分应该使用可靠的签名设备
			 * */
			Sm2Signer signer = new Sm2Signer();
			SM2Signature sign = signer.signWithHash(C1101SealHelloWorld.priKey, digest);
			
			byte[] signature = sign.getEncoded();
			int signVersion = 1;
			ASN1BitString dataHash = new DERBitString(digest);
			ASN1BitString timeInfo = null;//时间戳
			helper.createSm2Signature(digestInfo.getSignatureRoot(), signature, seSeal, C1101SealHelloWorld.pubKey, 
					C1101SealHelloWorld.cert, signVersion, dataHash, timeInfo, digestFile, finalFile);
		}
		
		System.out.println(clzName + " end");
		
	}

}