<<上篇 | 首页 | 下篇>>

电信/联通 三户关系模型 - abc123def - 博客园

三户关系

 

2.1.4.1. 三户模型联通总部营业系统定义了以客户,用户,帐户为主的三户模型

三户的关系如图:
 
客户、帐户与用户。它将客户的基本信息,客户消费的信息和与运营商某个业务的契约信息分开。
这三者之间的关系可以想象成是一棵树,客户位于树的根部,帐户在中间,用户是第三层叶节点。一个客户拥有多个帐户,一个帐户下可以有多个用户,用户是最细的单位,在经营分析中,目前的统计分析大多都是针对用户进行统计,但是由于术语定义的不严格,在很多场合下,将客户和用户混为一谈,例如经常说的客户数通常是用户数(不是绝对),用户级别其实是客户级别。

2.1.4.2. 用户
 用户是系统的基础。
在营业系统中,用户对应的就是业务号码(即手机号码),也就是说一个号码对应一个用户。用户包含于客户,一个客户可能有多个用户,用户和帐户通过帐务关系对应,一个帐户也可能有多个用户。一个用户有一个私人帐户和一个集团帐户。
由于用户有可能被销户,手机号码在冻结一段时间以后重新拿出来使用,因此目前也存在一个手机号码对应多个用户的情况,但是同时有效在使用的,只有一个用户。
一个用户通过唯一的用户标识来确定。
用户信息描述一个用户使用联通业务的业务信息,用户信息里面存放和业务相关的信息,包括手机号码,开户时间,开户地点,所选套餐,用户状态,用户类型,用户级别,用户停机时间,用户销户时间等等和使用联通业务相关的信息,只有使用联通业务,才存在用户信息。
当一个客户入网时,例如选定CDMA业务,一般情况下会为这个客户建立一套三户关系,当然如果一个客户申请一项新业务,例如193长途,如果想用已有的帐户缴费,可以只需建一个新用户,如果它想在另一个帐户缴费,则再建一个新的帐户。在客户信息,我们关注的信息是客户类型、客户级别、性别、年龄、职业等。在帐户中,我们通常关注的是帐户的缴费类型、预存款等,用户入网时可以首先指定他是用现金缴费还是银行代扣等信息,对于银行代扣等类型,还记录银行名称、帐号等。用户信息中,有用户的手机号、服务状态、入网时间、是否有效等契约信息。
关于用户,还有一个子业务信息,或称特服,例如来电显示、移动秘书台、三方通话,这些信息表明该用户除了基本的通话功能外,还有哪些特殊的服务,它们通常和服务属性存储在一块(其实特服本身就是一种服务属性),例如漫游级别、长途级别等。有的系统通过掩码来表明用户订购了哪些特服或是哪些服务属性(如东软、神码的营帐),有的是通过单独的表来维护用户开通了哪些特服(如亚信的营帐)。
2.1.4.3. 客户
客户可分为个人客户,单位客户,集团客户。一个客户可以包含多个用户,客户通过唯一的客户标识来确定。
客户描述一个客户的自然属性,客户可以和用户一一对应,也可以和用户一对多。即使不使用联通业务,也可能存在客户,因为客户是自然存在的。
客户信息包含客户名,地址,邮政编码,性别,年龄,职业,证件号码等等信息,是自然存在的信息。
2.1.4.4. 帐户
帐户是用户缴费的依据,用户的费用信息是与帐户对应的。一个用户可以对应多个帐户,一个帐户也可能由多个用户使用。
在用户进行缴费,充值,消费,销帐的时候,所依据的标识是帐户标识。

阅读全文……

标签 : ,

cxf学习笔记之传递附件 - ll_feng - ITeye技术网站

注意事项 
1、服务端和客户端的数据对象中,用来存储附件的属性都要用“@XmlMimeType("application/octet-stream")”进行注解,如下: 
Java代码  收藏代码
  1. @XmlMimeType("application/octet-stream")  
  2. private DataHandler photo;  


2、服务端和客户端的web服务配置都要声明mtom-enabled=true 
服务端如果在spring中配置,如下: 
Java代码  收藏代码
  1. <jaxws:endpoint id="register"  implementor="cn.ibeans.ws.impl.RegisterWebServiceImpl" address="/ws/register">  
  2.     <jaxws:properties>  
  3.         <entry key="mtom-enabled" value="true"/>    
  4.     </jaxws:properties>  
  5. </jaxws:endpoint>  


客户端,如果用代码配置(也可用spring配置,类似服务端),如下: 
Java代码  收藏代码
  1. Map<String,Object> map = new HashMap<String,Object>();  
  2. map.put("mtom-enabled"true);  
  3. factory = new JaxWsProxyFactoryBean();  
  4. factory.setProperties(map);  

 

 

 

阅读全文……

标签 :

3 ways to read files using Java NIO | How to do in JAVA

New I/O, usually called NIO, is a collection of APIs that offer additional capabilities for intensive I/O operations. It was introduced with the Java 1.4 release by Sun Microsystems to complement an existing standard I/O. The extended NIO that offers further new file system APIs, called NIO2, was released with Java SE 7 (“Dolphin”).

NIO related questions are very popular in java interviews now-a-days.

NIO2 provides two major methods of reading a file:

  • Using buffer and channel classes
  • Using Path and Files classes

In this post, I am showing a couple of ways to read a file from file system. So lets start them by first showing old famous approach first, so that we can see what really changed.

Old famous I/O way

This example shows how we have been reading a text file using old I/O library APIs. It uses a BufferedReader object for reading. Another way can be using InputStream implementation.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.howtodoinjava.test.nio;
 
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
 
public class WithoutNIOExample
{
    public static void main(String[] args)
    {
        BufferedReader br = null;
        String sCurrentLine = null;
        try
        {
            br = new BufferedReader(
            new FileReader("test.txt"));
            while ((sCurrentLine = br.readLine()) != null)
            {
                System.out.println(sCurrentLine);
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if (br != null)
                br.close();
            } catch (IOException ex)
            {
                ex.printStackTrace();
            }
        }
    }
}

1) Read a small file in buffer of file size

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.howtodoinjava.test.nio;
 
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
 
public class ReadFileWithFileSizeBuffer
{
    public static void main(String args[])
    {
        try
        {
            RandomAccessFile aFile = new RandomAccessFile(
                            "test.txt","r");
            FileChannel inChannel = aFile.getChannel();
            long fileSize = inChannel.size();
            ByteBuffer buffer = ByteBuffer.allocate((int) fileSize);
            inChannel.read(buffer);
            buffer.rewind();
            buffer.flip();
            for (int i = 0; i < fileSize; i++)
            {
                System.out.print((char) buffer.get());
            }
            inChannel.close();
            aFile.close();
        }
        catch (IOException exc)
        {
            System.out.println(exc);
            System.exit(1);
        }
    }
}

2) Read a large file in chunks with fixed size buffer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.howtodoinjava.test.nio;
 
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
 
public class ReadFileWithFixedSizeBuffer
{
    public static void main(String[] args) throws IOException
    {
        RandomAccessFile aFile = new RandomAccessFile
                ("test.txt", "r");
        FileChannel inChannel = aFile.getChannel();
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        while(inChannel.read(buffer) > 0)
        {
            buffer.flip();
            for (int i = 0; i < buffer.limit(); i++)
            {
                System.out.print((char) buffer.get());
            }
            buffer.clear(); // do something with the data and clear/compact it.
        }
        inChannel.close();
        aFile.close();
    }
}

3) Faster file copy with mapped byte buffer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.howtodoinjava.test.nio;
 
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
 
public class ReadFileWithMappedByteBuffer
{
    public static void main(String[] args) throws IOException
    {
        RandomAccessFile aFile = new RandomAccessFile
                ("test.txt", "r");
        FileChannel inChannel = aFile.getChannel();
        MappedByteBuffer buffer = inChannel.map(FileChannel.MapMode.READ_ONLY, 0, inChannel.size());
        buffer.load(); 
        for (int i = 0; i < buffer.limit(); i++)
        {
            System.out.print((char) buffer.get());
        }
        buffer.clear(); // do something with the data and clear/compact it.
        inChannel.close();
        aFile.close();
    }
}

All above techniques will read the content of file and print it to console. You can do whatever you want once you have read it.

阅读全文……

标签 :