diff --git a/VERSION.TXT b/VERSION.TXT
index 51bad18..80c1e16 100644
--- a/VERSION.TXT
+++ b/VERSION.TXT
@@ -14,11 +14,19 @@
- SkuModule //TODO FIXME 没有处理到异常。参考GoodsMoudle的save
+ TODO -NEXT
+- 给SKU增加一个备注字段
+- 增加根据产品信息查询订单的功能,查询某个产品在哪几个订单销售过
- 增加订单号
- 重构order模块。把jsp和module中return "done"全部改成return "ok"。和其他模块统一起来
- 把deploy脚本中sku_prop_type的数据补全
- 增加quratz定时调度任务。
-- 增加根据产品信息查询订单的功能,查询某个产品在哪几个订单销售过
+
+
+mz-g-0.3.2015.0924
+==============================================
+1、重构privilege部分的代码。为shiro做准备,把shiro的基础类准备好
+2、调整品类代码,包括数据库
+3、调整配置文件位置及内容
mz-g-0.3.2015.0913
diff --git a/pom.xml b/pom.xml
index dc8cfb5..66cd10a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
org.nutz
nutz
- 1.b.53-SNAPSHOT
+ 1.b.53
log4j
@@ -99,8 +99,8 @@
maven-compiler-plugin
2.5.1
-
- 1.7
+
+ 1.8
diff --git a/sql/mz-g-deploy.sql b/sql/mz-g-deploy.sql
index d82f43e..17d0b33 100644
--- a/sql/mz-g-deploy.sql
+++ b/sql/mz-g-deploy.sql
@@ -25,7 +25,7 @@ CREATE TABLE IF NOT EXISTS `t_cart` (
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=1 COMMENT='购物车';
--- 正在导出表 mz-g.t_cart 的数据:~1 rows (大约)
+-- 正在导出表 mz-g.t_cart 的数据:~2 rows (大约)
DELETE FROM `t_cart`;
/*!40000 ALTER TABLE `t_cart` DISABLE KEYS */;
INSERT INTO `t_cart` (`id`, `user_id`, `cust_id`, `sku_more_id`, `count`) VALUES
@@ -109,7 +109,7 @@ CREATE TABLE IF NOT EXISTS `t_goods` (
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8 COMMENT='商品表。 TODO -OPT 以后扩展:供应商,厂家,品牌等';
--- 正在导出表 mz-g.t_goods 的数据:~7 rows (大约)
+-- 正在导出表 mz-g.t_goods 的数据:~6 rows (大约)
DELETE FROM `t_goods`;
/*!40000 ALTER TABLE `t_goods` DISABLE KEYS */;
INSERT INTO `t_goods` (`id`, `cate_code`, `gname`, `words`, `img`, `ctime`, `utime`, `state`) VALUES
@@ -173,7 +173,7 @@ CREATE TABLE IF NOT EXISTS `t_order` (
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
--- 正在导出表 mz-g.t_order 的数据:~8 rows (大约)
+-- 正在导出表 mz-g.t_order 的数据:~6 rows (大约)
DELETE FROM `t_order`;
/*!40000 ALTER TABLE `t_order` DISABLE KEYS */;
INSERT INTO `t_order` (`id`, `user_id`, `cust_id`, `dtime`) VALUES
@@ -188,12 +188,60 @@ INSERT INTO `t_order` (`id`, `user_id`, `cust_id`, `dtime`) VALUES
/*!40000 ALTER TABLE `t_order` ENABLE KEYS */;
+-- 导出 表 mz-g.t_permission 结构
+CREATE TABLE IF NOT EXISTS `t_permission` (
+ `id` bigint(64) NOT NULL AUTO_INCREMENT,
+ `name` varchar(50) NOT NULL,
+ `al` varchar(50) DEFAULT NULL,
+ `dt` varchar(500) DEFAULT NULL,
+ `ct` datetime DEFAULT NULL,
+ `ut` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `name` (`name`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- 正在导出表 mz-g.t_permission 的数据:~0 rows (大约)
+DELETE FROM `t_permission`;
+/*!40000 ALTER TABLE `t_permission` DISABLE KEYS */;
+/*!40000 ALTER TABLE `t_permission` ENABLE KEYS */;
+
+
+-- 导出 表 mz-g.t_role 结构
+CREATE TABLE IF NOT EXISTS `t_role` (
+ `id` bigint(64) NOT NULL AUTO_INCREMENT,
+ `name` varchar(50) NOT NULL,
+ `al` varchar(50) DEFAULT NULL,
+ `dt` varchar(500) DEFAULT NULL,
+ `ct` datetime DEFAULT NULL,
+ `ut` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `name` (`name`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- 正在导出表 mz-g.t_role 的数据:~0 rows (大约)
+DELETE FROM `t_role`;
+/*!40000 ALTER TABLE `t_role` DISABLE KEYS */;
+/*!40000 ALTER TABLE `t_role` ENABLE KEYS */;
+
+
+-- 导出 表 mz-g.t_role_permission 结构
+CREATE TABLE IF NOT EXISTS `t_role_permission` (
+ `role_id` bigint(64) DEFAULT NULL,
+ `permission_id` bigint(64) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- 正在导出表 mz-g.t_role_permission 的数据:~0 rows (大约)
+DELETE FROM `t_role_permission`;
+/*!40000 ALTER TABLE `t_role_permission` DISABLE KEYS */;
+/*!40000 ALTER TABLE `t_role_permission` ENABLE KEYS */;
+
+
-- 导出 表 mz-g.t_sku 结构
CREATE TABLE IF NOT EXISTS `t_sku` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sid` varchar(50) NOT NULL COMMENT 'sku_id。sku_xxx的唯一id,因为id可能在不同的sku_xxx表中重复',
`model` varchar(50) NOT NULL COMMENT '(一级分类)款型/颜色',
- `type` varchar(50) NOT NULL COMMENT '(二级分类)分类。如尺码标准,对应t_sku_type表',
+ `type` varchar(50) NOT NULL COMMENT '(二级分类)分类。如尺码标准,对应t_sku_prop_type表',
`ptime` datetime NOT NULL COMMENT '入库日期',
`pprice` int(11) NOT NULL COMMENT '入库价格',
`sprice` int(11) NOT NULL COMMENT '零售价格',
@@ -402,23 +450,49 @@ INSERT INTO `t_sku_prop_type` (`cate_code`, `item`, `name`, `title`, `evalue`, `
-- 导出 表 mz-g.t_user 结构
CREATE TABLE IF NOT EXISTS `t_user` (
- `id` int(11) NOT NULL AUTO_INCREMENT,
- `login_name` varchar(50) NOT NULL DEFAULT '0',
- `pwd` varchar(50) NOT NULL DEFAULT '0' COMMENT '加密',
- `state` int(1) unsigned NOT NULL DEFAULT '0' COMMENT '0:初始;1:正常;2:已删除',
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='用户表。暂时没用到。';
-
--- 正在导出表 mz-g.t_user 的数据:~3 rows (大约)
+ `id` bigint(64) NOT NULL AUTO_INCREMENT,
+ `name` varchar(50) NOT NULL,
+ `passwd` varchar(128) DEFAULT NULL,
+ `locked` tinyint(1) DEFAULT NULL,
+ `state` varchar(50) DEFAULT NULL,
+ `ct` datetime DEFAULT NULL,
+ `ut` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `name` (`name`)
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
+
+-- 正在导出表 mz-g.t_user 的数据:~0 rows (大约)
DELETE FROM `t_user`;
/*!40000 ALTER TABLE `t_user` DISABLE KEYS */;
-INSERT INTO `t_user` (`id`, `login_name`, `pwd`, `state`) VALUES
- (1, 'Yolanda', '0', 1),
- (2, 'Wukong', '0', 1),
- (3, 'test', '0', 1);
+INSERT INTO `t_user` (`id`, `name`, `passwd`, `locked`, `state`, `ct`, `ut`) VALUES
+ (1, 'admin', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', 0, '1', '2015-09-12 17:28:48', '2015-09-12 17:28:48');
/*!40000 ALTER TABLE `t_user` ENABLE KEYS */;
+-- 导出 表 mz-g.t_user_permission 结构
+CREATE TABLE IF NOT EXISTS `t_user_permission` (
+ `u_id` bigint(64) DEFAULT NULL,
+ `permission_id` bigint(64) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- 正在导出表 mz-g.t_user_permission 的数据:~0 rows (大约)
+DELETE FROM `t_user_permission`;
+/*!40000 ALTER TABLE `t_user_permission` DISABLE KEYS */;
+/*!40000 ALTER TABLE `t_user_permission` ENABLE KEYS */;
+
+
+-- 导出 表 mz-g.t_user_role 结构
+CREATE TABLE IF NOT EXISTS `t_user_role` (
+ `u_id` bigint(64) DEFAULT NULL,
+ `role_id` bigint(64) DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- 正在导出表 mz-g.t_user_role 的数据:~0 rows (大约)
+DELETE FROM `t_user_role`;
+/*!40000 ALTER TABLE `t_user_role` DISABLE KEYS */;
+/*!40000 ALTER TABLE `t_user_role` ENABLE KEYS */;
+
+
-- 导出 视图 mz-g.v_cart 结构
-- 创建临时表以解决视图依赖性错误
CREATE TABLE `v_cart` (
diff --git a/src/main/java/band/wukong/mz/common/privilege/module/UserModule.java b/src/main/java/band/wukong/mz/common/privilege/module/UserModule.java
index 1d961a9..67f2d61 100644
--- a/src/main/java/band/wukong/mz/common/privilege/module/UserModule.java
+++ b/src/main/java/band/wukong/mz/common/privilege/module/UserModule.java
@@ -60,17 +60,16 @@ public Object login(@Param("name") String name, @Param("password") String passwo
}
@At(top = true)
- @Ok("jsp:view.main")
- @Fail("redirect:/entry.io")
- public void main() {
- }
-
- @At
@Ok(">>:/") // 跟其他方法不同,这个方法完成后就跳转首页了
public void logout(HttpSession session) {
session.invalidate();
}
+ @At(top = true)
+ @Ok("jsp:view.main")
+ public void main() {
+ }
+
@At
@Ok("jsp:view.common.privilege.user_list")
public void index() {
diff --git a/src/main/java/band/wukong/mz/g/category/SimpleCateConst.java b/src/main/java/band/wukong/mz/g/category/SimpleCateConst.java
index abb01cc..29968e2 100644
--- a/src/main/java/band/wukong/mz/g/category/SimpleCateConst.java
+++ b/src/main/java/band/wukong/mz/g/category/SimpleCateConst.java
@@ -33,9 +33,9 @@ public class SimpleCateConst {
public static final String CATE_CODE_E_WZ = "S-5";
/**
- * 品类代码-F奶粉
+ * 品类代码-F零食
*/
- public static final String CATE_CODE_F_NF = "S-6";
+ public static final String CATE_CODE_F_LS = "S-6";
/**
* 品类代码-G包包
@@ -48,33 +48,18 @@ public class SimpleCateConst {
public static final String CATE_CODE_H_MZ = "S-8";
/**
- * 品类代码-I玩具
+ * 品类代码-I尿不湿
*/
- public static final String CATE_CODE_I_WJ = "S-9";
+ public static final String CATE_CODE_I_NBS = "S-9";
/**
- * 品类代码-J尿不湿
+ * 品类代码-J玩具
*/
- public static final String CATE_CODE_J_NBS = "S-10";
+ public static final String CATE_CODE_J_WJ = "S-10";
/**
- * 品类代码-K代购
+ * 品类代码-K文具
*/
- public static final String CATE_CODE_K_DG = "S-11";
-
- /**
- * 品类代码-L杯子&奶瓶
- */
- public static final String CATE_CODE_K_BZ = "S-12";
-
- /**
- * 品类代码-M妈妈
- */
- public static final String CATE_CODE_M_MM = "S-13";
-
- /**
- * 品类代码-N文具
- */
- public static final String CATE_CODE_N_WJ = "S-14";
+ public static final String CATE_CODE_K_WJ = "S-11";
}
diff --git a/src/main/java/band/wukong/mz/nutz/NutDruidFilter.java b/src/main/java/band/wukong/mz/nutz/integration/druid/NutDruidFilter.java
similarity index 95%
rename from src/main/java/band/wukong/mz/nutz/NutDruidFilter.java
rename to src/main/java/band/wukong/mz/nutz/integration/druid/NutDruidFilter.java
index 005b0f4..d7a698d 100644
--- a/src/main/java/band/wukong/mz/nutz/NutDruidFilter.java
+++ b/src/main/java/band/wukong/mz/nutz/integration/druid/NutDruidFilter.java
@@ -1,4 +1,4 @@
-package band.wukong.mz.nutz;
+package band.wukong.mz.nutz.integration.druid;
import org.nutz.mvc.NutFilter;
diff --git a/src/main/java/band/wukong/mz/nutz/integration/shiro/NutzDaoRealm.java b/src/main/java/band/wukong/mz/nutz/integration/shiro/NutzDaoRealm.java
new file mode 100644
index 0000000..5997ab7
--- /dev/null
+++ b/src/main/java/band/wukong/mz/nutz/integration/shiro/NutzDaoRealm.java
@@ -0,0 +1,115 @@
+package band.wukong.mz.nutz.integration.shiro;
+
+import band.wukong.mz.common.privilege.bean.Permission;
+import band.wukong.mz.common.privilege.bean.Role;
+import band.wukong.mz.common.privilege.bean.User;
+import band.wukong.mz.util.Toolkit;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.*;
+import org.apache.shiro.authc.credential.CredentialsMatcher;
+import org.apache.shiro.authz.AuthorizationException;
+import org.apache.shiro.authz.AuthorizationInfo;
+import org.apache.shiro.authz.SimpleAuthorizationInfo;
+import org.apache.shiro.cache.CacheManager;
+import org.apache.shiro.realm.AuthorizingRealm;
+import org.apache.shiro.subject.PrincipalCollection;
+import org.apache.shiro.util.ByteSource;
+import org.nutz.dao.Cnd;
+import org.nutz.dao.Dao;
+import org.nutz.integration.shiro.CaptchaUsernamePasswordToken;
+import org.nutz.ioc.loader.annotation.Inject;
+import org.nutz.lang.Strings;
+import org.nutz.mvc.Mvcs;
+
+/**
+ * 用NutDao来实现Shiro的Realm
+ *
+ * @author wukong(wukonggg@139.com)
+ */
+public class NutzDaoRealm extends AuthorizingRealm {
+
+ @Inject
+ private Dao dao;
+
+ public NutzDaoRealm() {
+ this(null, null);
+ }
+
+ public NutzDaoRealm(CacheManager cacheManager) {
+ this(cacheManager, null);
+ }
+
+ public NutzDaoRealm(CredentialsMatcher matcher) {
+ this(null, matcher);
+ }
+
+ public NutzDaoRealm(CacheManager cacheManager, CredentialsMatcher matcher) {
+ super(cacheManager, matcher);
+ setAuthenticationTokenClass(CaptchaUsernamePasswordToken.class);
+ }
+
+ public Dao dao() {
+ if (dao == null) {
+ dao = Mvcs.ctx().getDefaultIoc().get(Dao.class, "dao");
+ return dao;
+ }
+ return dao;
+ }
+
+ public void setDao(Dao dao) {
+ this.dao = dao;
+ }
+
+ public AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
+ //null usernames are invalid
+ if (principals == null) {
+ throw new AuthorizationException("PrincipalCollection method argument cannot be null.");
+ }
+ int userId = (Integer) principals.getPrimaryPrincipal();
+ User user = dao().fetch(User.class, userId);
+ if (user == null)
+ return null;
+ if (user.isLocked())
+ throw new LockedAccountException("Account [" + user.getName() + "] is locked.");
+
+ SimpleAuthorizationInfo auth = new SimpleAuthorizationInfo();
+ user = dao().fetchLinks(user, null);
+ if (user.getRoles() != null) {
+ dao().fetchLinks(user.getRoles(), null);
+ for (Role role : user.getRoles()) {
+ auth.addRole(role.getName());
+ if (role.getPermissions() != null) {
+ for (Permission p : role.getPermissions()) {
+ auth.addStringPermission(p.getName());
+ }
+ }
+ }
+ }
+ if (user.getPermissions() != null) {
+ for (Permission p : user.getPermissions()) {
+ auth.addStringPermission(p.getName());
+ }
+ }
+ return auth;
+ }
+
+ public AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
+ CaptchaUsernamePasswordToken upToken = (CaptchaUsernamePasswordToken) token;
+
+ if (Strings.isBlank(upToken.getCaptcha()))
+ throw new AuthenticationException("验证码不能为空");
+ String _captcha = Strings.sBlank(SecurityUtils.getSubject().getSession(true).getAttribute(Toolkit.captcha_attr));
+ if (!upToken.getCaptcha().equalsIgnoreCase(_captcha))
+ throw new AuthenticationException("验证码错误");
+
+ User user = dao().fetch(User.class, Cnd.where("name", "=", upToken.getUsername()));
+ if (user == null)
+ return null;
+ if (user.isLocked())
+ throw new LockedAccountException("Account [" + upToken.getUsername() + "] is locked.");
+ SimpleAccount account = new SimpleAccount(user.getId(), user.getPassword(), getName());
+ account.setCredentialsSalt(ByteSource.Util.bytes(user.getSalt()));
+ return account;
+ }
+
+}
diff --git a/src/main/java/band/wukong/mz/nutz/NutzTestHelper.java b/src/main/java/band/wukong/mz/nutz/test/NutzTestHelper.java
similarity index 96%
rename from src/main/java/band/wukong/mz/nutz/NutzTestHelper.java
rename to src/main/java/band/wukong/mz/nutz/test/NutzTestHelper.java
index be0a87e..7cd5a76 100644
--- a/src/main/java/band/wukong/mz/nutz/NutzTestHelper.java
+++ b/src/main/java/band/wukong/mz/nutz/test/NutzTestHelper.java
@@ -1,4 +1,4 @@
-package band.wukong.mz.nutz;
+package band.wukong.mz.nutz.test;
import org.nutz.ioc.Ioc;
import org.nutz.ioc.impl.NutIoc;
diff --git a/src/main/resources/shiro.ini b/src/main/resources/shiro.ini
index 8eaec47..ee7656c 100644
--- a/src/main/resources/shiro.ini
+++ b/src/main/resources/shiro.ini
@@ -1,4 +1,17 @@
[main]
+sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
+nutzdao_realm = band.wukong.mz.nutz.integration.shiro.NutzDaoRealm
+nutzdao_realm.credentialsMatcher = $sha256Matcher
+
+authc = org.nutz.integration.shiro.CaptchaFormAuthenticationFilter
+authc.loginUrl = /entry
+logout.redirectUrl= /entry
[urls]
-/* = anon
\ No newline at end of file
+/rs/* = anon
+/error = anon
+/logout = logout
+/user/** = authc
+/customer/** = authc
+/sku/** = authc
+/sale/** = authc
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 3abbc7a..6293f98 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -49,7 +49,7 @@
nutz
- band.wukong.mz.nutz.NutDruidFilter
+ band.wukong.mz.nutz.integration.druid.NutDruidFilter
modules
band.wukong.mz.MainModule
diff --git a/src/test/java/band/wukong/mz/g/category/SimpleCategoryServiceTest.java b/src/test/java/band/wukong/mz/g/category/SimpleCategoryServiceTest.java
index 0e11b58..91e727b 100644
--- a/src/test/java/band/wukong/mz/g/category/SimpleCategoryServiceTest.java
+++ b/src/test/java/band/wukong/mz/g/category/SimpleCategoryServiceTest.java
@@ -2,7 +2,7 @@
import band.wukong.mz.g.category.bean.Category;
import band.wukong.mz.g.category.service.SimpleCategoryService;
-import band.wukong.mz.nutz.NutzTestHelper;
+import band.wukong.mz.nutz.test.NutzTestHelper;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
diff --git a/src/test/java/band/wukong/mz/g/customer/service/CustomerServiceTest.java b/src/test/java/band/wukong/mz/g/customer/service/CustomerServiceTest.java
index d235d90..27fa503 100644
--- a/src/test/java/band/wukong/mz/g/customer/service/CustomerServiceTest.java
+++ b/src/test/java/band/wukong/mz/g/customer/service/CustomerServiceTest.java
@@ -1,7 +1,7 @@
package band.wukong.mz.g.customer.service;
import band.wukong.mz.g.customer.bean.Customer;
-import band.wukong.mz.nutz.NutzTestHelper;
+import band.wukong.mz.nutz.test.NutzTestHelper;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
diff --git a/src/test/java/band/wukong/mz/g/sale/dao/impl/ItemDaoImplTest.java b/src/test/java/band/wukong/mz/g/sale/dao/impl/ItemDaoImplTest.java
index d7bd730..dc5c6b2 100644
--- a/src/test/java/band/wukong/mz/g/sale/dao/impl/ItemDaoImplTest.java
+++ b/src/test/java/band/wukong/mz/g/sale/dao/impl/ItemDaoImplTest.java
@@ -2,7 +2,7 @@
import band.wukong.mz.g.sale.bean.Item;
import band.wukong.mz.g.sale.dao.ItemDao;
-import band.wukong.mz.nutz.NutzTestHelper;
+import band.wukong.mz.nutz.test.NutzTestHelper;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
diff --git a/src/test/java/band/wukong/mz/g/sale/dao/impl/OrderDaoImplTest.java b/src/test/java/band/wukong/mz/g/sale/dao/impl/OrderDaoImplTest.java
index 7289211..2cec046 100644
--- a/src/test/java/band/wukong/mz/g/sale/dao/impl/OrderDaoImplTest.java
+++ b/src/test/java/band/wukong/mz/g/sale/dao/impl/OrderDaoImplTest.java
@@ -6,7 +6,7 @@
import band.wukong.mz.g.sale.bean.Item;
import band.wukong.mz.g.sale.bean.Order;
import band.wukong.mz.g.sale.dao.OrderDao;
-import band.wukong.mz.nutz.NutzTestHelper;
+import band.wukong.mz.nutz.test.NutzTestHelper;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
diff --git a/src/test/java/band/wukong/mz/g/sale/servcie/impl/CartServiceImplTest.java b/src/test/java/band/wukong/mz/g/sale/servcie/impl/CartServiceImplTest.java
index c3e9c2d..4fc668f 100644
--- a/src/test/java/band/wukong/mz/g/sale/servcie/impl/CartServiceImplTest.java
+++ b/src/test/java/band/wukong/mz/g/sale/servcie/impl/CartServiceImplTest.java
@@ -3,7 +3,7 @@
import band.wukong.mz.g.customer.bean.Customer;
import band.wukong.mz.g.sale.bean.Cart;
import band.wukong.mz.g.sale.service.CartService;
-import band.wukong.mz.nutz.NutzTestHelper;
+import band.wukong.mz.nutz.test.NutzTestHelper;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
diff --git a/src/test/java/band/wukong/mz/g/sale/servcie/impl/OrderServiceImplTest.java b/src/test/java/band/wukong/mz/g/sale/servcie/impl/OrderServiceImplTest.java
index 7c3d522..01c7c56 100644
--- a/src/test/java/band/wukong/mz/g/sale/servcie/impl/OrderServiceImplTest.java
+++ b/src/test/java/band/wukong/mz/g/sale/servcie/impl/OrderServiceImplTest.java
@@ -12,7 +12,7 @@
import band.wukong.mz.g.sale.service.DiscountRule;
import band.wukong.mz.g.sale.service.OrderService;
import band.wukong.mz.g.sku.dao.SkuMoreDao;
-import band.wukong.mz.nutz.NutzTestHelper;
+import band.wukong.mz.nutz.test.NutzTestHelper;
import band.wukong.util.DateUtil;
import org.junit.After;
import org.junit.Assert;
diff --git a/src/test/java/band/wukong/mz/g/sku/dao/impl/GoodsDaoImplTest.java b/src/test/java/band/wukong/mz/g/sku/dao/impl/GoodsDaoImplTest.java
index 6942749..ad766d1 100644
--- a/src/test/java/band/wukong/mz/g/sku/dao/impl/GoodsDaoImplTest.java
+++ b/src/test/java/band/wukong/mz/g/sku/dao/impl/GoodsDaoImplTest.java
@@ -4,7 +4,7 @@
import band.wukong.mz.g.category.SimpleCateConst;
import band.wukong.mz.g.sku.bean.Goods;
import band.wukong.mz.g.sku.dao.GoodsDao;
-import band.wukong.mz.nutz.NutzTestHelper;
+import band.wukong.mz.nutz.test.NutzTestHelper;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
@@ -13,7 +13,6 @@
import org.nutz.dao.pager.Pager;
import org.nutz.ioc.Ioc;
-import java.util.Date;
import java.util.List;
/**
diff --git a/src/test/java/band/wukong/mz/g/sku/dao/impl/SkuDaoImplTest.java b/src/test/java/band/wukong/mz/g/sku/dao/impl/SkuDaoImplTest.java
index 7d18aaf..cc4e5b7 100644
--- a/src/test/java/band/wukong/mz/g/sku/dao/impl/SkuDaoImplTest.java
+++ b/src/test/java/band/wukong/mz/g/sku/dao/impl/SkuDaoImplTest.java
@@ -7,7 +7,7 @@
import band.wukong.mz.g.sku.dao.GoodsDao;
import band.wukong.mz.g.sku.dao.SkuDao;
import band.wukong.mz.g.sku.service.SkuPropTypeService;
-import band.wukong.mz.nutz.NutzTestHelper;
+import band.wukong.mz.nutz.test.NutzTestHelper;
import band.wukong.util.DateUtil;
import org.junit.After;
import org.junit.Assert;
diff --git a/src/test/java/band/wukong/mz/g/sku/service/SkuMoreViewServiceTest.java b/src/test/java/band/wukong/mz/g/sku/service/SkuMoreViewServiceTest.java
index 6364ee0..bddcc57 100644
--- a/src/test/java/band/wukong/mz/g/sku/service/SkuMoreViewServiceTest.java
+++ b/src/test/java/band/wukong/mz/g/sku/service/SkuMoreViewServiceTest.java
@@ -1,13 +1,12 @@
package band.wukong.mz.g.sku.service;
import band.wukong.mz.g.sku.bean.SkuMoreView;
-import band.wukong.mz.nutz.NutzTestHelper;
+import band.wukong.mz.nutz.test.NutzTestHelper;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.nutz.dao.QueryResult;
-import org.nutz.dao.pager.Pager;
import org.nutz.ioc.Ioc;
import java.util.List;
diff --git a/src/test/java/band/wukong/mz/g/sku/service/SkuPropTypeServiceTest.java b/src/test/java/band/wukong/mz/g/sku/service/SkuPropTypeServiceTest.java
index 6052a1b..65247f8 100644
--- a/src/test/java/band/wukong/mz/g/sku/service/SkuPropTypeServiceTest.java
+++ b/src/test/java/band/wukong/mz/g/sku/service/SkuPropTypeServiceTest.java
@@ -2,7 +2,7 @@
import band.wukong.mz.g.category.SimpleCateConst;
import band.wukong.mz.g.sku.bean.SkuPropType;
-import band.wukong.mz.nutz.NutzTestHelper;
+import band.wukong.mz.nutz.test.NutzTestHelper;
import com.alibaba.fastjson.JSONArray;
import org.junit.After;
import org.junit.Assert;
diff --git a/src/test/java/band/wukong/mz/g/sku/service/impl/GoodsServiceImplTest.java b/src/test/java/band/wukong/mz/g/sku/service/impl/GoodsServiceImplTest.java
index d93405c..360a31d 100644
--- a/src/test/java/band/wukong/mz/g/sku/service/impl/GoodsServiceImplTest.java
+++ b/src/test/java/band/wukong/mz/g/sku/service/impl/GoodsServiceImplTest.java
@@ -1,10 +1,9 @@
package band.wukong.mz.g.sku.service.impl;
import band.wukong.mz.g.category.SimpleCateConst;
-import band.wukong.mz.g.category.bean.Category;
import band.wukong.mz.g.sku.bean.Goods;
import band.wukong.mz.g.sku.service.GoodsService;
-import band.wukong.mz.nutz.NutzTestHelper;
+import band.wukong.mz.nutz.test.NutzTestHelper;
import band.wukong.util.DateUtil;
import org.junit.After;
import org.junit.Assert;
diff --git a/src/test/java/band/wukong/mz/g/sku/service/impl/SkuServiceImplTest.java b/src/test/java/band/wukong/mz/g/sku/service/impl/SkuServiceImplTest.java
index ab14498..2a787e4 100644
--- a/src/test/java/band/wukong/mz/g/sku/service/impl/SkuServiceImplTest.java
+++ b/src/test/java/band/wukong/mz/g/sku/service/impl/SkuServiceImplTest.java
@@ -4,12 +4,11 @@
import band.wukong.mz.g.sku.bean.Sku;
import band.wukong.mz.g.sku.bean.SkuMore;
import band.wukong.mz.g.sku.bean.SkuPropType;
-import band.wukong.mz.g.sku.dao.SkuDao;
import band.wukong.mz.g.sku.dao.SkuMoreDao;
import band.wukong.mz.g.sku.service.GoodsService;
import band.wukong.mz.g.sku.service.SkuPropTypeService;
import band.wukong.mz.g.sku.service.SkuService;
-import band.wukong.mz.nutz.NutzTestHelper;
+import band.wukong.mz.nutz.test.NutzTestHelper;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
diff --git a/src/test/java/band/wukong/nutz/NutzTestHelperTest.java b/src/test/java/band/wukong/nutz/NutzTestHelperTest.java
index 982e372..140f791 100644
--- a/src/test/java/band/wukong/nutz/NutzTestHelperTest.java
+++ b/src/test/java/band/wukong/nutz/NutzTestHelperTest.java
@@ -1,7 +1,7 @@
package band.wukong.nutz;
import band.wukong.mz.g.sku.service.SidGenerator;
-import band.wukong.mz.nutz.NutzTestHelper;
+import band.wukong.mz.nutz.test.NutzTestHelper;
import org.junit.Test;
import org.nutz.ioc.Ioc;