diff --git a/pom.xml b/pom.xml
index 0fab0160..493f617d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,6 +20,8 @@
yudao-module-pay
zsw-farm
zsw-bxg
+ zsw-erp
+ zsw-spi
${project.artifactId}
diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml
index fd03b261..bb90f0f3 100644
--- a/yudao-dependencies/pom.xml
+++ b/yudao-dependencies/pom.xml
@@ -48,7 +48,7 @@
1.18.20
1.4.1.Final
- 5.6.1
+ 5.8.0.M1
2.2.7
2.2
1.0.5
diff --git a/yudao-server/pom.xml b/yudao-server/pom.xml
index b249b9e9..c20c98d6 100644
--- a/yudao-server/pom.xml
+++ b/yudao-server/pom.xml
@@ -28,6 +28,11 @@
zsw-bxg
${revision}
+
+ cn.iocoder.boot
+ zsw-erp
+ ${revision}
+
cn.iocoder.boot
diff --git a/zsw-erp/pom.xml b/zsw-erp/pom.xml
new file mode 100644
index 00000000..ff640d8c
--- /dev/null
+++ b/zsw-erp/pom.xml
@@ -0,0 +1,103 @@
+
+
+
+ yudao
+ cn.iocoder.boot
+ ${revision}
+
+ 4.0.0
+
+ jar
+ zsw-erp
+ ${project.artifactId}
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ 3.0.5
+
+
+
+
+
+ com.zsw
+ pos-spi
+ 1.0-SNAPSHOT
+
+
+
+
+ com.qiniu
+ qiniu-java-sdk
+ 7.9.2
+
+
+
+ cn.iocoder.boot
+ yudao-module-system-impl
+ 1.6.2-snapshot
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-biz-weixin
+ ${revision}
+
+
+ cn.iocoder.boot
+ yudao-common
+ ${revision}
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-biz-pay
+ ${revision}
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-mybatis
+ ${revision}
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-web
+ ${revision}
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-redis
+ ${revision}
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-security
+ ${revision}
+
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-extension
+ ${revision}
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+ 2.5.10
+
+
+
+ org.apache.dubbo
+ dubbo-spring-boot-starter
+ ${dubbo.version}
+
+
+ log4j
+ log4j
+
+
+
+
+
+
+
diff --git a/zsw-erp/src/main/java/com/zsw/erp/ErpService.java b/zsw-erp/src/main/java/com/zsw/erp/ErpService.java
new file mode 100644
index 00000000..19c4cf77
--- /dev/null
+++ b/zsw-erp/src/main/java/com/zsw/erp/ErpService.java
@@ -0,0 +1,20 @@
+package com.zsw.erp;
+
+import com.zsw.erp.datasource.entities.Depot;
+import com.zsw.erp.datasource.entities.Unit;
+import com.zsw.erp.dto.material.MaterialDto;
+
+import java.util.List;
+
+public interface ErpService {
+
+ // 获取原物料
+ List findMaterial(MaterialDto dto);
+
+ // 获取仓库列表
+ List findDepot();
+
+ // 获取物料单位
+ List findUnit();
+
+}
diff --git a/zsw-erp/src/main/java/com/zsw/erp/annotation/Query.java b/zsw-erp/src/main/java/com/zsw/erp/annotation/Query.java
new file mode 100644
index 00000000..6f90580d
--- /dev/null
+++ b/zsw-erp/src/main/java/com/zsw/erp/annotation/Query.java
@@ -0,0 +1,52 @@
+package com.zsw.erp.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Query {
+
+ // 基本对象的属性名
+ String propName() default "";
+ // 查询方式
+ Type type() default Type.EQUAL;
+ /**
+ * 多字段模糊搜索,仅支持String类型字段,多个用逗号隔开, 如@Query(blurry = "email,username")
+ */
+ String blurry() default "";
+
+ enum Type {
+ // jie 2019/6/4 相等
+ EQUAL
+ // Dong ZhaoYang 2017/8/7 大于等于
+ , GREATER_THAN
+ //大于
+ , GREATER_THAN_NQ
+ // Dong ZhaoYang 2017/8/7 小于等于
+ , LESS_THAN
+ // Dong ZhaoYang 2017/8/7 中模糊查询
+ , INNER_LIKE
+ // Dong ZhaoYang 2017/8/7 左模糊查询
+ , LEFT_LIKE
+ // Dong ZhaoYang 2017/8/7 右模糊查询
+ , RIGHT_LIKE
+ // Dong ZhaoYang 2017/8/7 小于
+ , LESS_THAN_NQ
+ // jie 2019/6/4 包含
+ , IN
+ // 不等于
+ ,NOT_EQUAL
+ // between
+ ,BETWEEN
+ // 不为空
+ ,NOT_NULL
+ // 查询时间
+ ,UNIX_TIMESTAMP
+ }
+
+}
+
diff --git a/zsw-erp/src/main/java/com/zsw/erp/config/ArrayListTypeHandler.java b/zsw-erp/src/main/java/com/zsw/erp/config/ArrayListTypeHandler.java
new file mode 100644
index 00000000..60ba9d36
--- /dev/null
+++ b/zsw-erp/src/main/java/com/zsw/erp/config/ArrayListTypeHandler.java
@@ -0,0 +1,23 @@
+package com.zsw.erp.config;
+
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
+import com.zsw.erp.datasource.entities.BtnDto;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+@Slf4j
+public class ArrayListTypeHandler extends AbstractJsonTypeHandler> {
+
+
+ @Override
+ protected List parse(String json) {
+ return JSONUtil.toList(json, BtnDto.class);
+ }
+
+ @Override
+ protected String toJson(List obj) {
+ return JSONUtil.toJsonStr(obj);
+ }
+}
diff --git a/zsw-erp/src/main/java/com/zsw/erp/config/QiniuConfigProperty.java b/zsw-erp/src/main/java/com/zsw/erp/config/QiniuConfigProperty.java
new file mode 100644
index 00000000..5cf8b82a
--- /dev/null
+++ b/zsw-erp/src/main/java/com/zsw/erp/config/QiniuConfigProperty.java
@@ -0,0 +1,20 @@
+package com.zsw.erp.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties(prefix = "qiniu")
+@Data
+public class QiniuConfigProperty {
+
+ private String zone;
+
+ private String access;
+
+ private String secret;
+
+ private String bucket;
+
+ private String pre;
+
+}
diff --git a/zsw-erp/src/main/java/com/zsw/erp/constants/BusinessConstants.java b/zsw-erp/src/main/java/com/zsw/erp/constants/BusinessConstants.java
new file mode 100644
index 00000000..c3ff63ab
--- /dev/null
+++ b/zsw-erp/src/main/java/com/zsw/erp/constants/BusinessConstants.java
@@ -0,0 +1,191 @@
+package com.zsw.erp.constants;
+
+/**
+ * @ClassName:BusinessConstants
+ * @Description 业务字典类
+ * @Author qiankunpingtai
+ * @Date 2019-3-6 17:58
+ * @Version 1.0
+ **/
+public class BusinessConstants {
+
+ /**
+ * 默认的日期格式
+ */
+ public static final String DEFAULT_DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
+ /**
+ * 一天的初始时间
+ */
+ public static final String DAY_FIRST_TIME = " 00:00:00";
+ /**
+ * 一天的结束时间
+ */
+ public static final String DAY_LAST_TIME = " 23:59:59";
+ /**
+ * 默认的分页起始页页码
+ */
+ public static final Integer DEFAULT_PAGINATION_PAGE_NUMBER = 1;
+ /**
+ * 无数据时列表返回的默认数据条数
+ */
+ public static final Long DEFAULT_LIST_NULL_NUMBER = 0L;
+ /**
+ * 默认的分页条数
+ */
+ public static final Integer DEFAULT_PAGINATION_PAGE_SIZE = 10;
+ /**
+ * 单据主表出入库类型 type 入库 出库 其它
+ * depothead
+ * */
+ public static final String DEPOTHEAD_TYPE_IN = "入库";
+ public static final String DEPOTHEAD_TYPE_OUT = "出库";
+ public static final String DEPOTHEAD_TYPE_OTHER = "其它";
+ /**
+ * 付款类型 payType //现付/预付款
+ * */
+ public static final String PAY_TYPE_PREPAID = "预付款";
+ public static final String PAY_TYPE_BY_CASH = "现付";
+ /**
+ * 删除标记 deleteFlag '0'未删除 '1'已删除
+ * */
+ public static final String DELETE_FLAG_DELETED = "1";
+ public static final String DELETE_FLAG_EXISTS = "0";
+ /**
+ * 是否卖出 isSell '0'未卖出 '1'已卖出
+ * */
+ public static final String IS_SELL_SELLED = "1";
+ public static final String IS_SELL_HOLD = "0";
+ /**
+ * 商品是否开启序列号标识enableSerialNumber '0'未启用 '1'启用
+ * */
+ public static final String ENABLE_SERIAL_NUMBER_ENABLED = "1";
+ public static final String ENABLE_SERIAL_NUMBER_NOT_ENABLED = "0";
+ /**
+ * 单据状态 billsStatus '0'未审核 '1'审核 '2'完成采购|销售 '3'部分采购|销售
+ * */
+ public static final String BILLS_STATUS_UN_AUDIT = "0";
+ public static final String BILLS_STATUS_AUDIT = "1";
+ public static final String BILLS_STATUS_SKIPED = "2";
+ public static final String BILLS_STATUS_SKIPING = "3";
+ /**
+ * 出入库分类
+ *采购、采购退货、其它、零售、销售、调拨、盘点复盘等
+ * */
+ public static final String SUB_TYPE_PURCHASE_ORDER = "采购订单";
+ public static final String SUB_TYPE_PURCHASE = "采购";
+ public static final String SUB_TYPE_PURCHASE_RETURN = "采购退货";
+ public static final String SUB_TYPE_OTHER = "其它";
+ public static final String SUB_TYPE_RETAIL = "零售";
+ public static final String SUB_TYPE_SALES_ORDER = "销售订单";
+ public static final String SUB_TYPE_SALES = "销售";
+ public static final String SUB_TYPE_SALES_RETURN = "销售退货";
+ public static final String SUB_TYPE_TRANSFER = "调拨";
+ public static final String SUB_TYPE_REPLAY = "盘点复盘";
+ /**
+ * 批量插入sql时最大的数据条数
+ * */
+ public static final int BATCH_INSERT_MAX_NUMBER = 500;
+ /**
+ * sequence名称
+ * */
+ //sequence返回字符串的最小长度
+ public static final Long SEQ_TO_STRING_MIN_LENGTH = 10000000000L;
+ //sequence长度小于基准长度时前追加基础值
+ public static final String SEQ_TO_STRING_LESS_INSERT = "0";
+ //单据编号
+ public static final String DEPOT_NUMBER_SEQ = "depot_number_seq";
+ /**
+ * 商品类别根目录id
+ * */
+ /**
+ * create by: qiankunpingtai
+ * create time: 2019/3/14 11:41
+ * description:
+ * 为了使用户可以自己建初始目录,设定根目录的父级目录id为-1
+ *
+ */
+ public static final Long MATERIAL_CATEGORY_ROOT_PARENT_ID = -1L;
+ /**
+ * 商品类别状态
+ * 0系统默认,1启用,2删除
+ * */
+ public static final String MATERIAL_CATEGORY_STATUS_DEFAULT = "0";
+ public static final String MATERIAL_CATEGORY_STATUS_ENABLE = "1";
+ public static final String MATERIAL_CATEGORY_STATUS_DELETE = "2";
+ /**
+ * 机构状态
+ * 1未营业、2正常营业、3暂停营业、4终止营业,5已除名
+ * */
+ public static final String ORGANIZATION_STCD_NOT_OPEN = "1";
+ public static final String ORGANIZATION_STCD_OPEN = "2";
+ public static final String ORGANIZATION_STCD_BUSINESS_SUSPENDED = "3";
+ public static final String ORGANIZATION_STCD_BUSINESS_TERMINATED = "4";
+ public static final String ORGANIZATION_STCD_REMOVED = "5";
+ /**
+ * 根机构父级编号
+ * 根机父级构编号默认为-1
+ * */
+ public static final String ORGANIZATION_ROOT_PARENT_NO = "-1";
+ /**
+ * 新增用户默认密码
+ * */
+ public static final String USER_DEFAULT_PASSWORD = "123456";
+ /**
+ * 用户是否系统自带
+ * 0、非系统自带,1系统自带
+ * */
+ public static final byte USER_NOT_SYSTEM = 0;
+ public static final byte USER_IS_SYSTEM = 1;
+ /**
+ * 用户是否为管理者
+ * 0、管理者,1员工
+ * */
+ public static final byte USER_IS_MANAGER = 0;
+ public static final byte USER_NOT_MANAGER = 1;
+ /**
+ * 用户状态
+ * 0:正常,1:删除,2封禁
+ * */
+ public static final byte USER_STATUS_NORMAL = 0;
+ public static final byte USER_STATUS_DELETE = 1;
+ public static final byte USER_STATUS_BANNED = 2;
+ /**
+ * 日志操作
+ * 新增、修改、删除、登录、导入
+ * */
+ public static final String LOG_OPERATION_TYPE_ADD = "新增";
+ public static final String LOG_OPERATION_TYPE_BATCH_ADD = "批量新增";
+ public static final String LOG_OPERATION_TYPE_EDIT = "修改";
+ public static final String LOG_OPERATION_TYPE_DELETE = "删除";
+ public static final String LOG_OPERATION_TYPE_LOGIN = "登录";
+ public static final String LOG_OPERATION_TYPE_IMPORT = "导入";
+
+ /**
+ * 数据数量单位
+ * 条
+ * */
+ public static final String LOG_DATA_UNIT = "条";
+
+ /**
+ * 删除类型
+ * 1正常删除
+ * 2强制删除
+ * */
+ public static final String DELETE_TYPE_NORMAL = "1";
+ public static final String DELETE_TYPE_FORCE = "2";
+
+ /**
+ * 默认管理员账号
+ */
+ public static final String DEFAULT_MANAGER = "admin";
+
+ public static final String ROLE_TYPE_PRIVATE = "个人数据";
+
+ public static final String ROLE_TYPE_THIS_ORG = "本机构数据";
+
+ /**
+ * redis相关
+ * */
+ //session的生命周期,秒
+ public static final Long MAX_SESSION_IN_SECONDS=60*60*24L*30;
+}
diff --git a/zsw-erp/src/main/java/com/zsw/erp/constants/ExceptionConstants.java b/zsw-erp/src/main/java/com/zsw/erp/constants/ExceptionConstants.java
new file mode 100644
index 00000000..764dd533
--- /dev/null
+++ b/zsw-erp/src/main/java/com/zsw/erp/constants/ExceptionConstants.java
@@ -0,0 +1,467 @@
+package com.zsw.erp.constants;
+
+import com.alibaba.fastjson.JSONObject;
+
+public class ExceptionConstants {
+ /**
+ * code 格式 type+五位数字,例如3500000
+ * ResourceInfo(value = "inOutItem", type = 35)
+ *
+ * */
+
+ public static final String GLOBAL_RETURNS_CODE = "code";
+ public static final String GLOBAL_RETURNS_MESSAGE = "msg";
+ public static final String GLOBAL_RETURNS_DATA = "data";
+
+ /**
+ * 正常返回/操作成功
+ **/
+ public static final int SERVICE_SUCCESS_CODE = 200;
+ public static final String SERVICE_SUCCESS_MSG = "操作成功";
+ /**
+ * 数据查询异常
+ */
+ public static final int DATA_READ_FAIL_CODE = 300;
+ public static final String DATA_READ_FAIL_MSG = "数据查询异常";
+ /**
+ * 数据写入异常
+ */
+ public static final int DATA_WRITE_FAIL_CODE = 301;
+ public static final String DATA_WRITE_FAIL_MSG = "数据写入异常";
+
+ /**
+ * 系统运行时未知错误
+ **/
+ public static final int SERVICE_SYSTEM_ERROR_CODE = 500;
+ public static final String SERVICE_SYSTEM_ERROR_MSG = "未知异常";
+
+ /**
+ * 删除操作被拒绝,请联系管理员
+ **/
+ public static final int DELETE_REFUSED_CODE = 600;
+ public static final String DELETE_REFUSED_MSG = "删除操作被拒绝,请联系管理员";
+ /**
+ * 检测到存在依赖数据,是否强制删除?
+ **/
+ public static final int DELETE_FORCE_CONFIRM_CODE = 601;
+ public static final String DELETE_FORCE_CONFIRM_MSG = "检测到存在依赖数据,不能删除!";
+ /**
+ * 用户信息
+ * type = 5
+ * */
+ //添加用户信息失败
+ public static final int USER_ADD_FAILED_CODE = 500000;
+ public static final String USER_ADD_FAILED_MSG = "添加用户信息失败";
+ //删除用户信息失败
+ public static final int USER_DELETE_FAILED_CODE = 500001;
+ public static final String USER_DELETE_FAILED_MSG = "删除用户信息失败";
+ //修改用户信息失败
+ public static final int USER_EDIT_FAILED_CODE = 500002;
+ public static final String USER_EDIT_FAILED_MSG = "修改用户信息失败";
+ //用户名已存在
+ public static final int USER_USER_NAME_ALREADY_EXISTS_CODE = 500003;
+ public static final String USER_USER_NAME_ALREADY_EXISTS_MSG = "用户名在本系统已存在";
+ //登录名已存在
+ public static final int USER_LOGIN_NAME_ALREADY_EXISTS_CODE = 500003;
+ public static final String USER_LOGIN_NAME_ALREADY_EXISTS_MSG = "登录名在本系统已存在";
+ //用户录入数量超出限制
+ public static final int USER_OVER_LIMIT_FAILED_CODE = 500004;
+ public static final String USER_OVER_LIMIT_FAILED_MSG = "用户录入数量超出限制,请联系管理员";
+ //此用户名限制使用
+ public static final int USER_NAME_LIMIT_USE_CODE = 500005;
+ public static final String USER_NAME_LIMIT_USE_MSG = "此用户名限制使用";
+ //演示用户不允许删除
+ public static final int USER_LIMIT_DELETE_CODE = 500006;
+ public static final String USER_LIMIT_DELETE_MSG = "抱歉,演示模式下的演示用户不允许删除";
+ //演示用户不允许修改
+ public static final int USER_LIMIT_UPDATE_CODE = 500007;
+ public static final String USER_LIMIT_UPDATE_MSG = "抱歉,演示模式下的演示用户不允许修改";
+ //租户不能被删除
+ public static final int USER_LIMIT_TENANT_DELETE_CODE = 500008;
+ public static final String USER_LIMIT_TENANT_DELETE_MSG = "抱歉,租户不能被删除";
+
+ /**
+ * 角色信息
+ * type = 10
+ * */
+ //添加角色信息失败
+ public static final int ROLE_ADD_FAILED_CODE = 1000000;
+ public static final String ROLE_ADD_FAILED_MSG = "添加角色信息失败";
+ //删除角色信息失败
+ public static final int ROLE_DELETE_FAILED_CODE = 1000001;
+ public static final String ROLE_DELETE_FAILED_MSG = "删除角色信息失败";
+ //修改角色信息失败
+ public static final int ROLE_EDIT_FAILED_CODE = 1000002;
+ public static final String ROLE_EDIT_FAILED_MSG = "修改角色信息失败";
+ /**
+ * 应用信息
+ * type = 15
+ * */
+ //添加角色信息失败
+ public static final int APP_ADD_FAILED_CODE = 1500000;
+ public static final String APP_ADD_FAILED_MSG = "添加应用信息失败";
+ //删除角色信息失败
+ public static final int APP_DELETE_FAILED_CODE = 1500001;
+ public static final String APP_DELETE_FAILED_MSG = "删除应用信息失败";
+ //修改角色信息失败
+ public static final int APP_EDIT_FAILED_CODE = 1500002;
+ public static final String APP_EDIT_FAILED_MSG = "修改应用信息失败";
+ /**
+ * 仓库信息
+ * type = 20
+ * */
+ //添加仓库信息失败
+ public static final int DEPOT_ADD_FAILED_CODE = 2000000;
+ public static final String DEPOT_ADD_FAILED_MSG = "添加仓库信息失败";
+ //删除仓库信息失败
+ public static final int DEPOT_DELETE_FAILED_CODE = 2000001;
+ public static final String DEPOT_DELETE_FAILED_MSG = "删除仓库信息失败";
+ //修改仓库信息失败
+ public static final int DEPOT_EDIT_FAILED_CODE = 2000002;
+ public static final String DEPOT_EDIT_FAILED_MSG = "修改仓库信息失败";
+
+ /**
+ * 功能模块信息
+ * type = 30
+ * */
+ //添加角色信息失败
+ public static final int FUNCTIONS_ADD_FAILED_CODE = 3000000;
+ public static final String FUNCTIONS_ADD_FAILED_MSG = "添加功能模块信息失败";
+ //删除角色信息失败
+ public static final int FUNCTIONS_DELETE_FAILED_CODE = 3000001;
+ public static final String FUNCTIONS_DELETE_FAILED_MSG = "删除功能模块信息失败";
+ //修改角色信息失败
+ public static final int FUNCTIONS_EDIT_FAILED_CODE = 3000002;
+ public static final String FUNCTIONS_EDIT_FAILED_MSG = "修改功能模块信息失败";
+ /**
+ * 收支项目信息
+ * type = 35
+ * */
+ //添加收支项目信息失败
+ public static final int IN_OUT_ITEM_ADD_FAILED_CODE = 3500000;
+ public static final String IN_OUT_ITEM_ADD_FAILED_MSG = "添加收支项目信息失败";
+ //删除收支项目信息失败
+ public static final int IN_OUT_ITEM_DELETE_FAILED_CODE = 3500001;
+ public static final String IN_OUT_ITEM_DELETE_FAILED_MSG = "删除收支项目信息失败";
+ //修改收支项目信息失败
+ public static final int IN_OUT_ITEM_EDIT_FAILED_CODE = 3500002;
+ public static final String IN_OUT_ITEM_EDIT_FAILED_MSG = "修改收支项目信息失败";
+ /**
+ * 多单位信息
+ * type = 40
+ * */
+ //添加多单位信息失败
+ public static final int UNIT_ADD_FAILED_CODE = 4000000;
+ public static final String UNIT_ADD_FAILED_MSG = "添加多单位信息失败";
+ //删除多单位信息失败
+ public static final int UNIT_DELETE_FAILED_CODE = 4000001;
+ public static final String UNIT_DELETE_FAILED_MSG = "删除多单位信息失败";
+ //修改多单位信息失败
+ public static final int UNIT_EDIT_FAILED_CODE = 4000002;
+ public static final String UNIT_EDIT_FAILED_MSG = "修改多单位信息失败";
+ /**
+ * 经手人信息
+ * type = 45
+ * */
+ //添加经手人信息失败
+ public static final int PERSON_ADD_FAILED_CODE = 4500000;
+ public static final String PERSON_ADD_FAILED_MSG = "添加经手人信息失败";
+ //删除经手人信息失败
+ public static final int PERSON_DELETE_FAILED_CODE = 4500001;
+ public static final String PERSON_DELETE_FAILED_MSG = "删除经手人信息失败";
+ //修改经手人信息失败
+ public static final int PERSON_EDIT_FAILED_CODE = 4500002;
+ public static final String PERSON_EDIT_FAILED_MSG = "修改经手人信息失败";
+ /**
+ * 用户角色模块关系信息
+ * type = 50
+ * */
+ //添加用户角色模块关系信息失败
+ public static final int USER_BUSINESS_ADD_FAILED_CODE = 5000000;
+ public static final String USER_BUSINESS_ADD_FAILED_MSG = "添加用户角色模块关系信息失败";
+ //删除用户角色模块关系信息失败
+ public static final int USER_BUSINESS_DELETE_FAILED_CODE = 5000001;
+ public static final String USER_BUSINESS_DELETE_FAILED_MSG = "删除用户角色模块关系信息失败";
+ //修改用户角色模块关系信息失败
+ public static final int USER_BUSINESS_EDIT_FAILED_CODE = 5000002;
+ public static final String USER_BUSINESS_EDIT_FAILED_MSG = "修改用户角色模块关系信息失败";
+ /**
+ * 系统参数信息
+ * type = 55
+ * */
+ //添加系统参数信息失败
+ public static final int SYSTEM_CONFIG_ADD_FAILED_CODE = 5500000;
+ public static final String SYSTEM_CONFIG_ADD_FAILED_MSG = "添加系统参数信息失败";
+ //删除系统参数信息失败
+ public static final int SYSTEM_CONFIG_DELETE_FAILED_CODE = 5500001;
+ public static final String SYSTEM_CONFIG_DELETE_FAILED_MSG = "删除系统参数信息失败";
+ //修改系统参数信息失败
+ public static final int SYSTEM_CONFIG_EDIT_FAILED_CODE = 5500002;
+ public static final String SYSTEM_CONFIG_EDIT_FAILED_MSG = "修改系统参数信息失败";
+ /**
+ * 商品扩展信息
+ * type = 60
+ * */
+ //添加商品扩展信息失败
+ public static final int MATERIAL_PROPERTY_ADD_FAILED_CODE = 6000000;
+ public static final String MATERIAL_PROPERTY_ADD_FAILED_MSG = "添加商品扩展信息失败";
+ //删除商品扩展信息失败
+ public static final int MATERIAL_PROPERTY_DELETE_FAILED_CODE = 6000001;
+ public static final String MATERIAL_PROPERTY_DELETE_FAILED_MSG = "删除商品扩展信息失败";
+ //修改商品扩展信息失败
+ public static final int MATERIAL_PROPERTY_EDIT_FAILED_CODE = 6000002;
+ public static final String MATERIAL_PROPERTY_EDIT_FAILED_MSG = "修改商品扩展信息失败";
+ /**
+ * 账户信息
+ * type = 65
+ * */
+ //添加账户信息失败
+ public static final int ACCOUNT_ADD_FAILED_CODE = 6500000;
+ public static final String ACCOUNT_ADD_FAILED_MSG = "添加账户信息失败";
+ //删除账户信息失败
+ public static final int ACCOUNT_DELETE_FAILED_CODE = 6500001;
+ public static final String ACCOUNT_DELETE_FAILED_MSG = "删除账户信息失败";
+ //修改账户信息失败
+ public static final int ACCOUNT_EDIT_FAILED_CODE = 6500002;
+ public static final String ACCOUNT_EDIT_FAILED_MSG = "修改账户信息失败";
+ /**
+ * 供应商信息
+ * type = 70
+ * */
+ //添加供应商信息失败
+ public static final int SUPPLIER_ADD_FAILED_CODE = 7000000;
+ public static final String SUPPLIER_ADD_FAILED_MSG = "添加供应商信息失败";
+ //删除供应商信息失败
+ public static final int SUPPLIER_DELETE_FAILED_CODE = 7000001;
+ public static final String SUPPLIER_DELETE_FAILED_MSG = "删除供应商信息失败";
+ //修改供应商信息失败
+ public static final int SUPPLIER_EDIT_FAILED_CODE = 7000002;
+ public static final String SUPPLIER_EDIT_FAILED_MSG = "修改供应商信息失败";
+ /**
+ * 商品类别信息
+ * type = 75
+ * */
+ //添加商品类别信息失败
+ public static final int MATERIAL_CATEGORY_ADD_FAILED_CODE = 7500000;
+ public static final String MATERIAL_CATEGORY_ADD_FAILED_MSG = "添加商品类别信息失败";
+ //删除商品类别信息失败
+ public static final int MATERIAL_CATEGORY_DELETE_FAILED_CODE = 7500001;
+ public static final String MATERIAL_CATEGORY_DELETE_FAILED_MSG = "删除商品类别信息失败";
+ //修改商品类别信息失败
+ public static final int MATERIAL_CATEGORY_EDIT_FAILED_CODE = 7500002;
+ public static final String MATERIAL_CATEGORY_EDIT_FAILED_MSG = "修改商品类别信息失败";
+ //商品类别编号已存在
+ public static final int MATERIAL_CATEGORY_SERIAL_ALREADY_EXISTS_CODE = 7500003;
+ public static final String MATERIAL_CATEGORY_SERIAL_ALREADY_EXISTS_MSG = "商品类别编号已存在";
+ //根类别不支持修改
+ public static final int MATERIAL_CATEGORY_ROOT_NOT_SUPPORT_EDIT_CODE = 7500004;
+ public static final String MATERIAL_CATEGORY_ROOT_NOT_SUPPORT_EDIT_MSG = "根类别不支持修改";
+ //根类别不支持删除
+ public static final int MATERIAL_CATEGORY_ROOT_NOT_SUPPORT_DELETE_CODE = 7500005;
+ public static final String MATERIAL_CATEGORY_ROOT_NOT_SUPPORT_DELETE_MSG = "根类别不支持删除";
+ //该类别存在下级不允许删除
+ public static final int MATERIAL_CATEGORY_CHILD_NOT_SUPPORT_DELETE_CODE = 7500006;
+ public static final String MATERIAL_CATEGORY_CHILD_NOT_SUPPORT_DELETE_MSG = "该类别存在下级不允许删除";
+ /**
+ * 商品信息
+ * type = 80
+ * */
+ //添加商品信息信息失败
+ public static final int MATERIAL_ADD_FAILED_CODE = 7500000;
+ public static final String MATERIAL_ADD_FAILED_MSG = "添加商品信息失败";
+ //删除商品信息失败
+ public static final int MATERIAL_DELETE_FAILED_CODE = 7500001;
+ public static final String MATERIAL_DELETE_FAILED_MSG = "删除商品信息失败";
+ //修改商品信息失败
+ public static final int MATERIAL_EDIT_FAILED_CODE = 7500002;
+ public static final String MATERIAL_EDIT_FAILED_MSG = "修改商品信息失败";
+ //商品信息不存在
+ public static final int MATERIAL_NOT_EXISTS_CODE = 8000000;
+ public static final String MATERIAL_NOT_EXISTS_MSG = "商品信息不存在";
+ //商品信息不唯一
+ public static final int MATERIAL_NOT_ONLY_CODE = 8000001;
+ public static final String MATERIAL_NOT_ONLY_MSG = "商品信息不唯一";
+ //该商品未开启序列号
+ public static final int MATERIAL_NOT_ENABLE_SERIAL_NUMBER_CODE = 8000002;
+ public static final String MATERIAL_NOT_ENABLE_SERIAL_NUMBER_MSG = "该商品未开启序列号功能";
+ //该商品已绑定序列号数量小于等于商品现有库存
+ public static final int MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_CODE = 8000003;
+ public static final String MATERIAL_SERIAL_NUMBERE_NOT_MORE_THAN_STORAGE_MSG = "该商品已绑定序列号数量大于等于商品现有库存";
+ //商品库存不足
+ public static final int MATERIAL_STOCK_NOT_ENOUGH_CODE = 8000004;
+ public static final String MATERIAL_STOCK_NOT_ENOUGH_MSG = "商品:%s库存不足";
+ //商品条码重复
+ public static final int MATERIAL_BARCODE_EXISTS_CODE = 8000005;
+ public static final String MATERIAL_BARCODE_EXISTS_MSG = "商品条码:%s重复";
+ //商品-单位匹配不上
+ public static final int MATERIAL_UNIT_MATE_CODE = 8000006;
+ public static final String MATERIAL_UNIT_MATE_MSG = "抱歉,商品条码:%s的单位匹配不上,请完善计量单位信息!";
+ /**
+ * 单据信息
+ * type = 85
+ * */
+ //添加单据信息失败
+ public static final int DEPOT_HEAD_ADD_FAILED_CODE = 8500000;
+ public static final String DEPOT_HEAD_ADD_FAILED_MSG = "添加单据信息失败";
+ //删除单据信息失败
+ public static final int DEPOT_HEAD_DELETE_FAILED_CODE = 8500001;
+ public static final String DEPOT_HEAD_DELETE_FAILED_MSG = "删除单据信息失败";
+ //修改单据信息失败
+ public static final int DEPOT_HEAD_EDIT_FAILED_CODE = 8500002;
+ public static final String DEPOT_HEAD_EDIT_FAILED_MSG = "修改单据信息失败";
+ //单据录入-仓库不能为空
+ public static final int DEPOT_HEAD_DEPOT_FAILED_CODE = 8500004;
+ public static final String DEPOT_HEAD_DEPOT_FAILED_MSG = "仓库不能为空";
+ //单据录入-调入仓库不能为空
+ public static final int DEPOT_HEAD_ANOTHER_DEPOT_FAILED_CODE = 8500005;
+ public static final String DEPOT_HEAD_ANOTHER_DEPOT_FAILED_MSG = "调入仓库不能为空";
+ //单据录入-明细不能为空
+ public static final int DEPOT_HEAD_ROW_FAILED_CODE = 8500006;
+ public static final String DEPOT_HEAD_ROW_FAILED_MSG = "单据明细不能为空";
+ //单据录入-账户不能为空
+ public static final int DEPOT_HEAD_ACCOUNT_FAILED_CODE = 8500007;
+ public static final String DEPOT_HEAD_ACCOUNT_FAILED_MSG = "结算账户不能为空";
+ //单据录入-请修改多账户的结算金额
+ public static final int DEPOT_HEAD_MANY_ACCOUNT_FAILED_CODE = 8500008;
+ public static final String DEPOT_HEAD_MANY_ACCOUNT_FAILED_MSG = "请修改多账户的结算金额";
+ //单据录入-退货单不能欠款
+ public static final int DEPOT_HEAD_BACK_BILL_DEBT_FAILED_CODE = 8500009;
+ public static final String DEPOT_HEAD_BACK_BILL_DEBT_FAILED_MSG = "退货单不能欠款";
+ //单据录入-调入仓库与原仓库不能重复
+ public static final int DEPOT_HEAD_ANOTHER_DEPOT_EQUAL_FAILED_CODE = 8500010;
+ public static final String DEPOT_HEAD_ANOTHER_DEPOT_EQUAL_FAILED_MSG = "调入仓库与原仓库不能重复";
+ //单据删除-只有未审核的单据才能删除
+ public static final int DEPOT_HEAD_UN_AUDIT_DELETE_FAILED_CODE = 8500011;
+ public static final String DEPOT_HEAD_UN_AUDIT_DELETE_FAILED_MSG = "抱歉,只有未审核的单据才能删除";
+ //单据审核-只有未审核的单据才能审核
+ public static final int DEPOT_HEAD_UN_AUDIT_TO_AUDIT_FAILED_CODE = 8500012;
+ public static final String DEPOT_HEAD_UN_AUDIT_TO_AUDIT_FAILED_MSG = "抱歉,只有未审核的单据才能审核";
+ //单据反审核-只有已审核的单据才能反审核
+ public static final int DEPOT_HEAD_AUDIT_TO_UN_AUDIT_FAILED_CODE = 8500013;
+ public static final String DEPOT_HEAD_AUDIT_TO_UN_AUDIT_FAILED_MSG = "抱歉,只有已审核的单据才能反审核";
+ //单据录入-商品条码XXX的数量需要修改下
+ public static final int DEPOT_HEAD_NUMBER_NEED_EDIT_FAILED_CODE = 85000014;
+ public static final String DEPOT_HEAD_NUMBER_NEED_EDIT_FAILED_MSG = "商品条码%s的数量需要修改";
+ /**
+ * 单据明细信息
+ * type = 90
+ * */
+ //添加单据明细信息失败
+ public static final int DEPOT_ITEM_ADD_FAILED_CODE = 9000000;
+ public static final String DEPOT_ITEM_ADD_FAILED_MSG = "添加单据明细信息失败";
+ //删除单据明细信息失败
+ public static final int DEPOT_ITEM_DELETE_FAILED_CODE = 9000001;
+ public static final String DEPOT_ITEM_DELETE_FAILED_MSG = "删除单据明细信息失败";
+ //修改单据明细信息失败
+ public static final int DEPOT_ITEM_EDIT_FAILED_CODE = 9000002;
+ public static final String DEPOT_ITEM_EDIT_FAILED_MSG = "修改单据明细信息失败";
+ /**
+ * 财务信息
+ * type = 95
+ * */
+ //添加财务信息失败
+ public static final int ACCOUNT_HEAD_ADD_FAILED_CODE = 9500000;
+ public static final String ACCOUNT_HEAD_ADD_FAILED_MSG = "添加财务信息失败";
+ //删除财务信息失败
+ public static final int ACCOUNT_HEAD_DELETE_FAILED_CODE = 9500001;
+ public static final String ACCOUNT_HEAD_DELETE_FAILED_MSG = "删除财务信息失败";
+ //修改财务信息失败
+ public static final int ACCOUNT_HEAD_EDIT_FAILED_CODE = 9500002;
+ public static final String ACCOUNT_HEAD_EDIT_FAILED_MSG = "修改财务信息失败";
+ //单据录入-明细不能为空
+ public static final int ACCOUNT_HEAD_ROW_FAILED_CODE = 9500003;
+ public static final String ACCOUNT_HEAD_ROW_FAILED_MSG = "单据明细不能为空";
+ //单据删除-只有未审核的单据才能删除
+ public static final int ACCOUNT_HEAD_UN_AUDIT_DELETE_FAILED_CODE = 9500004;
+ public static final String ACCOUNT_HEAD_UN_AUDIT_DELETE_FAILED_MSG = "抱歉,只有未审核的单据才能删除";
+ /**
+ * 财务明细信息
+ * type = 100
+ * */
+ //添加财务明细信息失败
+ public static final int ACCOUNT_ITEM_ADD_FAILED_CODE = 10000000;
+ public static final String ACCOUNT_ITEM_ADD_FAILED_MSG = "添加财务明细信息失败";
+ //删除财务明细信息失败
+ public static final int ACCOUNT_ITEM_DELETE_FAILED_CODE = 10000001;
+ public static final String ACCOUNT_ITEM_DELETE_FAILED_MSG = "删除财务明细信息失败";
+ //修改财务明细信息失败
+ public static final int ACCOUNT_ITEM_EDIT_FAILED_CODE = 10000002;
+ public static final String ACCOUNT_ITEM_EDIT_FAILED_MSG = "修改财务明细信息失败";
+ /**
+ * 序列号
+ * type = 105
+ * */
+ /**序列号已存在*/
+ public static final int SERIAL_NUMBERE_ALREADY_EXISTS_CODE = 10500000;
+ public static final String SERIAL_NUMBERE_ALREADY_EXISTS_MSG = "序列号已存在";
+ /**序列号不能为为空*/
+ public static final int SERIAL_NUMBERE_NOT_BE_EMPTY_CODE = 10500001;
+ public static final String SERIAL_NUMBERE_NOT_BE_EMPTY_MSG = "序列号不能为为空";
+ /**商品%s下序列号不充足,请补充后重试*/
+ public static final int MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_CODE = 10500002;
+ public static final String MATERIAL_SERIAL_NUMBERE_NOT_ENOUGH_MSG = "商品:%s下序列号不充足,请补充后重试";
+ /**删序列号信息失败*/
+ public static final int SERIAL_NUMBERE_DELETE_FAILED_CODE = 10500003;
+ public static final String SERIAL_NUMBERE_DELETE_FAILED_MSG = "删序列号信息失败";
+ /**
+ * 机构信息
+ * type = 110
+ * */
+ //添加机构信息失败
+ public static final int ORGANIZATION_ADD_FAILED_CODE = 11000000;
+ public static final String ORGANIZATION_ADD_FAILED_MSG = "添加机构信息失败";
+ //删除机构信息失败
+ public static final int ORGANIZATION_DELETE_FAILED_CODE = 11000001;
+ public static final String ORGANIZATION_DELETE_FAILED_MSG = "删除机构信息失败";
+ //修改机构信息失败
+ public static final int ORGANIZATION_EDIT_FAILED_CODE = 11000002;
+ public static final String ORGANIZATION_EDIT_FAILED_MSG = "修改机构信息失败";
+ //机构编号已存在
+ public static final int ORGANIZATION_NO_ALREADY_EXISTS_CODE = 11000003;
+ public static final String ORGANIZATION_NO_ALREADY_EXISTS_MSG = "机构编号已存在";
+ //根机构不允许删除
+ public static final int ORGANIZATION_ROOT_NOT_ALLOWED_DELETE_CODE = 11000004;
+ public static final String ORGANIZATION_ROOT_NOT_ALLOWED_DELETE_MSG = "根机构不允许删除";
+ //根机构不允许修改
+ public static final int ORGANIZATION_ROOT_NOT_ALLOWED_EDIT_CODE = 11000005;
+ public static final String ORGANIZATION_ROOT_NOT_ALLOWED_EDIT_MSG = "根机构不允许修改";
+ //该机构存在下级不允许删除
+ public static final int ORGANIZATION_CHILD_NOT_ALLOWED_DELETE_CODE = 11000006;
+ public static final String ORGANIZATION_CHILD_NOT_ALLOWED_DELETE_MSG = "该机构存在下级不允许删除";
+ /**
+ * 机构用户关联关系
+ * type = 115
+ * */
+ //添加机构用户关联关系失败
+ public static final int ORGA_USER_REL_ADD_FAILED_CODE = 11500000;
+ public static final String ORGA_USER_REL_ADD_FAILED_MSG = "添加机构用户关联关系失败";
+ //删除机构用户关联关系失败
+ public static final int ORGA_USER_REL_DELETE_FAILED_CODE = 11500001;
+ public static final String ORGA_USER_REL_DELETE_FAILED_MSG = "删除机构用户关联关系失败";
+ //修改机构用户关联关系失败
+ public static final int ORGA_USER_REL_EDIT_FAILED_CODE = 11500002;
+ public static final String ORGA_USER_REL_EDIT_FAILED_MSG = "修改机构用户关联关系失败";
+
+ //演示用户禁止操作
+ public static final int SYSTEM_CONFIG_TEST_USER_CODE = -1;
+ public static final String SYSTEM_CONFIG_TEST_USER_MSG = "演示用户禁止操作";
+
+
+ /**
+ * 标准正常返回/操作成功返回
+ * @return
+ */
+ public static JSONObject standardSuccess () {
+ JSONObject success = new JSONObject();
+ success.put(GLOBAL_RETURNS_CODE, SERVICE_SUCCESS_CODE);
+ success.put(GLOBAL_RETURNS_MESSAGE, SERVICE_SUCCESS_MSG);
+ return success;
+ }
+
+ public static JSONObject standardErrorUserOver () {
+ JSONObject success = new JSONObject();
+ success.put(GLOBAL_RETURNS_CODE, USER_OVER_LIMIT_FAILED_CODE);
+ success.put(GLOBAL_RETURNS_MESSAGE, USER_OVER_LIMIT_FAILED_MSG);
+ return success;
+ }
+}
diff --git a/zsw-erp/src/main/java/com/zsw/erp/controller/AccountController.java b/zsw-erp/src/main/java/com/zsw/erp/controller/AccountController.java
new file mode 100644
index 00000000..48429a67
--- /dev/null
+++ b/zsw-erp/src/main/java/com/zsw/erp/controller/AccountController.java
@@ -0,0 +1,152 @@
+package com.zsw.erp.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.zsw.erp.datasource.entities.Account;
+import com.zsw.erp.datasource.vo.AccountVo4InOutList;
+import com.zsw.erp.service.account.AccountService;
+import com.zsw.base.R;
+import com.zsw.erp.utils.ErpInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.zsw.erp.utils.ResponseJsonUtil.returnJson;
+
+
+@RestController
+@RequestMapping(value = "/account")
+@Api(tags = {"账户管理"})
+public class AccountController {
+ private Logger logger = LoggerFactory.getLogger(AccountController.class);
+
+ @Resource
+ private AccountService accountService;
+
+ /**
+ * 查找结算账户信息-下拉框
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/findBySelect")
+ @ApiOperation(value = "查找结算账户信息-下拉框")
+ public String findBySelect(HttpServletRequest request) throws Exception {
+ String res = null;
+ try {
+ List dataList = accountService.findBySelect();
+ //存放数据json数组
+ JSONArray dataArray = new JSONArray();
+ if (null != dataList) {
+ for (Account account : dataList) {
+ JSONObject item = new JSONObject();
+ item.put("Id", account.getId());
+ //结算账户名称
+ item.put("AccountName", account.getName());
+ dataArray.add(item);
+ }
+ }
+ res = dataArray.toJSONString();
+ } catch(Exception e){
+ e.printStackTrace();
+ res = "获取数据失败";
+ }
+ return res;
+ }
+
+ /**
+ * 获取所有结算账户
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getAccount")
+ @ApiOperation(value = "获取所有结算账户")
+ public R getAccount(HttpServletRequest request) throws Exception {
+
+ Map map = new HashMap();
+ List accountList = accountService.getAccount();
+ map.put("accountList", accountList);
+ return R.success(map);
+ }
+
+ /**
+ * 账户流水信息
+ * @param currentPage
+ * @param pageSize
+ * @param accountId
+ * @param initialAmount
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/findAccountInOutList")
+ @ApiOperation(value = "账户流水信息")
+ public R findAccountInOutList(@RequestParam("currentPage") Integer currentPage,
+ @RequestParam("pageSize") Integer pageSize,
+ @RequestParam("accountId") Long accountId,
+ @RequestParam("initialAmount") BigDecimal initialAmount,
+ HttpServletRequest request) throws Exception{
+
+ Map map = new HashMap();
+ List dataList = accountService.findAccountInOutList(accountId, (currentPage-1)*pageSize, pageSize);
+ int total = accountService.findAccountInOutListCount(accountId);
+ map.put("total", total);
+ //存放数据json数组
+ JSONArray dataArray = new JSONArray();
+ if (null != dataList) {
+ for (AccountVo4InOutList aEx : dataList) {
+ String timeStr = aEx.getOperTime().toString();
+ BigDecimal balance = accountService.getAccountSum(accountId, timeStr, "date").add(accountService.getAccountSumByHead(accountId, timeStr, "date"))
+ .add(accountService.getAccountSumByDetail(accountId, timeStr, "date")).add(accountService.getManyAccountSum(accountId, timeStr, "date")).add(initialAmount);
+ aEx.setBalance(balance);
+ aEx.setAccountId(accountId);
+ dataArray.add(aEx);
+ }
+ }
+ map.put("rows", dataArray);
+ return R.success(map);
+ }
+
+ /**
+ * 更新默认账户
+ * @param object
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @PostMapping(value = "/updateIsDefault")
+ @ApiOperation(value = "更新默认账户")
+ public String updateIsDefault(@RequestBody JSONObject object,
+ HttpServletRequest request) throws Exception{
+ Long accountId = object.getLong("id");
+ Map objectMap = new HashMap<>();
+ int res = accountService.updateIsDefault(accountId);
+ if(res > 0) {
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
+ }
+ }
+
+ /**
+ * 结算账户的统计
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getStatistics")
+ @ApiOperation(value = "结算账户的统计")
+ public R getStatistics(@RequestParam("name") String name,
+ @RequestParam("serialNo") String serialNo,
+ HttpServletRequest request) throws Exception {
+
+ Map map = accountService.getStatistics(name, serialNo);
+ return R.success(map);
+ }
+}
diff --git a/zsw-erp/src/main/java/com/zsw/erp/controller/AccountHeadController.java b/zsw-erp/src/main/java/com/zsw/erp/controller/AccountHeadController.java
new file mode 100644
index 00000000..f36cecfa
--- /dev/null
+++ b/zsw-erp/src/main/java/com/zsw/erp/controller/AccountHeadController.java
@@ -0,0 +1,110 @@
+package com.zsw.erp.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.zsw.erp.constants.ExceptionConstants;
+import com.zsw.erp.datasource.entities.AccountHeadVo4Body;
+import com.zsw.erp.datasource.entities.AccountHeadVo4ListEx;
+import com.zsw.erp.service.accountHead.AccountHeadService;
+import com.zsw.base.R;
+import com.zsw.erp.utils.ErpInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.zsw.erp.utils.ResponseJsonUtil.returnJson;
+
+
+@RestController
+@RequestMapping(value = "/accountHead")
+@Api(tags = {"财务管理"})
+public class AccountHeadController {
+ private Logger logger = LoggerFactory.getLogger(AccountHeadController.class);
+
+ @Resource
+ private AccountHeadService accountHeadService;
+
+ /**
+ * 批量设置状态-审核或者反审核
+ * @param jsonObject
+ * @param request
+ * @return
+ */
+ @PostMapping(value = "/batchSetStatus")
+ @ApiOperation(value = "批量设置状态-审核或者反审核")
+ public String batchSetStatus(@RequestBody JSONObject jsonObject,
+ HttpServletRequest request) throws Exception{
+ Map objectMap = new HashMap<>();
+ String status = jsonObject.getString("status");
+ String ids = jsonObject.getString("ids");
+ int res = accountHeadService.batchSetStatus(status, ids);
+ if(res > 0) {
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
+ }
+ }
+
+ /**
+ * 新增财务主表及财务子表信息
+ * @param body
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @PostMapping(value = "/addAccountHeadAndDetail")
+ @ApiOperation(value = "新增财务主表及财务子表信息")
+ public Object addAccountHeadAndDetail(@RequestBody AccountHeadVo4Body body, HttpServletRequest request) throws Exception{
+ JSONObject result = ExceptionConstants.standardSuccess();
+ String beanJson = body.getInfo();
+ String rows = body.getRows();
+ accountHeadService.addAccountHeadAndDetail(beanJson,rows, request);
+ return result;
+ }
+
+ /**
+ * 更新财务主表及财务子表信息
+ * @param body
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @PutMapping(value = "/updateAccountHeadAndDetail")
+ @ApiOperation(value = "更新财务主表及财务子表信息")
+ public Object updateAccountHeadAndDetail(@RequestBody AccountHeadVo4Body body, HttpServletRequest request) throws Exception{
+ JSONObject result = ExceptionConstants.standardSuccess();
+ String beanJson = body.getInfo();
+ String rows = body.getRows();
+ accountHeadService.updateAccountHeadAndDetail(beanJson,rows,request);
+ return result;
+ }
+
+ /**
+ * 根据编号查询单据信息
+ * @param billNo
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getDetailByNumber")
+ @ApiOperation(value = "根据编号查询单据信息")
+ public R getDetailByNumber(@RequestParam("billNo") String billNo,
+ HttpServletRequest request)throws Exception {
+
+ AccountHeadVo4ListEx ahl = new AccountHeadVo4ListEx();
+ List list = accountHeadService.getDetailByNumber(billNo);
+ if(list.size() == 1) {
+ ahl = list.get(0);
+ return R.success(ahl);
+ }else {
+ return R.fail("错误");
+ }
+
+ }
+}
diff --git a/zsw-erp/src/main/java/com/zsw/erp/controller/AccountItemController.java b/zsw-erp/src/main/java/com/zsw/erp/controller/AccountItemController.java
new file mode 100644
index 00000000..cf467869
--- /dev/null
+++ b/zsw-erp/src/main/java/com/zsw/erp/controller/AccountItemController.java
@@ -0,0 +1,65 @@
+package com.zsw.erp.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.zsw.erp.datasource.vo.AccountItemVo4List;
+import com.zsw.erp.service.accountItem.AccountItemService;
+import com.zsw.base.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@RestController
+@RequestMapping(value = "/accountItem")
+@Api(tags = {"财务明细"})
+public class AccountItemController {
+ private Logger logger = LoggerFactory.getLogger(AccountItemController.class);
+
+ @Resource
+ private AccountItemService accountItemService;
+
+ @GetMapping(value = "/getDetailList")
+ @ApiOperation(value = "明细列表")
+ public R getDetailList(@RequestParam("headerId") Long headerId,
+ HttpServletRequest request)throws Exception {
+
+ List dataList = new ArrayList<>();
+ if(headerId != 0) {
+ dataList = accountItemService.getDetailList(headerId);
+ }
+ JSONObject outer = new JSONObject();
+ outer.put("total", dataList.size());
+ //存放数据json数组
+ JSONArray dataArray = new JSONArray();
+ if (null != dataList) {
+ for (AccountItemVo4List ai : dataList) {
+ JSONObject item = new JSONObject();
+ item.put("accountId", ai.getAccountId());
+ item.put("accountName", ai.getAccountName());
+ item.put("inOutItemId", ai.getInOutItemId());
+ item.put("inOutItemName", ai.getInOutItemName());
+ item.put("billNumber", ai.getBillNumber());
+ item.put("needDebt", ai.getNeedDebt());
+ item.put("finishDebt", ai.getFinishDebt());
+ BigDecimal eachAmount = ai.getEachAmount();
+ item.put("eachAmount", (eachAmount.compareTo(BigDecimal.ZERO))==-1 ? BigDecimal.ZERO.subtract(eachAmount): eachAmount);
+ item.put("remark", ai.getRemark());
+ dataArray.add(item);
+ }
+ }
+ outer.put("rows", dataArray);
+ return R.success(outer);
+ }
+}
diff --git a/zsw-erp/src/main/java/com/zsw/erp/controller/BomController.java b/zsw-erp/src/main/java/com/zsw/erp/controller/BomController.java
new file mode 100644
index 00000000..e3c57532
--- /dev/null
+++ b/zsw-erp/src/main/java/com/zsw/erp/controller/BomController.java
@@ -0,0 +1,89 @@
+package com.zsw.erp.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.google.common.collect.Lists;
+import com.zsw.base.R;
+import com.zsw.erp.datasource.dto.BomDto;
+import com.zsw.erp.service.zyh.BomService;
+import com.zsw.erp.utils.DozerUtils;
+import com.zsw.pos.product.dto.AdminStoreProductDTO;
+import com.zsw.pos.product.entity.Product;
+import com.zsw.pos.product.entity.ProductSku;
+import com.zsw.pos.product.service.ProductService;
+import com.zsw.pos.product.service.ProductSkuService;
+import com.zsw.pos.product.vo.ProductPageVO;
+import com.zsw.pos.store.StoreService;
+import com.zsw.pos.store.entity.Store;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@Api(tags = "BOM物料清单")
+@RequestMapping("/bom")
+@Slf4j
+public class BomController {
+
+ @Resource
+ private DozerUtils dozerUtils;
+
+ @DubboReference
+ private ProductService productService;
+
+ @DubboReference
+ private ProductSkuService productSkuService;
+
+ @DubboReference
+ private StoreService storeService;
+
+ @Resource
+ private BomService bomService;
+
+ @PostMapping("/insert")
+ @ApiOperation("新增BOM")
+ public R insert(@RequestBody BomDto bomDto){
+ return R.success(bomService.save(bomDto));
+ }
+
+ @PostMapping("/edit")
+ @ApiOperation("修改BOM")
+ public R edit(@RequestBody BomDto bomDto){
+ return R.success(bomService.updateById(bomDto));
+ }
+
+ @GetMapping("/list")
+ @ApiOperation("列举全部BOM")
+ public R> list(){
+ List rs = dozerUtils.convertList(bomService.list(), BomDto.class);
+ return R.success(rs);
+ }
+
+ @PostMapping("/listProduct")
+ @ApiOperation("获取商品")
+ public R listProduct(AdminStoreProductDTO dto){
+ return productService.findAdminStoreProductList(dto);
+ }
+
+ @GetMapping("/listProcutSkuByPid")
+ @ApiOperation("获取SKU")
+ public R> listProcutSkuByPid(@RequestParam List ids){
+ List sku = productSkuService.getProductSkuByMaterial(ids);
+ return R.success(sku);
+ }
+
+ @GetMapping("/listStore")
+ @ApiOperation("获取全部店铺列表")
+ public R> listStore(){
+ List storeList = storeService.list();
+ return R.success(storeList);
+ }
+
+
+
+}
diff --git a/zsw-erp/src/main/java/com/zsw/erp/controller/DepotController.java b/zsw-erp/src/main/java/com/zsw/erp/controller/DepotController.java
new file mode 100644
index 00000000..3926e356
--- /dev/null
+++ b/zsw-erp/src/main/java/com/zsw/erp/controller/DepotController.java
@@ -0,0 +1,170 @@
+package com.zsw.erp.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.zsw.erp.datasource.entities.Depot;
+import com.zsw.erp.datasource.entities.DepotEx;
+import com.zsw.erp.datasource.entities.MaterialInitialStock;
+import com.zsw.erp.service.depot.DepotService;
+import com.zsw.erp.service.material.MaterialService;
+import com.zsw.erp.service.userBusiness.UserBusinessService;
+import com.zsw.base.R;
+import com.zsw.erp.utils.ErpInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.util.*;
+
+import static com.zsw.erp.utils.ResponseJsonUtil.returnJson;
+
+
+@RestController
+@RequestMapping(value = "/depot")
+@Api(tags = {"仓库管理"})
+public class DepotController {
+ private Logger logger = LoggerFactory.getLogger(DepotController.class);
+
+ @Resource
+ private DepotService depotService;
+
+ @Resource
+ private UserBusinessService userBusinessService;
+
+ @Resource
+ private MaterialService materialService;
+
+ /**
+ * 仓库列表
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @GetMapping(value = "/getAllList")
+ @ApiOperation(value = "仓库列表")
+ public R getAllList(HttpServletRequest request) throws Exception{
+ List depotList = depotService.getAllList();
+ return R.success(depotList);
+ }
+
+ /**
+ * 用户对应仓库显示
+ * @param type
+ * @param keyId
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/findUserDepot")
+ @ApiOperation(value = "用户对应仓库显示")
+ public JSONArray findUserDepot(@RequestParam("UBType") String type, @RequestParam("UBKeyId") Long keyId,
+ HttpServletRequest request) throws Exception{
+ JSONArray arr = new JSONArray();
+ try {
+ //获取权限信息
+ List ubValue = userBusinessService.getUBValueByTypeAndKeyId(type, keyId);
+ List dataList = depotService.findUserDepot();
+ //开始拼接json数据
+ JSONObject outer = new JSONObject();
+ outer.put("id", 0);
+ outer.put("key", 0);
+ outer.put("value", 0);
+ outer.put("title", "仓库列表");
+ outer.put("attributes", "仓库列表");
+ //存放数据json数组
+ JSONArray dataArray = new JSONArray();
+ if (null != dataList) {
+ for (Depot depot : dataList) {
+ JSONObject item = new JSONObject();
+ item.put("id", depot.getId());
+ item.put("key", depot.getId());
+ item.put("value", depot.getId());
+ item.put("title", depot.getName());
+ item.put("attributes", depot.getName());
+ Boolean flag = ubValue.contains(depot.getId());
+ if (flag) {
+ item.put("checked", true);
+ }
+ dataArray.add(item);
+ }
+ }
+ outer.put("children", dataArray);
+ arr.add(outer);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return arr;
+ }
+
+ /**
+ * 获取当前用户拥有权限的仓库列表
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @GetMapping(value = "/findDepotByCurrentUser")
+ @ApiOperation(value = "获取当前用户拥有权限的仓库列表")
+ public R findDepotByCurrentUser(HttpServletRequest request) throws Exception{
+ JSONArray arr = depotService.findDepotByCurrentUser();
+ return R.success(arr);
+ }
+
+ /**
+ * 更新默认仓库
+ * @param object
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @PostMapping(value = "/updateIsDefault")
+ @ApiOperation(value = "更新默认仓库")
+ public String updateIsDefault(@RequestBody JSONObject object,
+ HttpServletRequest request) throws Exception{
+ Long depotId = object.getLong("id");
+ Map objectMap = new HashMap<>();
+ int res = depotService.updateIsDefault(depotId);
+ if(res > 0) {
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
+ }
+ }
+
+ /**
+ * 仓库列表-带库存
+ * @param mId
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getAllListWithStock")
+ @ApiOperation(value = "仓库列表-带库存")
+ public R getAllList(@RequestParam("mId") Long mId,
+ HttpServletRequest request) {
+
+ List list = depotService.getAllList();
+ List depotList = new ArrayList();
+ for(Depot depot: list) {
+ DepotEx de = new DepotEx();
+ if(mId!=0) {
+ BigDecimal initStock = materialService.getInitStock(mId, depot.getId()).getNumber();
+ BigDecimal currentStock = materialService.getCurrentStock(mId, depot.getId());
+ de.setInitStock(initStock);
+ de.setCurrentStock(currentStock);
+ MaterialInitialStock materialInitialStock = materialService.getSafeStock(mId, depot.getId());
+ de.setLowSafeStock(materialInitialStock.getLowSafeStock());
+ de.setHighSafeStock(materialInitialStock.getHighSafeStock());
+ } else {
+ de.setInitStock(BigDecimal.ZERO);
+ de.setCurrentStock(BigDecimal.ZERO);
+ }
+ de.setId(depot.getId());
+ de.setName(depot.getName());
+ depotList.add(de);
+ }
+ return R.success(depotList);
+ }
+}
diff --git a/zsw-erp/src/main/java/com/zsw/erp/controller/DepotHeadController.java b/zsw-erp/src/main/java/com/zsw/erp/controller/DepotHeadController.java
new file mode 100644
index 00000000..3a590f11
--- /dev/null
+++ b/zsw-erp/src/main/java/com/zsw/erp/controller/DepotHeadController.java
@@ -0,0 +1,495 @@
+package com.zsw.erp.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.zsw.base.R;
+import com.zsw.erp.constants.BusinessConstants;
+import com.zsw.erp.constants.ExceptionConstants;
+import com.zsw.erp.datasource.dto.DepotItemDto;
+import com.zsw.erp.datasource.entities.*;
+import com.zsw.erp.datasource.vo.DepotHeadVo4InDetail;
+import com.zsw.erp.datasource.vo.DepotHeadVo4InOutMCount;
+import com.zsw.erp.datasource.vo.DepotHeadVo4List;
+import com.zsw.erp.datasource.vo.DepotHeadVo4StatementAccount;
+import com.zsw.erp.service.account.AccountService;
+import com.zsw.erp.service.accountHead.AccountHeadService;
+import com.zsw.erp.service.depot.DepotService;
+import com.zsw.erp.service.depotHead.DepotHeadService;
+import com.zsw.erp.service.depotItem.DepotItemService;
+import com.zsw.erp.service.redis.RedisService;
+import com.zsw.erp.service.supplier.SupplierService;
+import com.zsw.erp.utils.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static com.zsw.erp.utils.ResponseJsonUtil.returnJson;
+import static com.zsw.erp.utils.Tools.getNow3;
+
+
+@RestController
+@RequestMapping(value = "/depotHead")
+@Api(tags = {"单据管理"})
+public class DepotHeadController {
+ private Logger logger = LoggerFactory.getLogger(DepotHeadController.class);
+
+ @Resource
+ private DepotHeadService depotHeadService;
+
+ @Resource
+ private AccountHeadService accountHeadService;
+
+ @Resource
+ private AccountService accountService;
+
+ @Resource
+ private SupplierService supplierService;
+
+ @Resource
+ private DepotService depotService;
+
+ @Resource
+ private RedisService redisService;
+
+ @Resource
+ private DepotItemService depotItemService;
+
+ /**
+ * 批量设置状态-审核或者反审核
+ * @param jsonObject
+ * @param request
+ * @return
+ */
+ @PostMapping(value = "/batchSetStatus")
+ @ApiOperation(value = "批量设置状态-审核或者反审核")
+ public String batchSetStatus(@RequestBody JSONObject jsonObject,
+ HttpServletRequest request) throws Exception{
+ Map objectMap = new HashMap<>();
+ String status = jsonObject.getString("status");
+ String ids = jsonObject.getString("ids");
+ int res = depotHeadService.batchSetStatus(status, ids);
+ if(res > 0) {
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ return returnJson(objectMap, ErpInfo.ERROR.name, ErpInfo.ERROR.code);
+ }
+ }
+
+ /**
+ * 入库出库明细接口
+ * @param currentPage
+ * @param pageSize
+ * @param oId
+ * @param number
+ * @param materialParam
+ * @param depotId
+ * @param beginTime
+ * @param endTime
+ * @param type
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/findInDetail")
+ @ApiOperation(value = "入库出库明细接口")
+ public R findInDetail(@RequestParam("currentPage") Integer currentPage,
+ @RequestParam("pageSize") Integer pageSize,
+ @RequestParam(value = "organId", required = false) Integer oId,
+ @RequestParam("number") String number,
+ @RequestParam("materialParam") String materialParam,
+ @RequestParam(value = "depotId", required = false) Long depotId,
+ @RequestParam("beginTime") String beginTime,
+ @RequestParam("endTime") String endTime,
+ @RequestParam("type") String type,
+ HttpServletRequest request)throws Exception {
+
+ Map map = new HashMap();
+ List depotList = new ArrayList<>();
+ if(depotId != null) {
+ depotList.add(depotId);
+ } else {
+ //未选择仓库时默认为当前用户有权限的仓库
+ JSONArray depotArr = depotService.findDepotByCurrentUser();
+ for(Object obj: depotArr) {
+ JSONObject object = JSONObject.parseObject(obj.toString());
+ depotList.add(object.getLong("id"));
+ }
+ }
+ List resList = new ArrayList();
+ beginTime = Tools.parseDayToTime(beginTime, BusinessConstants.DAY_FIRST_TIME);
+ endTime = Tools.parseDayToTime(endTime,BusinessConstants.DAY_LAST_TIME);
+ List list = depotHeadService.findByAll(beginTime, endTime, type, materialParam, depotList, oId, number, (currentPage-1)*pageSize, pageSize);
+ int total = depotHeadService.findByAllCount(beginTime, endTime, type, materialParam, depotList, oId, number);
+ map.put("total", total);
+ //存放数据json数组
+ if (null != list) {
+ for (DepotHeadVo4InDetail dhd : list) {
+ resList.add(dhd);
+ }
+ }
+ map.put("rows", resList);
+ return R.success(map);
+ }
+
+ /**
+ * 入库出库统计接口
+ * @param currentPage
+ * @param pageSize
+ * @param oId
+ * @param materialParam
+ * @param depotId
+ * @param beginTime
+ * @param endTime
+ * @param type
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/findInOutMaterialCount")
+ @ApiOperation(value = "入库出库统计接口")
+ public R findInOutMaterialCount(@RequestParam("currentPage") Integer currentPage,
+ @RequestParam("pageSize") Integer pageSize,
+ @RequestParam(value = "organId", required = false) Integer oId,
+ @RequestParam("materialParam") String materialParam,
+ @RequestParam(value = "depotId", required = false) Long depotId,
+ @RequestParam("beginTime") String beginTime,
+ @RequestParam("endTime") String endTime,
+ @RequestParam("type") String type,
+ HttpServletRequest request)throws Exception {
+
+ Map map = new HashMap();
+ List depotList = new ArrayList<>();
+ if(depotId != null) {
+ depotList.add(depotId);
+ } else {
+ //未选择仓库时默认为当前用户有权限的仓库
+ JSONArray depotArr = depotService.findDepotByCurrentUser();
+ for(Object obj: depotArr) {
+ JSONObject object = JSONObject.parseObject(obj.toString());
+ depotList.add(object.getLong("id"));
+ }
+ }
+ List resList = new ArrayList<>();
+ beginTime = Tools.parseDayToTime(beginTime,BusinessConstants.DAY_FIRST_TIME);
+ endTime = Tools.parseDayToTime(endTime,BusinessConstants.DAY_LAST_TIME);
+ List list = depotHeadService.findInOutMaterialCount(beginTime, endTime, type, materialParam, depotList, oId, (currentPage-1)*pageSize, pageSize);
+ int total = depotHeadService.findInOutMaterialCountTotal(beginTime, endTime, type, materialParam, depotList, oId);
+ map.put("total", total);
+ //存放数据json数组
+ if (null != list) {
+ for (DepotHeadVo4InOutMCount dhc : list) {
+ resList.add(dhc);
+ }
+ }
+ map.put("rows", resList);
+ return R.success(map);
+ }
+
+ /**
+ * 调拨明细统计
+ * @param currentPage
+ * @param pageSize
+ * @param number
+ * @param materialParam
+ * @param depotIdF 调出仓库
+ * @param depotId 调入仓库
+ * @param beginTime
+ * @param endTime
+ * @param subType
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/findAllocationDetail")
+ @ApiOperation(value = "调拨明细统计")
+ public R findallocationDetail(@RequestParam("currentPage") Integer currentPage,
+ @RequestParam("pageSize") Integer pageSize,
+ @RequestParam("number") String number,
+ @RequestParam("materialParam") String materialParam,
+ @RequestParam(value = "depotId", required = false) Long depotId,
+ @RequestParam(value = "depotIdF", required = false) Long depotIdF,
+ @RequestParam("beginTime") String beginTime,
+ @RequestParam("endTime") String endTime,
+ @RequestParam("subType") String subType,
+ HttpServletRequest request)throws Exception {
+
+ Map map = new HashMap();
+ List depotList = new ArrayList<>();
+ List depotFList = new ArrayList<>();
+ if(depotId != null) {
+ depotList.add(depotId);
+ } else {
+ //未选择仓库时默认为当前用户有权限的仓库
+ JSONArray depotArr = depotService.findDepotByCurrentUser();
+ for(Object obj: depotArr) {
+ JSONObject object = JSONObject.parseObject(obj.toString());
+ depotList.add(object.getLong("id"));
+ }
+ }
+ if(depotIdF != null) {
+ depotFList.add(depotIdF);
+ } else {
+ //未选择仓库时默认为当前用户有权限的仓库
+ JSONArray depotArr = depotService.findDepotByCurrentUser();
+ for(Object obj: depotArr) {
+ JSONObject object = JSONObject.parseObject(obj.toString());
+ depotFList.add(object.getLong("id"));
+ }
+ }
+ beginTime = Tools.parseDayToTime(beginTime, BusinessConstants.DAY_FIRST_TIME);
+ endTime = Tools.parseDayToTime(endTime,BusinessConstants.DAY_LAST_TIME);
+ List list = depotHeadService.findAllocationDetail(beginTime, endTime, subType, number, materialParam, depotList, depotFList, (currentPage-1)*pageSize, pageSize);
+ int total = depotHeadService.findAllocationDetailCount(beginTime, endTime, subType, number, materialParam, depotList, depotFList);
+ map.put("rows", list);
+ map.put("total", total);
+ return R.success(map);
+ }
+
+ /**
+ * 对账单接口
+ * @param currentPage
+ * @param pageSize
+ * @param beginTime
+ * @param endTime
+ * @param organId
+ * @param supType
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/findStatementAccount")
+ @ApiOperation(value = "对账单接口")
+ public R findStatementAccount(@RequestParam("currentPage") Integer currentPage,
+ @RequestParam("pageSize") Integer pageSize,
+ @RequestParam("beginTime") String beginTime,
+ @RequestParam("endTime") String endTime,
+ @RequestParam(value = "organId", required = false) Integer organId,
+ @RequestParam("supType") String supType,
+ HttpServletRequest request) throws Exception{
+
+ Map map = new HashMap();
+ beginTime = Tools.parseDayToTime(beginTime,BusinessConstants.DAY_FIRST_TIME);
+ endTime = Tools.parseDayToTime(endTime,BusinessConstants.DAY_LAST_TIME);
+ List list = depotHeadService.findStatementAccount(beginTime, endTime, organId, supType, (currentPage-1)*pageSize, pageSize);
+ int total = depotHeadService.findStatementAccountCount(beginTime, endTime, organId, supType);
+ map.put("rows", list);
+ map.put("total", total);
+ if(null!=organId) {
+ Supplier supplier = supplierService.getSupplier(organId);
+ BigDecimal beginNeed = BigDecimal.ZERO;
+ if (("客户").equals(supType)) {
+ if(supplier.getBeginNeedGet()!=null) {
+ beginNeed = supplier.getBeginNeedGet();
+ }
+ } else if (("供应商").equals(supType)) {
+ if(supplier.getBeginNeedPay()!=null) {
+ beginNeed = supplier.getBeginNeedPay();
+ }
+ }
+ BigDecimal firstMoney = depotHeadService.findTotalPay(organId, beginTime, supType)
+ .subtract(accountHeadService.findTotalPay(organId, beginTime, supType)).add(beginNeed);
+ BigDecimal lastMoney = depotHeadService.findTotalPay(organId, endTime, supType)
+ .subtract(accountHeadService.findTotalPay(organId, endTime, supType)).add(beginNeed);
+ map.put("firstMoney", firstMoney); //期初
+ map.put("lastMoney", lastMoney); //期末
+ }
+ return R.success(map);
+ }
+
+ /**
+ * 根据编号查询单据信息
+ * @param number
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getDetailByNumber")
+ @ApiOperation(value = "根据编号查询单据信息")
+ public R getDetailByNumber(@RequestParam("number") String number,
+ HttpServletRequest request)throws Exception {
+
+ DepotHeadVo4List dhl = new DepotHeadVo4List();
+ List list = depotHeadService.getDetailByNumber(number);
+ if(list.size() == 1) {
+ dhl = list.get(0);
+ }
+ return R.success(dhl);
+ }
+
+ /**
+ * 新增单据主表及单据子表信息
+ * @param body
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @PostMapping(value = "/addDepotHeadAndDetail")
+ @ApiOperation(value = "新增单据主表及单据子表信息")
+ public Object addDepotHeadAndDetail(@RequestBody DepotHeadVo4Body body, HttpServletRequest request) throws Exception{
+ JSONObject result = ExceptionConstants.standardSuccess();
+ depotHeadService.addDepotHeadAndDetail(body, request);
+ return result;
+ }
+
+ /**
+ * 更新单据主表及单据子表信息
+ * @param body
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @PutMapping(value = "/updateDepotHeadAndDetail")
+ @ApiOperation(value = "更新单据主表及单据子表信息")
+ public Object updateDepotHeadAndDetail(@RequestBody DepotHeadVo4Body body, HttpServletRequest request) throws Exception{
+ JSONObject result = ExceptionConstants.standardSuccess();
+ depotHeadService.updateDepotHeadAndDetail(body,request);
+ return result;
+ }
+
+ /**
+ * 统计今日采购额、本月采购额、今日销售额、本月销售额、今日零售额、本月零售额
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getBuyAndSaleStatistics")
+ @ApiOperation(value = "统计今日采购额、本月采购额、今日销售额、本月销售额、今日零售额、本月零售额")
+ public R getBuyAndSaleStatistics(HttpServletRequest request) {
+
+ Map map = new HashMap();
+ String today = Tools.getNow() + BusinessConstants.DAY_FIRST_TIME;
+ String firstDay = Tools.firstDayOfMonth(Tools.getCurrentMonth()) + BusinessConstants.DAY_FIRST_TIME;
+ BigDecimal todayBuy = depotHeadService.getBuyAndSaleStatistics("入库", "采购",
+ 1, today, getNow3()); //今日采购入库
+ BigDecimal todayBuyBack = depotHeadService.getBuyAndSaleStatistics("出库", "采购退货",
+ 1, today, getNow3()); //今日采购退货
+ BigDecimal todaySale = depotHeadService.getBuyAndSaleStatistics("出库", "销售",
+ 1, today, getNow3()); //今日销售出库
+ BigDecimal todaySaleBack = depotHeadService.getBuyAndSaleStatistics("入库", "销售退货",
+ 1, today, getNow3()); //今日销售退货
+ BigDecimal todayRetailSale = depotHeadService.getBuyAndSaleRetailStatistics("出库", "零售",
+ today, getNow3()); //今日零售出库
+ BigDecimal todayRetailSaleBack = depotHeadService.getBuyAndSaleRetailStatistics("入库", "零售退货",
+ today, getNow3()); //今日零售退货
+ BigDecimal monthBuy = depotHeadService.getBuyAndSaleStatistics("入库", "采购",
+ 1, firstDay, getNow3()); //本月采购入库
+ BigDecimal monthBuyBack = depotHeadService.getBuyAndSaleStatistics("出库", "采购退货",
+ 1, firstDay, getNow3()); //本月采购退货
+ BigDecimal monthSale = depotHeadService.getBuyAndSaleStatistics("出库", "销售",
+ 1,firstDay, getNow3()); //本月销售出库
+ BigDecimal monthSaleBack = depotHeadService.getBuyAndSaleStatistics("入库", "销售退货",
+ 1,firstDay, getNow3()); //本月销售退货
+ BigDecimal monthRetailSale = depotHeadService.getBuyAndSaleRetailStatistics("出库", "零售",
+ firstDay, getNow3()); //本月零售出库
+ BigDecimal monthRetailSaleBack = depotHeadService.getBuyAndSaleRetailStatistics("入库", "零售退货",
+ firstDay, getNow3()); //本月零售退货
+ map.put("todayBuy", todayBuy.subtract(todayBuyBack));
+ map.put("todaySale", todaySale.subtract(todaySaleBack));
+ map.put("todayRetailSale", todayRetailSale.subtract(todayRetailSaleBack));
+ map.put("monthBuy", monthBuy.subtract(monthBuyBack));
+ map.put("monthSale", monthSale.subtract(monthSaleBack));
+ map.put("monthRetailSale", monthRetailSale.subtract(monthRetailSaleBack));
+ return R.success(map);
+ }
+
+ /**
+ * 根据当前用户获取操作员数组,用于控制当前用户的数据权限,限制可以看到的单据范围
+ * 注意:该接口提供给部分插件使用,勿删
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/getCreatorByCurrentUser")
+ @ApiOperation(value = "根据当前用户获取操作员数组")
+ public R getCreatorByRoleType(HttpServletRequest request) {
+
+ Map map = new HashMap();
+ String creator = "";
+ String roleType = redisService.getObjectFromSessionByKey(request,"roleType").toString();
+ if(StringUtil.isNotEmpty(roleType)) {
+ creator = depotHeadService.getCreatorByRoleType(roleType);
+ }
+ return R.success(creator);
+ }
+
+ /**
+ * 查询存在欠款的单据
+ * @param search
+ * @param request
+ * @return
+ * @throws Exception
+ */
+ @GetMapping(value = "/debtList")
+ @ApiOperation(value = "查询存在欠款的单据")
+ public String debtList(@RequestParam(value = Constants.SEARCH, required = false) String search,
+ HttpServletRequest request)throws Exception {
+ Map objectMap = new HashMap<>();
+ String organIdStr = StringUtil.getInfo(search, "organId");
+ Long organId = Long.parseLong(organIdStr);
+ String materialParam = StringUtil.getInfo(search, "materialParam");
+ String number = StringUtil.getInfo(search, "number");
+ String beginTime = StringUtil.getInfo(search, "beginTime");
+ String endTime = StringUtil.getInfo(search, "endTime");
+ String type = StringUtil.getInfo(search, "type");
+ String subType = StringUtil.getInfo(search, "subType");
+ String roleType = StringUtil.getInfo(search, "roleType");
+ String status = StringUtil.getInfo(search, "status");
+ List list = depotHeadService.debtList(organId, materialParam, number, beginTime, endTime, type, subType, roleType, status);
+ if (list != null) {
+ objectMap.put("rows", list);
+ return returnJson(objectMap, ErpInfo.OK.name, ErpInfo.OK.code);
+ } else {
+ objectMap.put("rows", new ArrayList<>());
+ return returnJson(objectMap, "查找不到数据", ErpInfo.OK.code);
+ }
+ }
+
+ @GetMapping("/view")
+ public ModelAndView depotView(@RequestParam("no") String no) throws Exception {
+ ModelAndView model = new ModelAndView("depotView.html");
+ DepotHead head = depotHeadService.getDepotHead(no);
+ if (head == null || head.getId() == null){
+ model.addObject("order",null);
+ return model;
+ }
+ DepotHeadVo4Body body = new DepotHeadVo4Body();
+
+ body.setInfo(head);
+
+ List list = depotItemService.getListByHeaderId(head.getId());
+ List listRs = BeanUtil.copyToList(list, DepotItemDto.class);
+ body.setRows(listRs);
+ body.setId(head.getId());
+ String sub = no.substring(0, 4).toUpperCase();
+ logger.info("sub:{}",sub);
+
+ Supplier supplier = supplierService.getSupplier(head.getOrganId());
+ Account acc = accountService.getAccount(head.getAccountId());
+
+
+ model.addObject("supplier",supplier.getSupplier());
+ model.addObject("create_time", DateUtil.format(head.getCreateTime(), DatePattern.NORM_DATETIME_PATTERN));
+ model.addObject("no",no);
+ model.addObject("link_no",head.getLinkNumber());
+ model.addObject("discount",head.getDiscount());
+ model.addObject("discount_money",head.getDiscountMoney());
+ model.addObject("discount_last_money",head.getDiscountLastMoney());
+ model.addObject("other_money",head.getOtherMoney());
+ model.addObject("account",acc.getName());
+ model.addObject("total_price",head.getTotalPrice());
+ model.addObject("debt",head.getDiscountLastMoney().subtract(head.getChangeAmount()));
+
+
+ model.addObject("title",sub);
+ model.addObject("order",body);
+ model.addObject("info",body.getInfo());
+ return model;
+ }
+}
diff --git a/zsw-erp/src/main/java/com/zsw/erp/controller/DepotItemController.java b/zsw-erp/src/main/java/com/zsw/erp/controller/DepotItemController.java
new file mode 100644
index 00000000..16af6314
--- /dev/null
+++ b/zsw-erp/src/main/java/com/zsw/erp/controller/DepotItemController.java
@@ -0,0 +1,640 @@
+package com.zsw.erp.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.Lists;
+import com.zsw.base.R;
+import com.zsw.erp.constants.BusinessConstants;
+import com.zsw.erp.datasource.mappers.MaterialInitialStockMapper;
+import com.zsw.erp.datasource.vo.DepotItemStockWarningCount;
+import com.zsw.erp.datasource.vo.DepotItemVoBatchNumberList;
+import com.zsw.erp.dto.depot.RecordVo;
+import com.zsw.erp.dto.depotItem.BatchStockDto;
+import com.zsw.erp.service.depot.DepotService;
+import com.zsw.erp.service.materialExtend.MaterialExtendService;
+import com.zsw.erp.service.depotItem.DepotItemService;
+import com.zsw.erp.service.material.MaterialService;
+import com.zsw.erp.service.redis.RedisService;
+import com.zsw.erp.service.unit.UnitService;
+import com.zsw.erp.datasource.entities.*;
+import com.zsw.erp.utils.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.util.*;
+
+import static com.zsw.erp.utils.ResponseJsonUtil.returnJson;
+
+@RestController
+@RequestMapping(value = "/depotItem")
+@Api(tags = {"单据明细"})
+public class DepotItemController {
+ private Logger logger = LoggerFactory.getLogger(DepotItemController.class);
+
+ @Resource
+ private DepotItemService depotItemService;
+
+ @Resource
+ private MaterialService materialService;
+
+ @Resource
+ private MaterialInitialStockMapper initialStockMapper;
+
+ @Resource
+ private MaterialExtendService materialExtendService;
+
+ @Resource
+ private UnitService unitService;
+
+ @Resource
+ private DepotService depotService;
+
+ @Resource
+ private RedisService redisService;
+
+ /**
+ * 只根据商品id查询单据列表
+ * @param mId
+ * @param request
+ * @return
+ */
+ @GetMapping(value = "/findDetailByTypeAndMaterialId")
+ @ApiOperation(value = "只根据商品id查询单据列表")
+ public String findDetailByTypeAndMaterialId(
+ @RequestParam(value = Constants.PAGE_SIZE, required = false) Integer pageSize,
+ @RequestParam(value = Constants.CURRENT_PAGE, required = false) Integer currentPage,
+ @RequestParam("materialId") String mId, HttpServletRequest request)throws Exception {
+ Map parameterMap = ParamUtils.requestToMap(request);
+ parameterMap.put("mId", mId);
+ Map objectMap = new HashMap();
+ if (pageSize != null && pageSize <= 0) {
+ pageSize = 10;
+ }
+ String offset = ParamUtils.getPageOffset(currentPage, pageSize);
+ if (StringUtil.isNotEmpty(offset)) {
+ parameterMap.put(Constants.OFFSET, offset);
+ }
+ List list = depotItemService.findDetailByTypeAndMaterialIdList(parameterMap);
+ List dataArray = Lists.newArrayList();
+ // 先把期初入库填入
+// MaterialInitialStock initStock = initialStockMapper.selectOne(Wrappers.lambdaQuery()
+// .eq(MaterialInitialStock::getMaterialId, mId));
+ if (list != null) {
+ for (DepotItemVo4DetailByTypeAndMId d: list) {
+ RecordVo vo = new RecordVo();
+ vo.setNumber(d.getNumber());//编号
+ vo.setBarCode(d.getBarCode());//条码
+ vo.setMaterialName(d.getMaterialName());//名称
+ String type = d.getType();
+ String subType = d.getSubType();
+ if(("其它").equals(type)) {
+ vo.setType(subType);//进出类型
+ } else {
+ vo.setType( subType + type);
+ }
+ vo.setDepotName(d.getDepotName());//仓库名称
+ vo.setBasicNumber(d.getBnum());//数量
+ vo.setOperTime(d.getOtime());//时间
+ dataArray.add(vo);
+ }
+ }
+ if (list == null) {
+ objectMap.put("rows", new ArrayList