Selaa lähdekoodia

513导出的一期新增代码

longw 1 vuosi sitten
vanhempi
commit
5f71a9d7be
27 muutettua tiedostoa jossa 3537 lisäystä ja 413 poistoa
  1. 2 2
      jeecg-boot-base-core/src/main/java/org/jeecg/config/RestTemplateConfig.java
  2. 207 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepart.java
  3. 10 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java
  4. 8 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
  5. 5 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartMapper.xml
  6. 226 165
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
  7. 5 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java
  8. 10 7
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
  9. 44 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java
  10. 18 7
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
  11. 100 30
      module_kzks/src/main/java/org/jeecg/dataSync/task/DepartDataSync.java
  12. 218 0
      module_kzks/src/main/java/org/jeecg/dataSync/task/MaterialProcurementDataSync.java
  13. 10 13
      module_kzks/src/main/java/org/jeecg/dataSync/task/UserDataSync.java
  14. 177 0
      module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/controller/KzksCostModelClPriceController.java
  15. 556 0
      module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/entity/KzksCostModelClPrice.java
  16. 23 0
      module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/mapper/KzksCostModelClPriceMapper.java
  17. 5 0
      module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/mapper/xml/KzksCostModelClPriceMapper.xml
  18. 16 0
      module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/service/IKzksCostModelClPriceService.java
  19. 27 0
      module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/service/impl/KzksCostModelClPriceServiceImpl.java
  20. 387 0
      module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/vue/KzksCostModelClPriceList.vue
  21. 26 0
      module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/vue/KzksCostModelClPrice_menu_insert.sql
  22. 284 0
      module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/vue/modules/KzksCostModelClPriceForm.vue
  23. 84 0
      module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/vue/modules/KzksCostModelClPriceModal.Style#Drawer.vue
  24. 60 0
      module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/vue/modules/KzksCostModelClPriceModal.vue
  25. 406 0
      module_kzks/src/main/java/org/jeecg/modules/projectCost/vo/ProjectCostVO.java
  26. 217 185
      module_kzks/src/main/java/org/jeecg/modules/projectCostHuiji/controller/ProjectCostHuijiController.java
  27. 406 0
      module_kzks/src/main/java/org/jeecg/modules/projectCostHuiji/vo/ProjectCostHuijiListVO.java

+ 2 - 2
jeecg-boot-base-core/src/main/java/org/jeecg/config/RestTemplateConfig.java

@@ -23,9 +23,9 @@ public class RestTemplateConfig {
     public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
         SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
         //ms毫秒
-        factory.setReadTimeout(5000);
+        factory.setReadTimeout(100000);
         //ms毫秒
-        factory.setConnectTimeout(15000);
+        factory.setConnectTimeout(100000);
         return factory;
     }
 }

+ 207 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/entity/SysDepart.java

@@ -99,6 +99,9 @@ public class SysDepart implements Serializable {
     private String oldDirectorUserIds;
     //update-end---author:wangshuai ---date:20200308  for:[JTC-119]新增字段负责人ids和旧的负责人ids
 
+	@TableField("old_id")
+	private String oldId;
+
 	/**
 	 * 重写equals方法
 	 */
@@ -147,4 +150,208 @@ public class SysDepart implements Serializable {
         		orgType, orgCode, mobile, fax, address, memo, status,
         		delFlag, createBy, createTime, updateBy, updateTime);
     }
+
+	public static long getSerialVersionUID() {
+		return serialVersionUID;
+	}
+
+	public String getOldId() {
+		return oldId;
+	}
+
+	public void setOldId(String oldId) {
+		this.oldId = oldId;
+	}
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getParentId() {
+		return parentId;
+	}
+
+	public void setParentId(String parentId) {
+		this.parentId = parentId;
+	}
+
+	public String getDepartName() {
+		return departName;
+	}
+
+	public void setDepartName(String departName) {
+		this.departName = departName;
+	}
+
+	public String getDepartNameEn() {
+		return departNameEn;
+	}
+
+	public void setDepartNameEn(String departNameEn) {
+		this.departNameEn = departNameEn;
+	}
+
+	public String getDepartNameAbbr() {
+		return departNameAbbr;
+	}
+
+	public void setDepartNameAbbr(String departNameAbbr) {
+		this.departNameAbbr = departNameAbbr;
+	}
+
+	public Integer getDepartOrder() {
+		return departOrder;
+	}
+
+	public void setDepartOrder(Integer departOrder) {
+		this.departOrder = departOrder;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getOrgCategory() {
+		return orgCategory;
+	}
+
+	public void setOrgCategory(String orgCategory) {
+		this.orgCategory = orgCategory;
+	}
+
+	public String getDepartType() {
+		return departType;
+	}
+
+	public void setDepartType(String departType) {
+		this.departType = departType;
+	}
+
+	public String getOrgType() {
+		return orgType;
+	}
+
+	public void setOrgType(String orgType) {
+		this.orgType = orgType;
+	}
+
+	public String getOrgCode() {
+		return orgCode;
+	}
+
+	public void setOrgCode(String orgCode) {
+		this.orgCode = orgCode;
+	}
+
+	public String getMobile() {
+		return mobile;
+	}
+
+	public void setMobile(String mobile) {
+		this.mobile = mobile;
+	}
+
+	public String getFax() {
+		return fax;
+	}
+
+	public void setFax(String fax) {
+		this.fax = fax;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getMemo() {
+		return memo;
+	}
+
+	public void setMemo(String memo) {
+		this.memo = memo;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public String getDelFlag() {
+		return delFlag;
+	}
+
+	public void setDelFlag(String delFlag) {
+		this.delFlag = delFlag;
+	}
+
+	public String getQywxIdentifier() {
+		return qywxIdentifier;
+	}
+
+	public void setQywxIdentifier(String qywxIdentifier) {
+		this.qywxIdentifier = qywxIdentifier;
+	}
+
+	public String getCreateBy() {
+		return createBy;
+	}
+
+	public void setCreateBy(String createBy) {
+		this.createBy = createBy;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getUpdateBy() {
+		return updateBy;
+	}
+
+	public void setUpdateBy(String updateBy) {
+		this.updateBy = updateBy;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getDirectorUserIds() {
+		return directorUserIds;
+	}
+
+	public void setDirectorUserIds(String directorUserIds) {
+		this.directorUserIds = directorUserIds;
+	}
+
+	public String getOldDirectorUserIds() {
+		return oldDirectorUserIds;
+	}
+
+	public void setOldDirectorUserIds(String oldDirectorUserIds) {
+		this.oldDirectorUserIds = oldDirectorUserIds;
+	}
 }

+ 10 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysDepartMapper.java

@@ -2,23 +2,26 @@ package org.jeecg.modules.system.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
 import org.jeecg.modules.system.entity.SysDepart;
 import org.jeecg.modules.system.model.SysDepartTreeModel;
 import org.jeecg.modules.system.model.TreeModel;
 import org.springframework.data.repository.query.Param;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
  * <p>
  * 部门 Mapper 接口
  * <p>
- * 
+ *
  * @Author: Steve
  * @Since:   2019-01-22
  */
 public interface SysDepartMapper extends BaseMapper<SysDepart> {
-	
+
 	/**
 	 * 根据用户ID查询部门集合
      * @param userId 用户id
@@ -90,4 +93,9 @@ public interface SysDepartMapper extends BaseMapper<SysDepart> {
 	 */
 	@Select("SELECT * FROM sys_depart where del_flag ='0' AND parent_id = #{parentId,jdbcType=VARCHAR}")
 	List<SysDepart> queryDeptByPid(@Param("parentId")String parentId);
+
+	@Update("update sys_depart set status = 0 where update_time < #{startDate} and update_time > #{endDate}")
+    void updateStatus(@Param("startDate") Date startDate, @Param("endDate") Date endDate);
+
+    List<SysDepart> selectDepartByIds(ArrayList<String> ids);
 }

+ 8 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.model.SysUserSysDepartModel;
 import org.jeecg.modules.system.vo.SysUserDepVo;
@@ -160,4 +161,11 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
 	List<SysUser> queryByDepIds(@Param("departIds")List<String> departIds,@Param("username") String username);
 
     void updateStatus(@Param("startDate") Date startDate, @Param("endDate") Date endDate);
+
+    @Select("select * from sys_user where id = #{id}")
+	SysUser selectUserById(String id);
+
+	@Select("select * from sys_user where username = #{login}")
+	SysUser selectUSerByUsername(String login);
+
 }

+ 5 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDepartMapper.xml

@@ -51,4 +51,8 @@
     <select id="queryCompByOrgCode" resultType="org.jeecg.modules.system.entity.SysDepart">
 		select * from sys_depart where del_flag = '0' and org_category='1' and org_code= #{orgCode,jdbcType=VARCHAR}
 	</select>
-</mapper>
+
+    <select id="selectDepartByIds" parameterType="java.lang.String">
+        select * from sys_depart where id in (#{ids})
+    </select>
+</mapper>

+ 226 - 165
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml

@@ -2,187 +2,248 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.system.mapper.SysUserMapper">
 
-	<!-- 根据用户名查询 -->
-	<select id="getUserByName" resultType="org.jeecg.modules.system.entity.SysUser">
+    <!-- 根据用户名查询 -->
+    <select id="getUserByName" resultType="org.jeecg.modules.system.entity.SysUser">
 		select * from  sys_user  where username = #{username} and del_flag = 0
 	</select>
 
-	<!-- 根据部门Id查询 -->
-	<select id="getUserByDepId" resultType="org.jeecg.modules.system.entity.SysUser">
-		select * from sys_user where del_flag = 0 and id in (select user_id from sys_user_depart where dep_id=#{departId})
-		<if test="username!=null and username!=''">
-			and username = #{username}
-		</if>
-	</select>
-
-	<!-- 查询用户的所属部门名称信息 -->
-	<select id="getDepNamesByUserIds" resultType="org.jeecg.modules.system.vo.SysUserDepVo">
-		select d.depart_name,ud.user_id from sys_user_depart ud,sys_depart d where d.id = ud.dep_id and ud.user_id in
-		<foreach collection="userIds" index="index" item="id" open="(" separator="," close=")">
-			#{id}
-		</foreach>
-	</select>
+    <!-- 根据部门Id查询 -->
+    <select id="getUserByDepId" resultType="org.jeecg.modules.system.entity.SysUser">
+        select * from sys_user where del_flag = 0 and id in (select user_id from sys_user_depart where
+        dep_id=#{departId})
+        <if test="username!=null and username!=''">
+            and username = #{username}
+        </if>
+    </select>
+
+    <!-- 查询用户的所属部门名称信息 -->
+    <select id="getDepNamesByUserIds" resultType="org.jeecg.modules.system.vo.SysUserDepVo">
+        select d.depart_name,ud.user_id from sys_user_depart ud,sys_depart d where d.id = ud.dep_id and ud.user_id in
+        <foreach collection="userIds" index="index" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
 
-	<!-- 通过多个部门IDS,查询部门下的用户信息 -->
-	<select id="getUserByDepIds" resultType="org.jeecg.modules.system.entity.SysUser">
-		select * from sys_user where del_flag = 0
-		<if test="departIds!=null  and departIds.size()>0">
-			and id in (select user_id from sys_user_depart where dep_id in
-			<foreach collection="departIds" index="index" item="id" open="(" separator="," close=")">
-				#{id}
-			</foreach>
-			)
-		</if>
-		<if test="username!=null and username!=''">
-			and username = #{username}
-		</if>
-	</select>
-
-	<!-- 根据角色Id查询 -->
-	<select id="getUserByRoleId" resultType="org.jeecg.modules.system.entity.SysUser">
-		select * from sys_user where del_flag = 0 and id in (select user_id from sys_user_role where role_id=#{roleId})
-		<if test="username!=null and username!=''">
-			and username = #{username}
-		</if>
-	</select>
-
-	<!--  修改用户部门code -->
-	<update id="updateUserDepart">
+    <!-- 通过多个部门IDS,查询部门下的用户信息 -->
+    <select id="getUserByDepIds" resultType="org.jeecg.modules.system.entity.SysUser">
+        select * from sys_user where del_flag = 0
+        <if test="departIds!=null  and departIds.size()>0">
+            and id in (select user_id from sys_user_depart where dep_id in
+            <foreach collection="departIds" index="index" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+            )
+        </if>
+        <if test="username!=null and username!=''">
+            and username = #{username}
+        </if>
+    </select>
+
+    <!-- 根据角色Id查询 -->
+    <select id="getUserByRoleId" resultType="org.jeecg.modules.system.entity.SysUser">
+        select * from sys_user where del_flag = 0 and id in (select user_id from sys_user_role where role_id=#{roleId})
+        <if test="username!=null and username!=''">
+            and username = #{username}
+        </if>
+    </select>
+
+    <!--  修改用户部门code -->
+    <update id="updateUserDepart">
 		UPDATE sys_user SET org_code = #{orgCode} where username = #{username}
 	</update>
 
-	<!-- 根据手机号查询 -->
-	<select id="getUserByPhone"  resultType="org.jeecg.modules.system.entity.SysUser">
+    <!-- 根据手机号查询 -->
+    <select id="getUserByPhone" resultType="org.jeecg.modules.system.entity.SysUser">
 		select * from  sys_user  where phone = #{phone} and del_flag = 0
 	</select>
 
-	<!-- 根据邮箱查询用户信息 -->
-	<select id="getUserByEmail" resultType="org.jeecg.modules.system.entity.SysUser">
+    <!-- 根据邮箱查询用户信息 -->
+    <select id="getUserByEmail" resultType="org.jeecg.modules.system.entity.SysUser">
 	select * from  sys_user  where email = #{email} and del_flag = 0
 	</select>
 
-	<!-- SQL片段:getUserByOrgCode 的 FROM 和 WHERE 部分 -->
-	<sql id="getUserByOrgCodeFromSql">
-		FROM
-		sys_depart
-		INNER JOIN sys_user_depart ON sys_user_depart.dep_id = sys_depart.id
-		INNER JOIN sys_user ON sys_user.id = sys_user_depart.user_id
-		WHERE
-		<if test="orgCode == null">
-			<bind name="bindOrgCode" value="'%'"/>
-		</if>
-		<if test="orgCode != null">
-			<bind name="bindOrgCode" value="orgCode+'%'"/>
-		</if>
-		sys_user.del_flag = 0 AND sys_depart.org_code LIKE #{bindOrgCode}
-
-		<if test="userParams != null">
-			<if test="userParams.realname != null and userParams.realname != ''">
-				AND sys_user.realname LIKE concat(concat('%',#{userParams.realname}),'%')
-			</if>
-			<if test="userParams.workNo != null and userParams.workNo != ''">
-				AND sys_user.work_no LIKE concat(concat('%',#{userParams.workNo}),'%')
-			</if>
-		</if>
-	</sql>
-
-	<!-- 根据 orgCode 查询用户,包括子部门下的用户 -->
-	<select id="getUserByOrgCode" resultType="org.jeecg.modules.system.model.SysUserSysDepartModel">
-		SELECT
-			sys_user.id AS id,
-			sys_user.realname AS realname,
-			sys_user.avatar AS avatar,
-			sys_user.sex AS sex,
-			sys_user.birthday AS birthday,
-			sys_user.work_no AS workNo,
-			sys_user.post AS post,
-			sys_user.telephone AS telephone,
-			sys_user.email AS email,
-			sys_user.phone AS phone,
-			sys_depart.id AS departId,
-			sys_depart.depart_name AS departName
-		<include refid="getUserByOrgCodeFromSql"/>
-		ORDER BY
-			sys_depart.org_code ASC
-	</select>
-
-	<!-- 查询 getUserByOrgCode 的总数-->
-	<select id="getUserByOrgCodeTotal" resultType="java.lang.Integer">
-		SELECT COUNT(1) <include refid="getUserByOrgCodeFromSql"/>
-	</select>
-
-	<!-- 批量删除角色的与用户关系-->
-	<update id="deleteBathRoleUserRelation">
-		delete from sys_user_role
-		where role_id in
-		<foreach item="id" collection="roleIdArray" open="(" separator="," close=")">
-			#{id}
-		</foreach>
-	</update>
-	<!-- 批量删除角色的与权限关系-->
-	<update id="deleteBathRolePermissionRelation">
-		delete from sys_role_permission
-		where role_id in
-		<foreach item="id" collection="roleIdArray" open="(" separator="," close=")">
-			#{id}
-		</foreach>
-	</update>
-
-	<!-- 查询被逻辑删除的用户 -->
-	<select id="selectLogicDeleted" resultType="org.jeecg.modules.system.entity.SysUser">
+    <!-- SQL片段:getUserByOrgCode 的 FROM 和 WHERE 部分 -->
+    <sql id="getUserByOrgCodeFromSql">
+        FROM
+        sys_depart
+        INNER JOIN sys_user_depart ON sys_user_depart.dep_id = sys_depart.id
+        INNER JOIN sys_user ON sys_user.id = sys_user_depart.user_id
+        WHERE
+        <if test="orgCode == null">
+            <bind name="bindOrgCode" value="'%'"/>
+        </if>
+        <if test="orgCode != null">
+            <bind name="bindOrgCode" value="orgCode+'%'"/>
+        </if>
+        sys_user.del_flag = 0 AND sys_depart.org_code LIKE #{bindOrgCode}
+
+        <if test="userParams != null">
+            <if test="userParams.realname != null and userParams.realname != ''">
+                AND sys_user.realname LIKE concat(concat('%',#{userParams.realname}),'%')
+            </if>
+            <if test="userParams.workNo != null and userParams.workNo != ''">
+                AND sys_user.work_no LIKE concat(concat('%',#{userParams.workNo}),'%')
+            </if>
+        </if>
+    </sql>
+
+    <!-- 根据 orgCode 查询用户,包括子部门下的用户 -->
+    <select id="getUserByOrgCode" resultType="org.jeecg.modules.system.model.SysUserSysDepartModel">
+        SELECT
+        sys_user.id AS id,
+        sys_user.realname AS realname,
+        sys_user.avatar AS avatar,
+        sys_user.sex AS sex,
+        sys_user.birthday AS birthday,
+        sys_user.work_no AS workNo,
+        sys_user.post AS post,
+        sys_user.telephone AS telephone,
+        sys_user.email AS email,
+        sys_user.phone AS phone,
+        sys_depart.id AS departId,
+        sys_depart.depart_name AS departName
+        <include refid="getUserByOrgCodeFromSql"/>
+        ORDER BY
+        sys_depart.org_code ASC
+    </select>
+
+    <!-- 查询 getUserByOrgCode 的总数-->
+    <select id="getUserByOrgCodeTotal" resultType="java.lang.Integer">
+        SELECT COUNT(1)
+        <include refid="getUserByOrgCodeFromSql"/>
+    </select>
+
+    <!-- 批量删除角色的与用户关系-->
+    <update id="deleteBathRoleUserRelation">
+        delete from sys_user_role
+        where role_id in
+        <foreach item="id" collection="roleIdArray" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+    <!-- 批量删除角色的与权限关系-->
+    <update id="deleteBathRolePermissionRelation">
+        delete from sys_role_permission
+        where role_id in
+        <foreach item="id" collection="roleIdArray" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+    <!-- 查询被逻辑删除的用户 -->
+    <select id="selectLogicDeleted" resultType="org.jeecg.modules.system.entity.SysUser">
 		SELECT * FROM sys_user ${ew.customSqlSegment}
 	</select>
 
-	<!-- 更新被逻辑删除的用户 -->
-	<update id="revertLogicDeleted">
-		UPDATE
-			sys_user
-		SET
-			del_flag = 0,
-			update_by = #{entity.updateBy},
-			update_time = #{entity.updateTime}
-		WHERE
-			del_flag = 1
-			AND id IN
-			<foreach collection="userIds" item="userId" open="(" close=")" separator="," >
-				#{userId}
-			</foreach>
-	</update>
-
-	<!-- 彻底删除被逻辑删除的用户 -->
-	<delete id="deleteLogicDeleted">
-		DELETE FROM sys_user WHERE del_flag = 1 AND id IN
-		<foreach collection="userIds" item="userId" open="(" close=")" separator="," >
-			#{userId}
-		</foreach>
-	</delete>
-
-	<!-- 更新空字符串为null -->
-	<update id="updateNullByEmptyString">
-		UPDATE sys_user
-		<if test="fieldName == 'email'">
-			SET email = NULL WHERE email = ''
-		</if>
-		<if test="fieldName == 'phone'">
-			SET phone = NULL WHERE phone = ''
-		</if>
-	</update>
-    <update id="updateStatus">
-		update sys_depart set status = 0 where update_time &lt; #{startDate} &gt; #{endDate}
-	</update>
+    <!-- 更新被逻辑删除的用户 -->
+    <update id="revertLogicDeleted">
+        UPDATE
+        sys_user
+        SET
+        del_flag = 0,
+        update_by = #{entity.updateBy},
+        update_time = #{entity.updateTime}
+        WHERE
+        del_flag = 1
+        AND id IN
+        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+    </update>
+
+    <!-- 彻底删除被逻辑删除的用户 -->
+    <delete id="deleteLogicDeleted">
+        DELETE FROM sys_user WHERE del_flag = 1 AND id IN
+        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+    </delete>
+
+    <!-- 更新空字符串为null -->
+    <update id="updateNullByEmptyString">
+        UPDATE sys_user
+        <if test="fieldName == 'email'">
+            SET email = NULL WHERE email = ''
+        </if>
+        <if test="fieldName == 'phone'">
+            SET phone = NULL WHERE phone = ''
+        </if>
+    </update>
 
     <!-- 通过多个部门IDS,查询部门下的用户信息 -->
-	<select id="queryByDepIds" resultType="org.jeecg.modules.system.entity.SysUser">
-		select * from sys_user where del_flag = 0
-		<if test="departIds!=null  and departIds.size()>0">
-			and id in (select user_id from sys_user_depart where dep_id in
-			<foreach collection="departIds" index="index" item="id" open="(" separator="," close=")">
-				#{id}
-			</foreach>
-			)
-		</if>
-		<if test="username!=null and username!=''">
-			and username != #{username}
-		</if>
-	</select>
+    <select id="queryByDepIds" resultType="org.jeecg.modules.system.entity.SysUser">
+        select * from sys_user where del_flag = 0
+        <if test="departIds!=null  and departIds.size()>0">
+            and id in (select user_id from sys_user_depart where dep_id in
+            <foreach collection="departIds" index="index" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+            )
+        </if>
+        <if test="username!=null and username!=''">
+            and username != #{username}
+        </if>
+    </select>
+
+
+<!--    <insert id="insertOrUpdate" parameterType="org.jeecg.modules.system.entity.SysUser">-->
+<!--        insert into sys_user-->
+<!--        (id,username,realname,password,salt,avatar,birthday,sex,email,phone,org_code,status,del_flag,third_id,third_type,activiti_sync,work_no,post,telephone,create_by-->
+<!--        ,create_time,update_by,update_time,user_identity,depart_ids,rel_tenant_ids,client_id)-->
+<!--		<trim prefix="values (" suffix=")" suffixOverrides=",">-->
+<!--		<if test="sysUser.id != null">#{sysUser.id},</if>-->
+<!--		<if test="sysUser.username != null">#{sysUser.username},</if>-->
+<!--		<if test="sysUser.realname != null">#{sysUser.realname},</if>-->
+<!--		<if test="sysUser.password != null">#{sysUser.password},</if>-->
+<!--		<if test="sysUser.salt != null">#{sysUser.salt},</if>-->
+<!--		<if test="sysUser.avatar != null">#{sysUser.avatar},</if>-->
+<!--		<if test="sysUser.birthday != null">#{sysUser.birthday},</if>-->
+<!--		<if test="sysUser.sex != null">#{sysUser.sex},</if>-->
+<!--		<if test="sysUser.email != null">#{sysUser.email},</if>-->
+<!--		<if test="sysUser.phone != null">#{sysUser.phone},</if>-->
+<!--		<if test="sysUser.orgCode != null">#{sysUser.orgCode},</if>-->
+<!--		<if test="sysUser.status != null">#{sysUser.status},</if>-->
+<!--		<if test="sysUser.delFlag != null">#{sysUser.delFlag},</if>-->
+<!--		null,-->
+<!--	    null,-->
+<!--		<if test="sysUser.activitiSync != null">#{sysUser.activitiSync},</if>-->
+<!--		<if test="sysUser.workNo != null">#{sysUser.workNo},</if>-->
+<!--		<if test="sysUser.post != null">#{sysUser.post},</if>-->
+<!--		<if test="sysUser.telephone != null">#{sysUser.telephone},</if>-->
+<!--		<if test="sysUser.createBy != null">#{sysUser.createBy},</if>-->
+<!--		<if test="sysUser.createTime != null">#{sysUser.createTime},</if>-->
+<!--		<if test="sysUser.updateBy != null">#{sysUser.updateBy},</if>-->
+<!--		<if test="sysUser.updateTime != null">#{sysUser.updateTime},</if>-->
+<!--		<if test="sysUser.userIdentity != null">#{sysUser.userIdentity},</if>-->
+<!--		<if test="sysUser.departIds != null">#{sysUser.departIds},</if>-->
+<!--		<if test="sysUser.relTenantIds != null">#{sysUser.relTenantIds},</if>-->
+<!--		<if test="sysUser.clientId != null">#{sysUser.clientId},</if>-->
+<!--		</trim>-->
+<!--		ON DUPLICATE KEY UPDATE-->
+<!--		username = VALUES(username),-->
+<!--		realname = VALUES(realname),-->
+<!--		password = VALUES(password),-->
+<!--		salt = VALUES(salt),-->
+<!--		avatar = VALUES(avatar),-->
+<!--		birthday = VALUES(birthday),-->
+<!--		sex = VALUES(sex),-->
+<!--		email = VALUES(email),-->
+<!--		phone = VALUES(phone),-->
+<!--		org_code = VALUES(org_code),-->
+<!--		status = VALUES(status),-->
+<!--		del_flag = VALUES(del_flag),-->
+<!--		activiti_sync = VALUES(activiti_sync),-->
+<!--		work_no = VALUES(work_no),-->
+<!--		post = VALUES(post),-->
+<!--		telephone = VALUES(telephone),-->
+<!--		create_by = VALUES(create_by),-->
+<!--		create_time = VALUES(create_time),-->
+<!--		update_by = VALUES(update_by),-->
+<!--		update_time = VALUES(update_time),-->
+<!--		user_identity = VALUES(user_identity),-->
+<!--		depart_ids = VALUES(depart_ids),-->
+<!--		rel_tenant_ids = VALUES(rel_tenant_ids),-->
+<!--		client_id = VALUES(client_id),-->
+<!--    </insert>-->
+
 </mapper>

+ 5 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysDepartService.java

@@ -6,6 +6,7 @@ import org.jeecg.modules.system.entity.SysDepart;
 import org.jeecg.modules.system.model.DepartIdModel;
 import org.jeecg.modules.system.model.SysDepartTreeModel;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -168,4 +169,8 @@ public interface ISysDepartService extends IService<SysDepart>{
      * @return
      */
     void updateStatus(Date startDate, Date endDate);
+
+    List<SysDepart> selectDepartByIds(ArrayList<String> ids);
+
+    String saveDepartDateAndReturnOrgCode(SysDepart sysDepart, String username);
 }

+ 10 - 7
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java

@@ -28,6 +28,8 @@ import java.util.Set;
  */
 public interface ISysUserService extends IService<SysUser> {
 
+	SysUser selectUserById(String id);
+
 	/**
 	 * 重置密码
 	 *
@@ -67,15 +69,15 @@ public interface ISysUserService extends IService<SysUser> {
      * @return SysUser
      */
 	public SysUser getUserByName(String username);
-	
+
 	/**
 	 * 添加用户和用户角色关系
 	 * @param user
 	 * @param roles
 	 */
 	public void addUserWithRole(SysUser user,String roles);
-	
-	
+
+
 	/**
 	 * 修改用户和用户角色关系
 	 * @param user
@@ -98,7 +100,7 @@ public interface ISysUserService extends IService<SysUser> {
 	 * @return
 	 */
 	public SysRoleIndex getDynamicIndexByUserRole(String username,String version);
-	
+
 	/**
 	  * 查询用户信息包括 部门信息
 	 * @param username
@@ -178,14 +180,14 @@ public interface ISysUserService extends IService<SysUser> {
 	 * @return 权限集合
 	 */
 	Set<String> getUserPermissionsSet(String username);
-	
+
 	/**
 	 * 根据用户名设置部门ID
 	 * @param username
 	 * @param orgCode
 	 */
 	void updateUserDepart(String username,String orgCode);
-	
+
 	/**
 	 * 根据手机号获取用户名和密码
      * @param phone 手机号
@@ -215,7 +217,7 @@ public interface ISysUserService extends IService<SysUser> {
 	 * @param departs
 	 */
 	void editUserWithDepart(SysUser user, String departs);
-	
+
 	/**
 	   * 校验用户是否有效
 	 * @param sysUser
@@ -303,4 +305,5 @@ public interface ISysUserService extends IService<SysUser> {
 	 */
 	LoginUser getEncodeUserInfo(String username);
 
+	SysUser selectUSerByUsername(String login);
 }

+ 44 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysDepartServiceImpl.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.system.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -7,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import io.netty.util.internal.StringUtil;
+import org.apache.commons.lang.ObjectUtils;
 import org.apache.commons.lang.StringUtils;
 import org.jeecg.common.constant.CacheConstant;
 import org.jeecg.common.constant.CommonConstant;
@@ -167,6 +169,42 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
 
 	}
 
+	@Override
+	public String saveDepartDateAndReturnOrgCode(SysDepart sysDepart, String username) {
+		if (sysDepart != null && username != null) {
+			if (sysDepart.getParentId() == null) {
+				sysDepart.setParentId("");
+			}
+			//String s = UUID.randomUUID().toString().replace("-", "");
+			sysDepart.setId(IdWorker.getIdStr(sysDepart));
+			// 先判断该对象有无父级ID,有则意味着不是最高级,否则意味着是最高级
+			// 获取父级ID
+			String parentId = sysDepart.getParentId();
+			//update-begin--Author:baihailong  Date:20191209 for:部门编码规则生成器做成公用配置
+			JSONObject formData = new JSONObject();
+			formData.put("parentId",parentId);
+			String[] codeArray = (String[]) FillRuleUtil.executeRule(FillRuleConstant.DEPART,formData);
+			//update-end--Author:baihailong  Date:20191209 for:部门编码规则生成器做成公用配置
+			sysDepart.setOrgCode(codeArray[0]);
+			String orgType = codeArray[1];
+			sysDepart.setOrgType(String.valueOf(orgType));
+			sysDepart.setCreateTime(new Date());
+			sysDepart.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
+
+			SysDepart one = this.lambdaQuery().eq(SysDepart::getOldId,sysDepart.getOldId()).one();
+			if (ObjectUtil.isNotNull(one)) return one.getOrgCode();
+			this.save(sysDepart);
+			//update-begin---author:wangshuai ---date:20220307  for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理
+			//新增部门的时候新增负责部门
+			if(oConvertUtils.isNotEmpty(sysDepart.getDirectorUserIds())){
+				this.addDepartByUserIds(sysDepart,sysDepart.getDirectorUserIds());
+			}
+			//update-end---author:wangshuai ---date:20220307  for:[JTC-119]在部门管理菜单下设置部门负责人 创建用户的时候不需要处理
+			return sysDepart.getOrgCode();
+		}
+		return null;
+	}
+
 	/**
 	 * saveDepartData 的调用方法,生成部门编码和部门类型(作废逻辑)
 	 * @deprecated
@@ -632,7 +670,7 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
 	 */
     @Override
     public void updateStatus(Date startDate, Date endDate) {
-        sysUserMapper.updateStatus(startDate,endDate);
+        sysDepartMapper.updateStatus(startDate,endDate);
     }
 
     /**
@@ -777,4 +815,9 @@ public class SysDepartServiceImpl extends ServiceImpl<SysDepartMapper, SysDepart
     }
     //update-end---author:wangshuai ---date:20200308  for:[JTC-119]在部门管理菜单下设置部门负责人,新增方法添加部门负责人、删除负责部门负责人、查询部门对应的负责人
 
+
+	@Override
+	public List<SysDepart> selectDepartByIds(ArrayList<String> ids) {
+		return sysDepartMapper.selectDepartByIds(ids);
+	}
 }

+ 18 - 7
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java

@@ -44,7 +44,7 @@ import java.util.stream.Collectors;
 @Service
 @Slf4j
 public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements ISysUserService {
-	
+
 	@Autowired
 	private SysUserMapper userMapper;
 	@Autowired
@@ -72,7 +72,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 	@Autowired
 	SysRoleIndexMapper sysRoleIndexMapper;
 
-    @Override
+	@Override
+	public SysUser selectUserById(String id) {
+		return userMapper.selectUserById(id);
+	}
+
+	@Override
     @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true)
     public Result<?> resetPassword(String username, String oldpassword, String newpassword, String confirmpassword) {
         SysUser user = userMapper.getUserByName(username);
@@ -125,8 +130,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 	public SysUser getUserByName(String username) {
 		return userMapper.getUserByName(username);
 	}
-	
-	
+
+
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void addUserWithRole(SysUser user, String roles) {
@@ -187,7 +192,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 				roleIndex = list.get(0);
 			}
 		}
-		
+
 		//如果componentUrl为空,则返回空
 		if(oConvertUtils.isEmpty(roleIndex.getComponent())){
 			return null;
@@ -253,7 +258,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 			info.setSysUserName(sysUser.getRealname());
 			info.setSysOrgCode(sysUser.getOrgCode());
 		}
-		
+
 		//多部门支持in查询
 		List<SysDepart> list = sysDepartMapper.queryUserDeparts(sysUser.getId());
 		List<String> sysMultiOrgCode = new ArrayList<String>();
@@ -269,7 +274,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 			}
 		}
 		info.setSysMultiOrgCode(sysMultiOrgCode);
-		
+
 		return info;
 	}
 
@@ -611,4 +616,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 		BeanUtils.copyProperties(sysUser, loginUser);
 		return loginUser;
 	}
+
+	@Override
+	public SysUser selectUSerByUsername(String login) {
+		return userMapper.selectUSerByUsername(login);
+	}
+
 }

+ 100 - 30
module_kzks/src/main/java/org/jeecg/dataSync/task/DepartDataSync.java

@@ -3,21 +3,22 @@ package org.jeecg.dataSync.task;
 
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.TypeReference;
-import org.jeecg.common.constant.FillRuleConstant;
-import org.jeecg.common.util.FillRuleUtil;
+import org.apache.commons.lang3.ObjectUtils;
 import org.jeecg.config.sign.util.HttpUtils;
 import org.jeecg.dataSync.config.HrConfigurer;
 import org.jeecg.dataSync.util.WebServiceUtil;
 import org.jeecg.modules.system.entity.SysDepart;
 import org.jeecg.modules.system.service.ISysDepartService;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import java.util.*;
 
 @Component
-public class DepartDataSync {
+public class DepartDataSync implements Job {
 
     @Autowired
     private HrConfigurer hrConfigurer;
@@ -25,48 +26,117 @@ public class DepartDataSync {
     @Autowired
     private ISysDepartService sysDepartService;
 
-    @Scheduled(cron = "0 0 3 * * ?")
-    public void DepartDataSyncTask() {
+    @Override
+    public void execute(JobExecutionContext context) throws JobExecutionException {
         boolean connectStatus = WebServiceUtil.urlIsReach(hrConfigurer.getDeptUrl());
         if (!connectStatus) return;
 
-        String dataJson = HttpUtils.httpGet(hrConfigurer.getUserUrl(), new ArrayList<>());
+        String dataJson = HttpUtils.httpGet(hrConfigurer.getDeptUrl(), new ArrayList<>());
         List<Map<String, Object>> list = JSONObject.parseObject(dataJson, new TypeReference<List<Map<String, Object>>>() {
         });
 
         Calendar instance = Calendar.getInstance();
         instance.setTime(new Date());
         Date currentDate = instance.getTime();
-        instance.set(Calendar.HOUR,0);
-        instance.set(Calendar.MINUTE,0);
-        instance.set(Calendar.SECOND,0);
+        instance.set(Calendar.HOUR, 0);
+        instance.set(Calendar.MINUTE, 0);
+        instance.set(Calendar.SECOND, 0);
         Date startDate = instance.getTime();
-        instance.set(Calendar.HOUR,24);
+        instance.set(Calendar.HOUR, 24);
         Date endDate = instance.getTime();
 
-        if (list.size() > 0) {
-            ArrayList<SysDepart> sysDeparts = new ArrayList<>();
 
-            list.forEach(item -> {
-                SysDepart depart = new SysDepart();
+        if (list.isEmpty()) return;
+
+        ArrayList<SysDepart> sysDeparts = new ArrayList<>();
+
+        for (int i = 0; i < list.size(); i++) {
+            Map<String, Object> item = list.get(i);
+
+            SysDepart depart = new SysDepart();
+            if (!(ObjectUtils.isEmpty(item.get("department_id")))) {
                 depart.setId(String.valueOf((int) item.get("department_id")));
+            }
+
+            if (!(ObjectUtils.isEmpty(item.get("department_name")))) {
                 depart.setDepartName((String) item.get("department_name"));
+            }
+
+            if (!(ObjectUtils.isEmpty(item.get("parent_id")))) {
                 depart.setParentId(String.valueOf((int) item.get("parent_id")));
-                depart.setUpdateTime(currentDate);
-                depart.setDelFlag("0");
-                depart.setStatus("1");
-
-                // 根据parentId生成 org_code
-                com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
-                jsonObject.put("parentId",String.valueOf((int) item.get("parent_id")));
-                String[] codeArray = (String[]) FillRuleUtil.executeRule(FillRuleConstant.DEPART,jsonObject);
-                depart.setOrgCode(codeArray[0]); // 机构编码,用于做数据权限
-
-                sysDeparts.add(depart);
-            });
-            sysDepartService.saveOrUpdateBatch(sysDeparts);
-            /*将非今天导入的部门数据的部门状态更改为非启用*/
-            sysDepartService.updateStatus(startDate,endDate);
+            }
+
+            depart.setUpdateTime(currentDate);
+            depart.setDelFlag("0");
+            depart.setStatus("1");
+            sysDeparts.add(depart);
+        }
+
+        recursion(0, sysDeparts, new ArrayList<SysDepart>(),new HashMap<String,String>());
+
+        /*将非今天导入的部门数据的部门状态更改为非启用*/
+        sysDepartService.updateStatus(startDate, endDate);
+
+    }
+
+    public void recursion(int i, List<SysDepart> sysDeparts, List<SysDepart> result,HashMap<String,String> map) {
+        int mark = i;
+        ArrayList<SysDepart> objects = new ArrayList<>();
+        ArrayList<SysDepart> resultObjects = new ArrayList<>();
+        if (sysDeparts.isEmpty()) return;
+
+
+        if (mark == 0) {
+            SysDepart initSysDepart = new SysDepart();
+            initSysDepart.setId("0");
+            initSysDepart.setDepartName("中国航天");
+            initSysDepart.setParentId(null);
+            initSysDepart.setOrgCategory("1");
+            initSysDepart.setOrgType("1");
+            initSysDepart.setOldId("0");
+            String orgCode = sysDepartService.saveDepartDateAndReturnOrgCode(initSysDepart, "admin");
+            SysDepart one = sysDepartService.lambdaQuery().eq(SysDepart::getOrgCode, orgCode).one();
+            map.put("0",one.getId());
+
+            for (SysDepart sysDepart : sysDeparts) {
+                if (sysDepart.getParentId().equals("0")) {
+                    String id = sysDepart.getId();
+                    sysDepart.setParentId(one.getId());
+                    sysDepart.setOrgCategory("1");
+                    sysDepart.setOrgType("2");
+                    sysDepart.setOldId(id);
+                    resultObjects.add(sysDepart);
+                    objects.add(sysDepart);
+                    String code = sysDepartService.saveDepartDateAndReturnOrgCode(initSysDepart, "admin");
+                    SysDepart re = sysDepartService.lambdaQuery().eq(SysDepart::getOrgCode, orgCode).one();
+                    map.put(id,re.getId());
+                }
+            }
+        } else {
+            for (SysDepart sysDepart : result) {
+                for (SysDepart depart : sysDeparts) {
+                    if (depart.getParentId().equals(sysDepart.getId())) {
+                        String id = depart.getId();
+                        depart.setParentId(map.get(sysDepart.getId()));
+                        depart.setOrgCategory("1");
+                        depart.setOrgType("2");
+                        depart.setOldId(id);
+                        resultObjects.add(depart);
+                        objects.add(depart);
+                        String code = sysDepartService.saveDepartDateAndReturnOrgCode(depart, "admin");
+                        SysDepart re = sysDepartService.lambdaQuery().eq(SysDepart::getOrgCode, code).one();
+                        map.put(id,re.getId());
+                    }
+                }
+            }
+        }
+
+        for (SysDepart object : objects) {
+            sysDeparts.remove(object);
         }
+        result = resultObjects;
+
+        mark = result.size();
+        recursion(mark, sysDeparts, result,map);
     }
 }

+ 218 - 0
module_kzks/src/main/java/org/jeecg/dataSync/task/MaterialProcurementDataSync.java

@@ -0,0 +1,218 @@
+package org.jeecg.dataSync.task;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.alibaba.fastjson2.TypeReference;
+import org.apache.commons.lang3.ObjectUtils;
+import org.jeecg.modules.KzksCostModelClPrice.entity.KzksCostModelClPrice;
+import org.jeecg.modules.KzksCostModelClPrice.service.IKzksCostModelClPriceService;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Component
+public class MaterialProcurementDataSync implements Job {
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Autowired
+    private IKzksCostModelClPriceService kzksCostModelClPriceService;
+
+    private static long begin = System.currentTimeMillis();
+    private static boolean hasMore = true;
+    private static long offset = 0L;
+    private static long length = 1000L;
+    private static String url = "http://10.67.0.51/apex/esun/yx/oneTotal?offset={offset}";
+
+    @Override
+    public void execute(JobExecutionContext context) throws JobExecutionException {
+        try {
+            initMethod();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public void initMethod() throws InterruptedException {
+        if (offset == 0) kzksCostModelClPriceService.truncateTable();
+        try {
+            method();
+            hasMore = true;
+            offset = 0L;
+            length = 1000L;
+        } catch (Exception e) {
+            Thread.sleep(1000L * 60);
+            long end = System.currentTimeMillis();
+            if (end - begin > 1000L * 60 * 60 * 2) return;
+            initMethod();
+        }
+    }
+
+    public void method() {
+        while (hasMore) {
+            ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.GET, null, String.class, offset);
+            String body = exchange.getBody();
+            Map<String, Object> stringObjectMap = JSONObject.parseObject(body, new TypeReference<Map<String, Object>>() {
+            });
+            if (ObjectUtils.isEmpty(stringObjectMap)) break;
+            String jsonString = JSONObject.toJSONString(stringObjectMap.get("items"));
+            List<Map<String, Object>> items = JSONObject.parseObject(jsonString, new TypeReference<List<Map<String, Object>>>() {
+            });
+
+            ArrayList<KzksCostModelClPrice> list = new ArrayList<>();
+
+            for (Map<String, Object> item : items) {
+                String uniqueId = (String) item.get("unique_id");  //物料唯一码
+                String wlbh = (String) item.get("wlbh"); //物料编码
+                String pzCode = (String) item.get("pz_code"); //凭证唯一码
+                String wlmc = (String) item.get("wlmc"); //物料名称
+                String ggpp = (String) item.get("ggpp"); //规格型号
+                String qualitygrade = (String) item.get("qualitygrade"); //质量等级
+                String htdate = (String) item.get("ht_date"); //合同签署日期
+
+                Object inputhtye = item.get("htye"); //合同余额
+                BigDecimal htye = null;
+                if (inputhtye instanceof Integer) {
+                    Integer casthtye = (Integer) inputhtye;
+                    htye = BigDecimal.valueOf(casthtye);
+                } else if (inputhtye instanceof BigDecimal) {
+                    htye = (BigDecimal) inputhtye;
+                }
+
+
+                String fpDate = (String) item.get("fp_date"); //发票开票时间
+                String jldw = (String) item.get("jldw"); //计量单位
+                String dfhth = (String) item.get("dfhth"); //对方合同号
+                String sl = (String) item.get("sl"); //数量
+
+                Object inputfpje = item.get("fpje"); //发票金额
+                BigDecimal fpje = null;
+                if (inputfpje instanceof Integer) {
+                    Integer castfpje = (Integer) inputfpje;
+                    fpje = BigDecimal.valueOf(castfpje);
+                } else if (inputfpje instanceof BigDecimal) {
+                    fpje = (BigDecimal) inputfpje;
+                }
+
+                String gys = (String) item.get("gys"); //供应商
+
+                Object inputpzje = item.get("pzje"); //凭证金额
+                BigDecimal pzje = null;
+                if (inputpzje instanceof Integer) {
+                    Integer castpzje = (Integer) inputpzje;
+                    pzje = BigDecimal.valueOf(castpzje);
+                } else if (inputpzje instanceof BigDecimal) {
+                    pzje = (BigDecimal) inputpzje;
+                }
+
+                Object inputbxdje = item.get("bxd_je"); //报销单金额
+                BigDecimal bxdje = null;
+                if (inputbxdje instanceof Integer) {
+                    Integer castbxdje = (Integer) inputbxdje;
+                    bxdje = BigDecimal.valueOf(castbxdje);
+                } else if (inputbxdje instanceof BigDecimal) {
+                    bxdje = (BigDecimal) inputbxdje;
+                }
+
+
+                Object inputhtje = item.get("ht_je"); //合同金额
+                BigDecimal htje = null;
+                if (inputhtje instanceof Integer) {
+                    Integer casthtje = (Integer) inputhtje;
+                    htje = BigDecimal.valueOf(casthtje);
+                } else if (inputhtje instanceof BigDecimal) {
+                    htje = (BigDecimal) inputhtje;
+                }
+
+
+                String totalje = (String) item.get("total_je"); //入库单金额
+                String billno = (String) item.get("billno"); //入库单号
+                String hth = (String) item.get("hth"); //合同号
+                String tyear = (String) item.get("t_year"); //合同年份
+                String fph = (String) item.get("fph"); //发票号
+                String bxdbh = (String) item.get("bxd_bh"); //报销单号
+                String pzrq = (String) item.get("pzrq"); //凭证日期
+                String fylb = (String) item.get("fylb"); //费用类别
+                String pzbh = (String) item.get("pzbh"); //凭证编号
+                String yhhdbh = (String) item.get("yhhd_bh"); //银行流水号
+                Integer fjht = (Integer) item.get("fj_ht"); //合同附件
+                Integer fjpz = (Integer) item.get("fj_pz"); //凭证附件
+                Integer fjbxd = (Integer) item.get("fj_bxd"); //报销单附件
+                Integer fjyhhd = (Integer) item.get("fj_yhhd"); //回单附件
+                Integer fjrkd = (Integer) item.get("fj_rkd"); //入库单附件
+                String fjfp = (String) item.get("fj_fp"); //发票附件
+
+                Object intputdj = item.get("dj"); //单价
+                BigDecimal dj;
+                if (intputdj instanceof Integer) {
+                    Integer castdj = (Integer) intputdj;
+                    dj = BigDecimal.valueOf(castdj);
+                } else {
+                    dj = (BigDecimal) intputdj;
+                }
+
+
+                String wzpch = (String) item.get("wz_pch"); //批次号
+                String wzgyspch = (String) item.get("wz_gys_pch"); //供应商批次号
+
+                KzksCostModelClPrice price = new KzksCostModelClPrice();
+                price.setId(null);
+                if (ObjectUtils.isNotEmpty(uniqueId)) price.setUniqueId(uniqueId);
+                if (ObjectUtils.isNotEmpty(wlbh)) price.setWlbm(wlbh);
+                if (ObjectUtils.isNotEmpty(pzCode)) price.setPzCode(pzCode);
+                if (ObjectUtils.isNotEmpty(wlmc)) price.setWlmc(wlmc);
+                if (ObjectUtils.isNotEmpty(ggpp)) price.setGgxh(ggpp);
+                if (ObjectUtils.isNotEmpty(qualitygrade)) price.setZlLevel(qualitygrade);
+                if (ObjectUtils.isNotEmpty(htdate)) price.setHtDate(htdate);
+                if (ObjectUtils.isNotEmpty(htye)) price.setHtye(htye);
+                if (ObjectUtils.isNotEmpty(fpDate)) price.setFpDate(fpDate);
+                if (ObjectUtils.isNotEmpty(jldw)) price.setJldw(jldw);
+                if (ObjectUtils.isNotEmpty(dfhth)) price.setDfhth(dfhth);
+                if (ObjectUtils.isNotEmpty(sl)) price.setSl(sl);
+                if (ObjectUtils.isNotEmpty(fpje)) price.setFpje(fpje);
+                if (ObjectUtils.isNotEmpty(gys)) price.setGys(gys);
+                if (ObjectUtils.isNotEmpty(pzje)) price.setPzje(pzje);
+                if (ObjectUtils.isNotEmpty(bxdje)) price.setBxdJe(bxdje);
+                if (ObjectUtils.isNotEmpty(htje)) price.setHtJe(htje);
+                if (ObjectUtils.isNotEmpty(totalje)) price.setTotalJe(totalje);
+                if (ObjectUtils.isNotEmpty(billno)) price.setBillno(billno);
+                if (ObjectUtils.isNotEmpty(hth)) price.setHth(hth);
+                if (ObjectUtils.isNotEmpty(tyear)) price.settYear(tyear);
+                if (ObjectUtils.isNotEmpty(fph)) price.setFph(fph);
+                if (ObjectUtils.isNotEmpty(bxdbh)) price.setBxdBh(bxdbh);
+                if (ObjectUtils.isNotEmpty(pzrq)) price.setPzrq(pzrq);
+                if (ObjectUtils.isNotEmpty(fylb)) price.setFylb(fylb);
+                if (ObjectUtils.isNotEmpty(pzbh)) price.setPzbh(pzbh);
+                if (ObjectUtils.isNotEmpty(yhhdbh)) price.setYhhdBh(yhhdbh);
+                if (ObjectUtils.isNotEmpty(fjht)) price.setFjHt(fjht);
+                if (ObjectUtils.isNotEmpty(fjpz)) price.setFjPz(fjpz);
+                if (ObjectUtils.isNotEmpty(fjbxd)) price.setFjBxd(fjbxd);
+                if (ObjectUtils.isNotEmpty(fjyhhd)) price.setFjYhhd(fjyhhd);
+                if (ObjectUtils.isNotEmpty(fjrkd)) price.setFjRkd(fjrkd);
+                if (ObjectUtils.isNotEmpty(fjfp)) price.setFjFp(fjfp);
+                if (ObjectUtils.isNotEmpty(dj)) price.setDanjia(dj);
+                if (ObjectUtils.isNotEmpty(wzpch)) price.setWzGysPch(wzpch);
+                if (ObjectUtils.isNotEmpty(wzgyspch)) price.setWzGysPch(wzgyspch);
+                price.setCreateBy("system");
+                price.setCreateTime(new Date());
+
+                list.add(price);
+
+            }
+            kzksCostModelClPriceService.saveBatch(list);
+            offset += length;
+            hasMore = JSONObject.parseObject(JSONObject.toJSONString(stringObjectMap.get("hasMore")), Boolean.class);
+        }
+    }
+}

+ 10 - 13
module_kzks/src/main/java/org/jeecg/dataSync/task/UserDataSync.java

@@ -3,7 +3,6 @@ package org.jeecg.dataSync.task;
 
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.TypeReference;
-import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import org.jeecg.common.util.PasswordUtil;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.config.sign.util.HttpUtils;
@@ -13,10 +12,12 @@ import org.jeecg.modules.system.entity.SysUserRole;
 import org.jeecg.modules.system.service.ISysUserDepartService;
 import org.jeecg.modules.system.service.ISysUserRoleService;
 import org.jeecg.modules.system.service.ISysUserService;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
@@ -24,7 +25,7 @@ import java.util.List;
 import java.util.Map;
 
 @Component
-public class UserDataSync {
+public class UserDataSync implements Job {
 
     @Autowired
     private HrConfigurer hrConfigurer;
@@ -40,8 +41,8 @@ public class UserDataSync {
 
     private static final Logger logger = LoggerFactory.getLogger(UserDataSync.class);
 
-    @Scheduled(cron = "0 0 3 * * ?")
-    public void UserDataSyncTask() {
+    @Override
+    public void execute(JobExecutionContext context) throws JobExecutionException {
         //获取数据
         String dataJson = HttpUtils.httpGet(hrConfigurer.getUserUrl(), new ArrayList<>());
         List<Map<String, Object>> list = JSONObject.parseObject(dataJson, new TypeReference<List<Map<String, Object>>>() {
@@ -58,8 +59,7 @@ public class UserDataSync {
                     item.put("login", item.get("login").toString().replaceAll("\\d+", ""));
                 }
                 //查询是否存在
-                LambdaQueryChainWrapper<SysUser> lambdaQuery = sysUserService.lambdaQuery();
-                SysUser user = lambdaQuery.eq(SysUser::getUsername, item.get("login")).one();
+                SysUser user = sysUserService.selectUSerByUsername((String)item.get("login"));
                 if (user != null && user.getId() != null) {
                     //更新
                     user.setRealname(item.get("employee_name").toString()); //姓名
@@ -69,7 +69,7 @@ public class UserDataSync {
                     user.setStatus(state); //item.state = 1 or 2    在职 or 离职
                     user.setUsername(item.get("login").toString());//账号
                     user.setEmail(item.get("login").toString() + "@c513.cast.casc");//邮箱
-                    sysUserService.saveOrUpdate(user);
+                    sysUserService.updateById(user);
 
                 } else {
                     //新增
@@ -92,11 +92,8 @@ public class UserDataSync {
                     SysUserRole sysUserRole = new SysUserRole();
                     sysUserRole.setUserId(sysUser.getId());
                     sysUserRole.setRoleId("1"); //默认角色
-                    sysUserRoleService.save(sysUserRole);
-                    boolean save = sysUserService.save(sysUser);
-                    if (!save){
-                        logger.error("未保存成功的用户数据:" + item.toString());
-                    }
+                    sysUserRoleService.saveOrUpdate(sysUserRole);
+                    sysUserService.save(sysUser);
                 }
             });
         }

+ 177 - 0
module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/controller/KzksCostModelClPriceController.java

@@ -0,0 +1,177 @@
+package org.jeecg.modules.KzksCostModelClPrice.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.KzksCostModelClPrice.entity.KzksCostModelClPrice;
+import org.jeecg.modules.KzksCostModelClPrice.service.IKzksCostModelClPriceService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: kzks_cost_model_cl_price
+ * @Author: jeecg-boot
+ * @Date:   2023-09-18
+ * @Version: V1.0
+ */
+@Api(tags="kzks_cost_model_cl_price")
+@RestController
+@RequestMapping("/KzksCostModelClPrice/kzksCostModelClPrice")
+@Slf4j
+public class KzksCostModelClPriceController extends JeecgController<KzksCostModelClPrice, IKzksCostModelClPriceService> {
+	@Autowired
+	private IKzksCostModelClPriceService kzksCostModelClPriceService;
+
+	/**
+	 * 分页列表查询
+	 *
+	 * @param kzksCostModelClPrice
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "kzks_cost_model_cl_price-分页列表查询")
+	@ApiOperation(value="kzks_cost_model_cl_price-分页列表查询", notes="kzks_cost_model_cl_price-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<KzksCostModelClPrice>> queryPageList(KzksCostModelClPrice kzksCostModelClPrice,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<KzksCostModelClPrice> queryWrapper = QueryGenerator.initQueryWrapper(kzksCostModelClPrice, req.getParameterMap());
+		Page<KzksCostModelClPrice> page = new Page<KzksCostModelClPrice>(pageNo, pageSize);
+		IPage<KzksCostModelClPrice> pageList = kzksCostModelClPriceService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	/**
+	 *   添加
+	 *
+	 * @param kzksCostModelClPrice
+	 * @return
+	 */
+	@AutoLog(value = "kzks_cost_model_cl_price-添加")
+	@ApiOperation(value="kzks_cost_model_cl_price-添加", notes="kzks_cost_model_cl_price-添加")
+	//@RequiresPermissions("org.jeecg.modules:kzks_cost_model_cl_price:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody KzksCostModelClPrice kzksCostModelClPrice) {
+		kzksCostModelClPriceService.save(kzksCostModelClPrice);
+		return Result.OK("添加成功!");
+	}
+
+	/**
+	 *  编辑
+	 *
+	 * @param kzksCostModelClPrice
+	 * @return
+	 */
+	@AutoLog(value = "kzks_cost_model_cl_price-编辑")
+	@ApiOperation(value="kzks_cost_model_cl_price-编辑", notes="kzks_cost_model_cl_price-编辑")
+	//@RequiresPermissions("org.jeecg.modules:kzks_cost_model_cl_price:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody KzksCostModelClPrice kzksCostModelClPrice) {
+		kzksCostModelClPriceService.updateById(kzksCostModelClPrice);
+		return Result.OK("编辑成功!");
+	}
+
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "kzks_cost_model_cl_price-通过id删除")
+	@ApiOperation(value="kzks_cost_model_cl_price-通过id删除", notes="kzks_cost_model_cl_price-通过id删除")
+	//@RequiresPermissions("org.jeecg.modules:kzks_cost_model_cl_price:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		kzksCostModelClPriceService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "kzks_cost_model_cl_price-批量删除")
+	@ApiOperation(value="kzks_cost_model_cl_price-批量删除", notes="kzks_cost_model_cl_price-批量删除")
+	//@RequiresPermissions("org.jeecg.modules:kzks_cost_model_cl_price:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.kzksCostModelClPriceService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "kzks_cost_model_cl_price-通过id查询")
+	@ApiOperation(value="kzks_cost_model_cl_price-通过id查询", notes="kzks_cost_model_cl_price-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<KzksCostModelClPrice> queryById(@RequestParam(name="id",required=true) String id) {
+		KzksCostModelClPrice kzksCostModelClPrice = kzksCostModelClPriceService.getById(id);
+		if(kzksCostModelClPrice==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(kzksCostModelClPrice);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param kzksCostModelClPrice
+    */
+    //@RequiresPermissions("org.jeecg.modules:kzks_cost_model_cl_price:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, KzksCostModelClPrice kzksCostModelClPrice) {
+        return super.exportXls(request, kzksCostModelClPrice, KzksCostModelClPrice.class, "kzks_cost_model_cl_price");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("kzks_cost_model_cl_price:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, KzksCostModelClPrice.class);
+    }
+
+}

+ 556 - 0
module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/entity/KzksCostModelClPrice.java

@@ -0,0 +1,556 @@
+package org.jeecg.modules.KzksCostModelClPrice.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: kzks_cost_model_cl_price
+ * @Author: jeecg-boot
+ * @Date:   2023-09-18
+ * @Version: V1.0
+ */
+@Data
+@TableName("kzks_cost_model_cl_price")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="kzks_cost_model_cl_price对象", description="kzks_cost_model_cl_price")
+public class KzksCostModelClPrice implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**id*/
+	@TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private java.lang.Integer id;
+	/**物料编码*/
+	@Excel(name = "物料编码", width = 15)
+    @ApiModelProperty(value = "物料编码")
+    private java.lang.String wlbm;
+	/**规格型号*/
+	@Excel(name = "规格型号", width = 15)
+    @ApiModelProperty(value = "规格型号")
+    private java.lang.String ggxh;
+	/**质量等级*/
+	@Excel(name = "质量等级", width = 15)
+    @ApiModelProperty(value = "质量等级")
+    private java.lang.String zlLevel;
+	/**单价*/
+	@Excel(name = "单价", width = 15)
+    @ApiModelProperty(value = "单价")
+    private BigDecimal danjia;
+	/**批次号*/
+	@Excel(name = "批次号", width = 15)
+    @ApiModelProperty(value = "批次号")
+    private java.lang.String pici;
+	/**供应商批次号*/
+	@Excel(name = "供应商批次号", width = 15)
+    @ApiModelProperty(value = "供应商批次号")
+    private java.lang.String wzGysPch;
+	/**合同签署日期*/
+	@Excel(name = "合同签署日期", width = 15)
+    @ApiModelProperty(value = "合同签署日期")
+    private java.lang.String htDate;
+	/**合同余额*/
+	@Excel(name = "合同余额", width = 15)
+    @ApiModelProperty(value = "合同余额")
+    private BigDecimal htye;
+	/**发票开票时间*/
+	@Excel(name = "发票开票时间", width = 15)
+    @ApiModelProperty(value = "发票开票时间")
+    private java.lang.String fpDate;
+	/**计量单位*/
+	@Excel(name = "计量单位", width = 15)
+    @ApiModelProperty(value = "计量单位")
+    private java.lang.String jldw;
+	/**对方合同号*/
+	@Excel(name = "对方合同号", width = 15)
+    @ApiModelProperty(value = "对方合同号")
+    private java.lang.String dfhth;
+	/**数量*/
+	@Excel(name = "数量", width = 15)
+    @ApiModelProperty(value = "数量")
+    private java.lang.String sl;
+	/**发票金额*/
+	@Excel(name = "发票金额", width = 15)
+    @ApiModelProperty(value = "发票金额")
+    private BigDecimal fpje;
+	/**供应商*/
+	@Excel(name = "供应商", width = 15)
+    @ApiModelProperty(value = "供应商")
+    private java.lang.String gys;
+	/**凭证金额*/
+	@Excel(name = "凭证金额", width = 15)
+    @ApiModelProperty(value = "凭证金额")
+    private java.math.BigDecimal pzje;
+	/**报销单金额*/
+	@Excel(name = "报销单金额", width = 15)
+    @ApiModelProperty(value = "报销单金额")
+    private BigDecimal bxdJe;
+	/**合同金额*/
+	@Excel(name = "合同金额", width = 15)
+    @ApiModelProperty(value = "合同金额")
+    private BigDecimal htJe;
+	/**入库单金额*/
+	@Excel(name = "入库单金额", width = 15)
+    @ApiModelProperty(value = "入库单金额")
+    private java.lang.String totalJe;
+	/**入库单号*/
+	@Excel(name = "入库单号", width = 15)
+    @ApiModelProperty(value = "入库单号")
+    private java.lang.String billno;
+	/**合同号*/
+	@Excel(name = "合同号", width = 15)
+    @ApiModelProperty(value = "合同号")
+    private java.lang.String hth;
+	/**合同年份*/
+	@Excel(name = "合同年份", width = 15)
+    @ApiModelProperty(value = "合同年份")
+    private java.lang.String tYear;
+	/**发票号*/
+	@Excel(name = "发票号", width = 15)
+    @ApiModelProperty(value = "发票号")
+    private java.lang.String fph;
+	/**报销单号*/
+	@Excel(name = "报销单号", width = 15)
+    @ApiModelProperty(value = "报销单号")
+    private java.lang.String bxdBh;
+	/**凭证日期*/
+	@Excel(name = "凭证日期", width = 15)
+    @ApiModelProperty(value = "凭证日期")
+    private java.lang.String pzrq;
+	/**费用类别*/
+	@Excel(name = "费用类别", width = 15)
+    @ApiModelProperty(value = "费用类别")
+    private java.lang.String fylb;
+	/**凭证编号*/
+	@Excel(name = "凭证编号", width = 15)
+    @ApiModelProperty(value = "凭证编号")
+    private java.lang.String pzbh;
+	/**银行流水号*/
+	@Excel(name = "银行流水号", width = 15)
+    @ApiModelProperty(value = "银行流水号")
+    private java.lang.String yhhdBh;
+	/**合同附件*/
+	@Excel(name = "合同附件", width = 15)
+    @ApiModelProperty(value = "合同附件")
+    private java.lang.Integer fjHt;
+	/**凭证附件*/
+	@Excel(name = "凭证附件", width = 15)
+    @ApiModelProperty(value = "凭证附件")
+    private java.lang.Integer fjPz;
+	/**报销单附件*/
+	@Excel(name = "报销单附件", width = 15)
+    @ApiModelProperty(value = "报销单附件")
+    private java.lang.Integer fjBxd;
+	/**回单附件*/
+	@Excel(name = "回单附件", width = 15)
+    @ApiModelProperty(value = "回单附件")
+    private java.lang.Integer fjYhhd;
+	/**入库单附件*/
+	@Excel(name = "入库单附件", width = 15)
+    @ApiModelProperty(value = "入库单附件")
+    private java.lang.Integer fjRkd;
+	/**发票附件*/
+	@Excel(name = "发票附件", width = 15)
+    @ApiModelProperty(value = "发票附件")
+    private java.lang.String fjFp;
+	/**物料名称*/
+	@Excel(name = "物料名称", width = 15)
+    @ApiModelProperty(value = "物料名称")
+    private java.lang.String wlmc;
+	/**凭证唯一码*/
+	@Excel(name = "凭证唯一码", width = 15)
+    @ApiModelProperty(value = "凭证唯一码")
+    private java.lang.String pzCode;
+	/**物料唯一码*/
+	@Excel(name = "物料唯一码", width = 15)
+    @ApiModelProperty(value = "物料唯一码")
+    private java.lang.String uniqueId;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private java.lang.String createBy;
+	/**创建日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建日期")
+    private java.util.Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private java.lang.String updateBy;
+	/**更新日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "更新日期")
+    private java.util.Date updateTime;
+	/**所属部门*/
+    @ApiModelProperty(value = "所属部门")
+    private java.lang.String sysOrgCode;
+	/**采购日期*/
+	@Excel(name = "采购日期", width = 15)
+    @ApiModelProperty(value = "采购日期")
+    private java.lang.String caigouTime;
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getWlbm() {
+        return wlbm;
+    }
+
+    public void setWlbm(String wlbm) {
+        this.wlbm = wlbm;
+    }
+
+    public String getGgxh() {
+        return ggxh;
+    }
+
+    public void setGgxh(String ggxh) {
+        this.ggxh = ggxh;
+    }
+
+    public String getZlLevel() {
+        return zlLevel;
+    }
+
+    public void setZlLevel(String zlLevel) {
+        this.zlLevel = zlLevel;
+    }
+
+    public BigDecimal getDanjia() {
+        return danjia;
+    }
+
+    public void setDanjia(BigDecimal danjia) {
+        this.danjia = danjia;
+    }
+
+    public String getPici() {
+        return pici;
+    }
+
+    public void setPici(String pici) {
+        this.pici = pici;
+    }
+
+    public String getWzGysPch() {
+        return wzGysPch;
+    }
+
+    public void setWzGysPch(String wzGysPch) {
+        this.wzGysPch = wzGysPch;
+    }
+
+    public String getHtDate() {
+        return htDate;
+    }
+
+    public void setHtDate(String htDate) {
+        this.htDate = htDate;
+    }
+
+
+    public String getFpDate() {
+        return fpDate;
+    }
+
+    public void setFpDate(String fpDate) {
+        this.fpDate = fpDate;
+    }
+
+    public String getJldw() {
+        return jldw;
+    }
+
+    public void setJldw(String jldw) {
+        this.jldw = jldw;
+    }
+
+    public String getDfhth() {
+        return dfhth;
+    }
+
+    public void setDfhth(String dfhth) {
+        this.dfhth = dfhth;
+    }
+
+    public String getSl() {
+        return sl;
+    }
+
+    public void setSl(String sl) {
+        this.sl = sl;
+    }
+
+
+    public String getGys() {
+        return gys;
+    }
+
+    public void setGys(String gys) {
+        this.gys = gys;
+    }
+
+    public BigDecimal getPzje() {
+        return pzje;
+    }
+
+    public void setPzje(BigDecimal pzje) {
+        this.pzje = pzje;
+    }
+
+    public BigDecimal getBxdJe() {
+        return bxdJe;
+    }
+
+    public void setBxdJe(BigDecimal bxdJe) {
+        this.bxdJe = bxdJe;
+    }
+
+    public String getTotalJe() {
+        return totalJe;
+    }
+
+    public void setTotalJe(String totalJe) {
+        this.totalJe = totalJe;
+    }
+
+    public String getBillno() {
+        return billno;
+    }
+
+    public void setBillno(String billno) {
+        this.billno = billno;
+    }
+
+    public String getHth() {
+        return hth;
+    }
+
+    public void setHth(String hth) {
+        this.hth = hth;
+    }
+
+    public String gettYear() {
+        return tYear;
+    }
+
+    public void settYear(String tYear) {
+        this.tYear = tYear;
+    }
+
+    public String getFph() {
+        return fph;
+    }
+
+    public void setFph(String fph) {
+        this.fph = fph;
+    }
+
+    public String getBxdBh() {
+        return bxdBh;
+    }
+
+    public void setBxdBh(String bxdBh) {
+        this.bxdBh = bxdBh;
+    }
+
+    public String getPzrq() {
+        return pzrq;
+    }
+
+    public void setPzrq(String pzrq) {
+        this.pzrq = pzrq;
+    }
+
+    public String getFylb() {
+        return fylb;
+    }
+
+    public void setFylb(String fylb) {
+        this.fylb = fylb;
+    }
+
+    public String getPzbh() {
+        return pzbh;
+    }
+
+    public void setPzbh(String pzbh) {
+        this.pzbh = pzbh;
+    }
+
+    public String getYhhdBh() {
+        return yhhdBh;
+    }
+
+    public void setYhhdBh(String yhhdBh) {
+        this.yhhdBh = yhhdBh;
+    }
+
+    public Integer getFjHt() {
+        return fjHt;
+    }
+
+    public void setFjHt(Integer fjHt) {
+        this.fjHt = fjHt;
+    }
+
+    public Integer getFjPz() {
+        return fjPz;
+    }
+
+    public void setFjPz(Integer fjPz) {
+        this.fjPz = fjPz;
+    }
+
+    public Integer getFjBxd() {
+        return fjBxd;
+    }
+
+    public void setFjBxd(Integer fjBxd) {
+        this.fjBxd = fjBxd;
+    }
+
+    public Integer getFjYhhd() {
+        return fjYhhd;
+    }
+
+    public void setFjYhhd(Integer fjYhhd) {
+        this.fjYhhd = fjYhhd;
+    }
+
+    public Integer getFjRkd() {
+        return fjRkd;
+    }
+
+    public void setFjRkd(Integer fjRkd) {
+        this.fjRkd = fjRkd;
+    }
+
+    public String getFjFp() {
+        return fjFp;
+    }
+
+    public void setFjFp(String fjFp) {
+        this.fjFp = fjFp;
+    }
+
+    public String getWlmc() {
+        return wlmc;
+    }
+
+    public void setWlmc(String wlmc) {
+        this.wlmc = wlmc;
+    }
+
+    public String getPzCode() {
+        return pzCode;
+    }
+
+    public void setPzCode(String pzCode) {
+        this.pzCode = pzCode;
+    }
+
+    public String getUniqueId() {
+        return uniqueId;
+    }
+
+    public void setUniqueId(String uniqueId) {
+        this.uniqueId = uniqueId;
+    }
+
+    public String getCreateBy() {
+        return createBy;
+    }
+
+    public void setCreateBy(String createBy) {
+        this.createBy = createBy;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getUpdateBy() {
+        return updateBy;
+    }
+
+    public void setUpdateBy(String updateBy) {
+        this.updateBy = updateBy;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    public String getSysOrgCode() {
+        return sysOrgCode;
+    }
+
+    public void setSysOrgCode(String sysOrgCode) {
+        this.sysOrgCode = sysOrgCode;
+    }
+
+    public String getCaigouTime() {
+        return caigouTime;
+    }
+
+    public BigDecimal getHtye() {
+        return htye;
+    }
+
+    public void setHtye(BigDecimal htye) {
+        this.htye = htye;
+    }
+
+    public BigDecimal getFpje() {
+        return fpje;
+    }
+
+    public void setFpje(BigDecimal fpje) {
+        this.fpje = fpje;
+    }
+
+    public BigDecimal getHtJe() {
+        return htJe;
+    }
+
+    public void setHtJe(BigDecimal htJe) {
+        this.htJe = htJe;
+    }
+
+    public void setCaigouTime(String caigouTime) {
+        this.caigouTime = caigouTime;
+    }
+}

+ 23 - 0
module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/mapper/KzksCostModelClPriceMapper.java

@@ -0,0 +1,23 @@
+package org.jeecg.modules.KzksCostModelClPrice.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
+import org.jeecg.modules.KzksCostModelClPrice.entity.KzksCostModelClPrice;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: kzks_cost_model_cl_price
+ * @Author: jeecg-boot
+ * @Date:   2023-09-18
+ * @Version: V1.0
+ *
+ */
+@Mapper
+public interface KzksCostModelClPriceMapper extends BaseMapper<KzksCostModelClPrice> {
+
+    @Update("truncate table kzks_cost_model_cl_price;")
+     void truncateTable();
+}

+ 5 - 0
module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/mapper/xml/KzksCostModelClPriceMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.KzksCostModelClPrice.mapper.KzksCostModelClPriceMapper">
+
+</mapper>

+ 16 - 0
module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/service/IKzksCostModelClPriceService.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.KzksCostModelClPrice.service;
+
+import org.jeecg.modules.KzksCostModelClPrice.entity.KzksCostModelClPrice;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: kzks_cost_model_cl_price
+ * @Author: jeecg-boot
+ * @Date:   2023-09-18
+ * @Version: V1.0
+ */
+public interface IKzksCostModelClPriceService extends IService<KzksCostModelClPrice> {
+
+    void truncateTable();
+
+}

+ 27 - 0
module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/service/impl/KzksCostModelClPriceServiceImpl.java

@@ -0,0 +1,27 @@
+package org.jeecg.modules.KzksCostModelClPrice.service.impl;
+
+import org.jeecg.modules.KzksCostModelClPrice.entity.KzksCostModelClPrice;
+import org.jeecg.modules.KzksCostModelClPrice.mapper.KzksCostModelClPriceMapper;
+import org.jeecg.modules.KzksCostModelClPrice.service.IKzksCostModelClPriceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: kzks_cost_model_cl_price
+ * @Author: jeecg-boot
+ * @Date:   2023-09-18
+ * @Version: V1.0
+ */
+@Service
+public class KzksCostModelClPriceServiceImpl extends ServiceImpl<KzksCostModelClPriceMapper, KzksCostModelClPrice> implements IKzksCostModelClPriceService {
+
+    @Autowired
+    private KzksCostModelClPriceMapper kzksCostModelClPriceMapper;
+
+    @Override
+    public void truncateTable() {
+        kzksCostModelClPriceMapper.truncateTable();
+    }
+}

+ 387 - 0
module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/vue/KzksCostModelClPriceList.vue

@@ -0,0 +1,387 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 查询区域-END -->
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('kzks_cost_model_cl_price')">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <!-- 高级查询区域 -->
+      <j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <a-table
+        ref="table"
+        size="middle"
+        :scroll="{x:true}"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+        class="j-table-force-nowrap"
+        @change="handleTableChange">
+
+        <template slot="htmlSlot" slot-scope="text">
+          <div v-html="text"></div>
+        </template>
+        <template slot="imgSlot" slot-scope="text,record">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
+          <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
+        </template>
+        <template slot="fileSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
+          <a-button
+            v-else
+            :ghost="true"
+            type="primary"
+            icon="download"
+            size="small"
+            @click="downloadFile(text)">
+            下载
+          </a-button>
+        </template>
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a @click="handleDetail(record)">详情</a>
+              </a-menu-item>
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+
+    <kzks-cost-model-cl-price-modal ref="modalForm" @ok="modalFormOk"></kzks-cost-model-cl-price-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import KzksCostModelClPriceModal from './modules/KzksCostModelClPriceModal'
+
+  export default {
+    name: 'KzksCostModelClPriceList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      KzksCostModelClPriceModal
+    },
+    data () {
+      return {
+        description: 'kzks_cost_model_cl_price管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'物料编码',
+            align:"center",
+            dataIndex: 'wlbm'
+          },
+          {
+            title:'规格型号',
+            align:"center",
+            dataIndex: 'ggxh'
+          },
+          {
+            title:'质量等级',
+            align:"center",
+            dataIndex: 'zlLevel'
+          },
+          {
+            title:'单价',
+            align:"center",
+            dataIndex: 'danjia'
+          },
+          {
+            title:'批次号',
+            align:"center",
+            dataIndex: 'pici'
+          },
+          {
+            title:'供应商批次号',
+            align:"center",
+            dataIndex: 'wzGysPch'
+          },
+          {
+            title:'合同签署日期',
+            align:"center",
+            dataIndex: 'htDate'
+          },
+          {
+            title:'合同余额',
+            align:"center",
+            dataIndex: 'htye'
+          },
+          {
+            title:'发票开票时间',
+            align:"center",
+            dataIndex: 'fpDate'
+          },
+          {
+            title:'计量单位',
+            align:"center",
+            dataIndex: 'jldw'
+          },
+          {
+            title:'对方合同号',
+            align:"center",
+            dataIndex: 'dfhth'
+          },
+          {
+            title:'数量',
+            align:"center",
+            dataIndex: 'sl'
+          },
+          {
+            title:'发票金额',
+            align:"center",
+            dataIndex: 'fpje'
+          },
+          {
+            title:'供应商',
+            align:"center",
+            dataIndex: 'gys'
+          },
+          {
+            title:'凭证金额',
+            align:"center",
+            dataIndex: 'pzje'
+          },
+          {
+            title:'报销单金额',
+            align:"center",
+            dataIndex: 'bxdJe'
+          },
+          {
+            title:'合同金额',
+            align:"center",
+            dataIndex: 'htJe'
+          },
+          {
+            title:'入库单金额',
+            align:"center",
+            dataIndex: 'totalJe'
+          },
+          {
+            title:'入库单号',
+            align:"center",
+            dataIndex: 'billno'
+          },
+          {
+            title:'合同号',
+            align:"center",
+            dataIndex: 'hth'
+          },
+          {
+            title:'合同年份',
+            align:"center",
+            dataIndex: 'tYear'
+          },
+          {
+            title:'发票号',
+            align:"center",
+            dataIndex: 'fph'
+          },
+          {
+            title:'报销单号',
+            align:"center",
+            dataIndex: 'bxdBh'
+          },
+          {
+            title:'凭证日期',
+            align:"center",
+            dataIndex: 'pzrq'
+          },
+          {
+            title:'费用类别',
+            align:"center",
+            dataIndex: 'fylb'
+          },
+          {
+            title:'凭证编号',
+            align:"center",
+            dataIndex: 'pzbh'
+          },
+          {
+            title:'银行流水号',
+            align:"center",
+            dataIndex: 'yhhdBh'
+          },
+          {
+            title:'合同附件',
+            align:"center",
+            dataIndex: 'fjHt'
+          },
+          {
+            title:'凭证附件',
+            align:"center",
+            dataIndex: 'fjPz'
+          },
+          {
+            title:'报销单附件',
+            align:"center",
+            dataIndex: 'fjBxd'
+          },
+          {
+            title:'回单附件',
+            align:"center",
+            dataIndex: 'fjYhhd'
+          },
+          {
+            title:'入库单附件',
+            align:"center",
+            dataIndex: 'fjRkd'
+          },
+          {
+            title:'发票附件',
+            align:"center",
+            dataIndex: 'fjFp'
+          },
+          {
+            title:'物料名称',
+            align:"center",
+            dataIndex: 'wlmc'
+          },
+          {
+            title:'凭证唯一码',
+            align:"center",
+            dataIndex: 'pzCode'
+          },
+          {
+            title:'物料唯一码',
+            align:"center",
+            dataIndex: 'uniqueId'
+          },
+          {
+            title:'采购日期',
+            align:"center",
+            dataIndex: 'caigouTime'
+          },
+          {
+            title: '操作',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' }
+          }
+        ],
+        url: {
+          list: "/KzksCostModelClPrice/kzksCostModelClPrice/list",
+          delete: "/KzksCostModelClPrice/kzksCostModelClPrice/delete",
+          deleteBatch: "/KzksCostModelClPrice/kzksCostModelClPrice/deleteBatch",
+          exportXlsUrl: "/KzksCostModelClPrice/kzksCostModelClPrice/exportXls",
+          importExcelUrl: "KzksCostModelClPrice/kzksCostModelClPrice/importExcel",
+
+        },
+        dictOptions:{},
+        superFieldList:[],
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'string',value:'wlbm',text:'物料编码'})
+        fieldList.push({type:'string',value:'ggxh',text:'规格型号'})
+        fieldList.push({type:'string',value:'zlLevel',text:'质量等级'})
+        fieldList.push({type:'number',value:'danjia',text:'单价'})
+        fieldList.push({type:'string',value:'pici',text:'批次号'})
+        fieldList.push({type:'string',value:'wzGysPch',text:'供应商批次号'})
+        fieldList.push({type:'string',value:'htDate',text:'合同签署日期'})
+        fieldList.push({type:'int',value:'htye',text:'合同余额'})
+        fieldList.push({type:'string',value:'fpDate',text:'发票开票时间'})
+        fieldList.push({type:'string',value:'jldw',text:'计量单位'})
+        fieldList.push({type:'string',value:'dfhth',text:'对方合同号'})
+        fieldList.push({type:'string',value:'sl',text:'数量'})
+        fieldList.push({type:'int',value:'fpje',text:'发票金额'})
+        fieldList.push({type:'string',value:'gys',text:'供应商'})
+        fieldList.push({type:'number',value:'pzje',text:'凭证金额'})
+        fieldList.push({type:'string',value:'bxdJe',text:'报销单金额'})
+        fieldList.push({type:'int',value:'htJe',text:'合同金额'})
+        fieldList.push({type:'string',value:'totalJe',text:'入库单金额'})
+        fieldList.push({type:'string',value:'billno',text:'入库单号'})
+        fieldList.push({type:'string',value:'hth',text:'合同号'})
+        fieldList.push({type:'string',value:'tYear',text:'合同年份'})
+        fieldList.push({type:'string',value:'fph',text:'发票号'})
+        fieldList.push({type:'string',value:'bxdBh',text:'报销单号'})
+        fieldList.push({type:'string',value:'pzrq',text:'凭证日期'})
+        fieldList.push({type:'string',value:'fylb',text:'费用类别'})
+        fieldList.push({type:'string',value:'pzbh',text:'凭证编号'})
+        fieldList.push({type:'string',value:'yhhdBh',text:'银行流水号'})
+        fieldList.push({type:'int',value:'fjHt',text:'合同附件'})
+        fieldList.push({type:'int',value:'fjPz',text:'凭证附件'})
+        fieldList.push({type:'int',value:'fjBxd',text:'报销单附件'})
+        fieldList.push({type:'int',value:'fjYhhd',text:'回单附件'})
+        fieldList.push({type:'int',value:'fjRkd',text:'入库单附件'})
+        fieldList.push({type:'string',value:'fjFp',text:'发票附件'})
+        fieldList.push({type:'string',value:'wlmc',text:'物料名称'})
+        fieldList.push({type:'string',value:'pzCode',text:'凭证唯一码'})
+        fieldList.push({type:'string',value:'uniqueId',text:'物料唯一码'})
+        fieldList.push({type:'string',value:'caigouTime',text:'采购日期'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>

+ 26 - 0
module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/vue/KzksCostModelClPrice_menu_insert.sql

@@ -0,0 +1,26 @@
+-- 注意:该页面对应的前台目录为views/KzksCostModelClPrice文件夹下
+-- 如果你想更改到其他目录,请修改sql中component字段对应的值
+
+
+INSERT INTO sys_permission(id, parent_id, name, url, component, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_route, is_leaf, keep_alive, hidden, hide_tab, description, status, del_flag, rule_flag, create_by, create_time, update_by, update_time, internal_or_external)
+VALUES ('202309180810280240', NULL, 'kzks_cost_model_cl_price', '/KzksCostModelClPrice/kzksCostModelClPriceList', 'KzksCostModelClPrice/KzksCostModelClPriceList', NULL, NULL, 0, NULL, '1', 0.00, 0, NULL, 1, 1, 0, 0, 0, NULL, '1', 0, 0, 'admin', '2023-09-18 20:10:24', NULL, NULL, 0);
+
+-- 权限控制sql
+-- 新增
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('202309180810280241', '202309180810280240', '添加kzks_cost_model_cl_price', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:kzks_cost_model_cl_price:add', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-09-18 20:10:24', NULL, NULL, 0, 0, '1', 0);
+-- 编辑
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('202309180810280242', '202309180810280240', '编辑kzks_cost_model_cl_price', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:kzks_cost_model_cl_price:edit', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-09-18 20:10:24', NULL, NULL, 0, 0, '1', 0);
+-- 删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('202309180810280243', '202309180810280240', '删除kzks_cost_model_cl_price', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:kzks_cost_model_cl_price:delete', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-09-18 20:10:24', NULL, NULL, 0, 0, '1', 0);
+-- 批量删除
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('202309180810280244', '202309180810280240', '批量删除kzks_cost_model_cl_price', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:kzks_cost_model_cl_price:deleteBatch', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-09-18 20:10:24', NULL, NULL, 0, 0, '1', 0);
+-- 导出excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('202309180810280245', '202309180810280240', '导出excel_kzks_cost_model_cl_price', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:kzks_cost_model_cl_price:exportXls', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-09-18 20:10:24', NULL, NULL, 0, 0, '1', 0);
+-- 导入excel
+INSERT INTO sys_permission(id, parent_id, name, url, component, is_route, component_name, redirect, menu_type, perms, perms_type, sort_no, always_show, icon, is_leaf, keep_alive, hidden, hide_tab, description, create_by, create_time, update_by, update_time, del_flag, rule_flag, status, internal_or_external)
+VALUES ('202309180810280246', '202309180810280240', '导入excel_kzks_cost_model_cl_price', NULL, NULL, 0, NULL, NULL, 2, 'org.jeecg.modules:kzks_cost_model_cl_price:importExcel', '1', NULL, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2023-09-18 20:10:24', NULL, NULL, 0, 0, '1', 0);

+ 284 - 0
module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/vue/modules/KzksCostModelClPriceForm.vue

@@ -0,0 +1,284 @@
+<template>
+  <a-spin :spinning="confirmLoading">
+    <j-form-container :disabled="formDisabled">
+      <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item label="物料编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="wlbm">
+              <a-input v-model="model.wlbm" placeholder="请输入物料编码"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="规格型号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="ggxh">
+              <a-input v-model="model.ggxh" placeholder="请输入规格型号"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="质量等级" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="zlLevel">
+              <a-input v-model="model.zlLevel" placeholder="请输入质量等级"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="单价" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="danjia">
+              <a-input-number v-model="model.danjia" placeholder="请输入单价" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="批次号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="pici">
+              <a-input v-model="model.pici" placeholder="请输入批次号"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="供应商批次号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="wzGysPch">
+              <a-input v-model="model.wzGysPch" placeholder="请输入供应商批次号"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="合同签署日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="htDate">
+              <a-input v-model="model.htDate" placeholder="请输入合同签署日期"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="合同余额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="htye">
+              <a-input-number v-model="model.htye" placeholder="请输入合同余额" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="发票开票时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fpDate">
+              <a-input v-model="model.fpDate" placeholder="请输入发票开票时间"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="计量单位" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="jldw">
+              <a-input v-model="model.jldw" placeholder="请输入计量单位"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="对方合同号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="dfhth">
+              <a-input v-model="model.dfhth" placeholder="请输入对方合同号"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="数量" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="sl">
+              <a-input v-model="model.sl" placeholder="请输入数量"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="发票金额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fpje">
+              <a-input-number v-model="model.fpje" placeholder="请输入发票金额" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="供应商" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="gys">
+              <a-input v-model="model.gys" placeholder="请输入供应商"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="凭证金额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="pzje">
+              <a-input-number v-model="model.pzje" placeholder="请输入凭证金额" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="报销单金额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="bxdJe">
+              <a-input v-model="model.bxdJe" placeholder="请输入报销单金额"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="合同金额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="htJe">
+              <a-input-number v-model="model.htJe" placeholder="请输入合同金额" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="入库单金额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="totalJe">
+              <a-input v-model="model.totalJe" placeholder="请输入入库单金额"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="入库单号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="billno">
+              <a-input v-model="model.billno" placeholder="请输入入库单号"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="合同号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="hth">
+              <a-input v-model="model.hth" placeholder="请输入合同号"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="合同年份" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="tYear">
+              <a-input v-model="model.tYear" placeholder="请输入合同年份"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="发票号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fph">
+              <a-input v-model="model.fph" placeholder="请输入发票号"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="报销单号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="bxdBh">
+              <a-input v-model="model.bxdBh" placeholder="请输入报销单号"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="凭证日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="pzrq">
+              <a-input v-model="model.pzrq" placeholder="请输入凭证日期"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="费用类别" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fylb">
+              <a-input v-model="model.fylb" placeholder="请输入费用类别"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="凭证编号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="pzbh">
+              <a-input v-model="model.pzbh" placeholder="请输入凭证编号"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="银行流水号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="yhhdBh">
+              <a-input v-model="model.yhhdBh" placeholder="请输入银行流水号"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="合同附件" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fjHt">
+              <a-input-number v-model="model.fjHt" placeholder="请输入合同附件" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="凭证附件" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fjPz">
+              <a-input-number v-model="model.fjPz" placeholder="请输入凭证附件" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="报销单附件" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fjBxd">
+              <a-input-number v-model="model.fjBxd" placeholder="请输入报销单附件" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="回单附件" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fjYhhd">
+              <a-input-number v-model="model.fjYhhd" placeholder="请输入回单附件" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="入库单附件" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fjRkd">
+              <a-input-number v-model="model.fjRkd" placeholder="请输入入库单附件" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="发票附件" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fjFp">
+              <a-input v-model="model.fjFp" placeholder="请输入发票附件"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="物料名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="wlmc">
+              <a-input v-model="model.wlmc" placeholder="请输入物料名称"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="凭证唯一码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="pzCode">
+              <a-input v-model="model.pzCode" placeholder="请输入凭证唯一码"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="物料唯一码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="uniqueId">
+              <a-input v-model="model.uniqueId" placeholder="请输入物料唯一码"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="采购日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="caigouTime">
+              <a-input v-model="model.caigouTime" placeholder="请输入采购日期"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </j-form-container>
+  </a-spin>
+</template>
+
+<script>
+
+  import { httpAction, getAction } from '@/api/manage'
+  import { validateDuplicateValue } from '@/utils/util'
+
+  export default {
+    name: 'KzksCostModelClPriceForm',
+    components: {
+    },
+    props: {
+      //表单禁用
+      disabled: {
+        type: Boolean,
+        default: false,
+        required: false
+      }
+    },
+    data () {
+      return {
+        model:{
+         },
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+        confirmLoading: false,
+        validatorRules: {
+        },
+        url: {
+          add: "/KzksCostModelClPrice/kzksCostModelClPrice/add",
+          edit: "/KzksCostModelClPrice/kzksCostModelClPrice/edit",
+          queryById: "/KzksCostModelClPrice/kzksCostModelClPrice/queryById"
+        }
+      }
+    },
+    computed: {
+      formDisabled(){
+        return this.disabled
+      },
+    },
+    created () {
+       //备份model原始值
+      this.modelDefault = JSON.parse(JSON.stringify(this.model));
+    },
+    methods: {
+      add () {
+        this.edit(this.modelDefault);
+      },
+      edit (record) {
+        this.model = Object.assign({}, record);
+        this.visible = true;
+      },
+      submitForm () {
+        const that = this;
+        // 触发表单验证
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }else{
+              httpurl+=this.url.edit;
+               method = 'put';
+            }
+            httpAction(httpurl,this.model,method).then((res)=>{
+              if(res.success){
+                that.$message.success(res.message);
+                that.$emit('ok');
+              }else{
+                that.$message.warning(res.message);
+              }
+            }).finally(() => {
+              that.confirmLoading = false;
+            })
+          }
+
+        })
+      },
+    }
+  }
+</script>

+ 84 - 0
module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/vue/modules/KzksCostModelClPriceModal.Style#Drawer.vue

@@ -0,0 +1,84 @@
+<template>
+  <a-drawer
+    :title="title"
+    :width="width"
+    placement="right"
+    :closable="false"
+    @close="close"
+    destroyOnClose
+    :visible="visible">
+    <kzks-cost-model-cl-price-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></kzks-cost-model-cl-price-form>
+    <div class="drawer-footer">
+      <a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
+      <a-button v-if="!disableSubmit"  @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
+    </div>
+  </a-drawer>
+</template>
+
+<script>
+
+  import KzksCostModelClPriceForm from './KzksCostModelClPriceForm'
+
+  export default {
+    name: 'KzksCostModelClPriceModal',
+    components: {
+      KzksCostModelClPriceForm
+    },
+    data () {
+      return {
+        title:"操作",
+        width:800,
+        visible: false,
+        disableSubmit: false
+      }
+    },
+    methods: {
+      add () {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.add();
+        })
+      },
+      edit (record) {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.edit(record);
+        });
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      submitCallback(){
+        this.$emit('ok');
+        this.visible = false;
+      },
+      handleOk () {
+        this.$refs.realForm.submitForm();
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+/** Button按钮间距 */
+  .ant-btn {
+    margin-left: 30px;
+    margin-bottom: 30px;
+    float: right;
+  }
+  .drawer-footer{
+    position: absolute;
+    bottom: -8px;
+    width: 100%;
+    border-top: 1px solid #e8e8e8;
+    padding: 10px 16px;
+    text-align: right;
+    left: 0;
+    background: #fff;
+    border-radius: 0 0 2px 2px;
+  }
+</style>

+ 60 - 0
module_kzks/src/main/java/org/jeecg/modules/kzksCostModelClPrice/vue/modules/KzksCostModelClPriceModal.vue

@@ -0,0 +1,60 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <kzks-cost-model-cl-price-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></kzks-cost-model-cl-price-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import KzksCostModelClPriceForm from './KzksCostModelClPriceForm'
+  export default {
+    name: 'KzksCostModelClPriceModal',
+    components: {
+      KzksCostModelClPriceForm
+    },
+    data () {
+      return {
+        title:'',
+        width:800,
+        visible: false,
+        disableSubmit: false
+      }
+    },
+    methods: {
+      add () {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.add();
+        })
+      },
+      edit (record) {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.edit(record);
+        })
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        this.$refs.realForm.submitForm();
+      },
+      submitCallback(){
+        this.$emit('ok');
+        this.visible = false;
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>

+ 406 - 0
module_kzks/src/main/java/org/jeecg/modules/projectCost/vo/ProjectCostVO.java

@@ -9,6 +9,8 @@ import org.jeecgframework.poi.excel.annotation.Excel;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
 
 @Data
 public class ProjectCostVO implements Serializable {
@@ -215,4 +217,408 @@ public class ProjectCostVO implements Serializable {
     /**用于判断是一级还是二级*/
     @ApiModelProperty(value = "用于判断是一级还是二级")
     private java.lang.Integer ji;
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getTaskno() {
+        return taskno;
+    }
+
+    public void setTaskno(String taskno) {
+        this.taskno = taskno;
+    }
+
+    public String getTaskname() {
+        return taskname;
+    }
+
+    public void setTaskname(String taskname) {
+        this.taskname = taskname;
+    }
+
+    public String getXhname() {
+        return xhname;
+    }
+
+    public void setXhname(String xhname) {
+        this.xhname = xhname;
+    }
+
+    public Date getJhwcsj() {
+        return jhwcsj;
+    }
+
+    public void setJhwcsj(Date jhwcsj) {
+        this.jhwcsj = jhwcsj;
+    }
+
+    public String getYzjdname() {
+        return yzjdname;
+    }
+
+    public void setYzjdname(String yzjdname) {
+        this.yzjdname = yzjdname;
+    }
+
+    public String getProcesspercent() {
+        return processpercent;
+    }
+
+    public void setProcesspercent(String processpercent) {
+        this.processpercent = processpercent;
+    }
+
+    public String getCostPercent() {
+        return costPercent;
+    }
+
+    public void setCostPercent(String costPercent) {
+        this.costPercent = costPercent;
+    }
+
+    public Integer getYzsl() {
+        return yzsl;
+    }
+
+    public void setYzsl(Integer yzsl) {
+        this.yzsl = yzsl;
+    }
+
+    public BigDecimal getOneIncome() {
+        return oneIncome;
+    }
+
+    public void setOneIncome(BigDecimal oneIncome) {
+        this.oneIncome = oneIncome;
+    }
+
+    public BigDecimal getOneCost() {
+        return oneCost;
+    }
+
+    public void setOneCost(BigDecimal oneCost) {
+        this.oneCost = oneCost;
+    }
+
+    public BigDecimal getOneProfit() {
+        return oneProfit;
+    }
+
+    public void setOneProfit(BigDecimal oneProfit) {
+        this.oneProfit = oneProfit;
+    }
+
+    public BigDecimal getLre() {
+        return lre;
+    }
+
+    public void setLre(BigDecimal lre) {
+        this.lre = lre;
+    }
+
+    public BigDecimal getLrl() {
+        return lrl;
+    }
+
+    public void setLrl(BigDecimal lrl) {
+        this.lrl = lrl;
+    }
+
+    public BigDecimal getEstimationcoat() {
+        return estimationcoat;
+    }
+
+    public void setEstimationcoat(BigDecimal estimationcoat) {
+        this.estimationcoat = estimationcoat;
+    }
+
+    public BigDecimal getContractfpe() {
+        return contractfpe;
+    }
+
+    public void setContractfpe(BigDecimal contractfpe) {
+        this.contractfpe = contractfpe;
+    }
+
+    public BigDecimal getTaskmoney() {
+        return taskmoney;
+    }
+
+    public void setTaskmoney(BigDecimal taskmoney) {
+        this.taskmoney = taskmoney;
+    }
+
+    public BigDecimal getZcb() {
+        return zcb;
+    }
+
+    public void setZcb(BigDecimal zcb) {
+        this.zcb = zcb;
+    }
+
+    public BigDecimal getClf() {
+        return clf;
+    }
+
+    public void setClf(BigDecimal clf) {
+        this.clf = clf;
+    }
+
+    public BigDecimal getZyf() {
+        return zyf;
+    }
+
+    public void setZyf(BigDecimal zyf) {
+        this.zyf = zyf;
+    }
+
+    public BigDecimal getSwf() {
+        return swf;
+    }
+
+    public void setSwf(BigDecimal swf) {
+        this.swf = swf;
+    }
+
+    public BigDecimal getWxf() {
+        return wxf;
+    }
+
+    public void setWxf(BigDecimal wxf) {
+        this.wxf = wxf;
+    }
+
+    public BigDecimal getRldlf() {
+        return rldlf;
+    }
+
+    public void setRldlf(BigDecimal rldlf) {
+        this.rldlf = rldlf;
+    }
+
+    public BigDecimal getGdzczj() {
+        return gdzczj;
+    }
+
+    public void setGdzczj(BigDecimal gdzczj) {
+        this.gdzczj = gdzczj;
+    }
+
+    public BigDecimal getGzjlwf() {
+        return gzjlwf;
+    }
+
+    public void setGzjlwf(BigDecimal gzjlwf) {
+        this.gzjlwf = gzjlwf;
+    }
+
+    public BigDecimal getGlf() {
+        return glf;
+    }
+
+    public void setGlf(BigDecimal glf) {
+        this.glf = glf;
+    }
+
+    public BigDecimal getZjcb() {
+        return zjcb;
+    }
+
+    public void setZjcb(BigDecimal zjcb) {
+        this.zjcb = zjcb;
+    }
+
+    public BigDecimal getLbsy() {
+        return lbsy;
+    }
+
+    public void setLbsy(BigDecimal lbsy) {
+        this.lbsy = lbsy;
+    }
+
+    public BigDecimal getWorkhour() {
+        return workhour;
+    }
+
+    public void setWorkhour(BigDecimal workhour) {
+        this.workhour = workhour;
+    }
+
+    public String getZrbm() {
+        return zrbm;
+    }
+
+    public void setZrbm(String zrbm) {
+        this.zrbm = zrbm;
+    }
+
+    public Integer getJycsid() {
+        return jycsid;
+    }
+
+    public void setJycsid(Integer jycsid) {
+        this.jycsid = jycsid;
+    }
+
+    public String getJycs() {
+        return jycs;
+    }
+
+    public void setJycs(String jycs) {
+        this.jycs = jycs;
+    }
+
+    public Integer getHxzxid() {
+        return hxzxid;
+    }
+
+    public void setHxzxid(Integer hxzxid) {
+        this.hxzxid = hxzxid;
+    }
+
+    public String getHxzxname() {
+        return hxzxname;
+    }
+
+    public void setHxzxname(String hxzxname) {
+        this.hxzxname = hxzxname;
+    }
+
+    public String getTasktype() {
+        return tasktype;
+    }
+
+    public void setTasktype(String tasktype) {
+        this.tasktype = tasktype;
+    }
+
+    public String getAuditprice() {
+        return auditprice;
+    }
+
+    public void setAuditprice(String auditprice) {
+        this.auditprice = auditprice;
+    }
+
+    public String getIflag() {
+        return iflag;
+    }
+
+    public void setIflag(String iflag) {
+        this.iflag = iflag;
+    }
+
+    public String getBrief() {
+        return brief;
+    }
+
+    public void setBrief(String brief) {
+        this.brief = brief;
+    }
+
+    public String getReftaskno() {
+        return reftaskno;
+    }
+
+    public void setReftaskno(String reftaskno) {
+        this.reftaskno = reftaskno;
+    }
+
+    public String getPccode() {
+        return pccode;
+    }
+
+    public void setPccode(String pccode) {
+        this.pccode = pccode;
+    }
+
+    public String getBccode() {
+        return bccode;
+    }
+
+    public void setBccode(String bccode) {
+        this.bccode = bccode;
+    }
+
+    public String getBlcode() {
+        return blcode;
+    }
+
+    public void setBlcode(String blcode) {
+        this.blcode = blcode;
+    }
+
+    public String getBusinessman() {
+        return businessman;
+    }
+
+    public void setBusinessman(String businessman) {
+        this.businessman = businessman;
+    }
+
+    public BigDecimal getSjgs() {
+        return sjgs;
+    }
+
+    public void setSjgs(BigDecimal sjgs) {
+        this.sjgs = sjgs;
+    }
+
+    public BigDecimal getScgs() {
+        return scgs;
+    }
+
+    public void setScgs(BigDecimal scgs) {
+        this.scgs = scgs;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public BigDecimal getProportion() {
+        return proportion;
+    }
+
+    public void setProportion(BigDecimal proportion) {
+        this.proportion = proportion;
+    }
+
+    public BigDecimal getClys() {
+        return clys;
+    }
+
+    public void setClys(BigDecimal clys) {
+        this.clys = clys;
+    }
+
+    public BigDecimal getWxys() {
+        return wxys;
+    }
+
+    public void setWxys(BigDecimal wxys) {
+        this.wxys = wxys;
+    }
+
+    public Integer getJi() {
+        return ji;
+    }
+
+    public void setJi(Integer ji) {
+        this.ji = ji;
+    }
 }

+ 217 - 185
module_kzks/src/main/java/org/jeecg/modules/projectCostHuiji/controller/ProjectCostHuijiController.java

@@ -3,9 +3,11 @@ package org.jeecg.modules.projectCostHuiji.controller;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.prometheus.client.Info;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.base.controller.JeecgController;
@@ -27,202 +29,232 @@ import org.springframework.web.servlet.ModelAndView;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
 /**
  * @Description: 项目成本汇集表
  * @Author: jeecg-boot
- * @Date:   2023-08-15
+ * @Date: 2023-08-15
  * @Version: V1.0
  */
-@Api(tags="项目成本汇集表")
+@Api(tags = "项目成本汇集表")
 @RestController
 @RequestMapping("/projectCostHuiji/projectCostHuiji")
 @Slf4j
 public class ProjectCostHuijiController extends JeecgController<ProjectCostHuiji, IProjectCostHuijiService> {
-	@Autowired
-	@SuppressWarnings("all")
-	private IProjectCostHuijiService projectCostHuijiService;
-	@Autowired
-	@SuppressWarnings("all")
-	private IProjectCostService costService;
-	@Autowired
-	@SuppressWarnings("all")
-	private IMesInfoInstallationcostService mesInfoInstallationcostService;
-	@Autowired
-	@SuppressWarnings("all")
-	private IKzksProjectCostYsService costYsService;
-
-	@ApiOperation(value="111111111111")
-	@GetMapping(value = "/children1")
-	public List<ProjectCostVO> children1(String taskno){
-		return costService.costListByTaskNoMain(taskno); //主任务及批产的主任务
-	}
-
-	@ApiOperation(value="22222222222222")
-	@GetMapping(value = "/children2")
-	public List<ProjectCostVO> children2(String taskno){
-		return costService.costListByTaskNoSub(taskno); //主任务及批产的主任务
-	}
-
-	/**
-	 * 项目成本汇集——对比
-	 */
-	@ApiOperation(value="项目成本汇集——对比", notes="项目成本汇集——对比")
-	@GetMapping(value = "/compareList")
-	public List<ProjectCostHuiji> compareList(String ids) {
-		List<ProjectCostHuiji> list = projectCostHuijiService.compareListByIds(Arrays.asList(ids.split(",")));
-		return list;
-	}
-
-	/**
-	 * 分页列表查询
-	 *
-	 * @param projectCostHuiji
-	 * @param pageNo
-	 * @param pageSize
-	 * @param req
-	 * @return
-	 */
-	//@AutoLog(value = "项目成本汇集表-分页列表查询")
-	@ApiOperation(value="项目成本汇集——分页查询——汇总+两级(一级汇集、二级主任务及主批产任务及子任务及子批产任务)", notes="项目成本汇集——分页查询——两级(一级汇集、二级主任务及子任务)")
-	@GetMapping(value = "/list")
-	public Result<ProjectCostHuijiSumVO> queryPageList(ProjectCostHuiji projectCostHuiji,
-								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
-								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
-								   HttpServletRequest req) {
-		ProjectCostHuijiSumVO sumVO = new ProjectCostHuijiSumVO();
-		ProjectCostHuiji huiji = projectCostHuijiService.costHJSum(projectCostHuiji);//汇集总和
-
-		QueryWrapper<ProjectCostHuiji> queryWrapper = QueryGenerator.initQueryWrapper(projectCostHuiji, req.getParameterMap());
-		Page<ProjectCostHuiji> page = new Page<ProjectCostHuiji>(pageNo, pageSize);
-		Page<ProjectCostHuiji> pageList = projectCostHuijiService.costHuijPage(page, queryWrapper);
-		if(pageList != null ){//costYsService
-			List<ProjectCostHuijiListVO> list=pageList.getRecords().stream().map(i -> {
-
-				List<ProjectCostVO> children1 = costService.costListByTaskNoMain(i.getTaskno()); //主任务及批产的主任务
-				List<ProjectCostVO> children2 = costService.costListByTaskNoSub(i.getTaskno()); //子任务及批产的子任务
-
-				List<ProjectCostVO> children3 = children1.stream().map(x->{
-					KzksProjectCostYs ys = costYsService.selectYSByTaskno(x.getTaskno());
-					if(ys!=null){
-						if(ys.getClys()!=null) x.setClys(ys.getClys());
-						if(ys.getWxys()!=null) x.setWxys(ys.getWxys());
-					}
-					return x;
-				}).collect(Collectors.toList());
-
-				List<ProjectCostVO> children4 = children2.stream().map(x->{
-					KzksProjectCostYs ys = costYsService.selectYSByTaskno(x.getTaskno());
-					if(ys!=null){
-						if(ys.getClys()!=null) x.setClys(ys.getClys());
-						if(ys.getWxys()!=null) x.setWxys(ys.getWxys());
-					}
-					return x;
-				}).collect(Collectors.toList());
-
-				List<ProjectCostVO> children =new ArrayList<>();
-				children.addAll(children3);
-				children.addAll(children4);
-
-				return ProjectCostHuijiConvert.INSTANCE.toHuijiListVO(i,children,1);
-
-			}).collect(Collectors.toList());
-
-			IPage<ProjectCostHuijiListVO> pageList1 = ProjectCostHuijiConvert.INSTANCE.toHuijiListVOPage(pageList,list);
-
-			sumVO.setProjectCostHuijiSum(huiji);
-			sumVO.setPageList(pageList1);
-			return Result.OK(sumVO);
-		}else return Result.OK(new ProjectCostHuijiSumVO());
-	}
-	/**
-	 *   添加
-	 *
-	 * @param projectCostHuiji
-	 * @return
-	 */
-	@AutoLog(value = "项目成本汇集表-添加")
-	@ApiOperation(value="项目成本汇集表-添加", notes="项目成本汇集表-添加")
-	//@RequiresPermissions("org.jeecg.modules:kzks_project_cost_huiji:add")
-	@PostMapping(value = "/add")
-	public Result<String> add(@RequestBody ProjectCostHuiji projectCostHuiji) {
-		projectCostHuijiService.save(projectCostHuiji);
-		return Result.OK("添加成功!");
-	}
-
-	/**
-	 *  编辑
-	 *
-	 * @param projectCostHuiji
-	 * @return
-	 */
-	@AutoLog(value = "项目成本汇集表-编辑")
-	@ApiOperation(value="项目成本汇集表-编辑", notes="项目成本汇集表-编辑")
-	//@RequiresPermissions("org.jeecg.modules:kzks_project_cost_huiji:edit")
-	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
-	public Result<String> edit(@RequestBody ProjectCostHuiji projectCostHuiji) {
-		projectCostHuijiService.updateById(projectCostHuiji);
-		return Result.OK("编辑成功!");
-	}
-
-	/**
-	 *   通过id删除
-	 *
-	 * @param id
-	 * @return
-	 */
-	@AutoLog(value = "项目成本汇集表-通过id删除")
-	@ApiOperation(value="项目成本汇集表-通过id删除", notes="项目成本汇集表-通过id删除")
-	//@RequiresPermissions("org.jeecg.modules:kzks_project_cost_huiji:delete")
-	@DeleteMapping(value = "/delete")
-	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
-		projectCostHuijiService.removeById(id);
-		return Result.OK("删除成功!");
-	}
-
-	/**
-	 *  批量删除
-	 *
-	 * @param ids
-	 * @return
-	 */
-	@AutoLog(value = "项目成本汇集表-批量删除")
-	@ApiOperation(value="项目成本汇集表-批量删除", notes="项目成本汇集表-批量删除")
-	//@RequiresPermissions("org.jeecg.modules:kzks_project_cost_huiji:deleteBatch")
-	@DeleteMapping(value = "/deleteBatch")
-	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-		this.projectCostHuijiService.removeByIds(Arrays.asList(ids.split(",")));
-		return Result.OK("批量删除成功!");
-	}
-
-	/**
-	 * 通过id查询
-	 *
-	 * @param id
-	 * @return
-	 */
-	//@AutoLog(value = "项目成本汇集表-通过id查询")
-	@ApiOperation(value="项目成本汇集表-通过id查询", notes="项目成本汇集表-通过id查询")
-	@GetMapping(value = "/queryById")
-	public Result<ProjectCostHuiji> queryById(@RequestParam(name="id",required=true) String id) {
-		ProjectCostHuiji projectCostHuiji = projectCostHuijiService.getById(id);
-		if(projectCostHuiji==null) {
-			return Result.error("未找到对应数据");
-		}
-		return Result.OK(projectCostHuiji);
-	}
+    @Autowired
+    @SuppressWarnings("all")
+    private IProjectCostHuijiService projectCostHuijiService;
+    @Autowired
+    @SuppressWarnings("all")
+    private IProjectCostService costService;
+    @Autowired
+    @SuppressWarnings("all")
+    private IMesInfoInstallationcostService mesInfoInstallationcostService;
+    @Autowired
+    @SuppressWarnings("all")
+    private IKzksProjectCostYsService costYsService;
+
+    @ApiOperation(value = "111111111111")
+    @GetMapping(value = "/children1")
+    public List<ProjectCostVO> children1(String taskno) {
+        return costService.costListByTaskNoMain(taskno); //主任务及批产的主任务
+    }
+
+    @ApiOperation(value = "22222222222222")
+    @GetMapping(value = "/children2")
+    public List<ProjectCostVO> children2(String taskno) {
+        return costService.costListByTaskNoSub(taskno); //主任务及批产的主任务
+    }
+
+    /**
+     * 项目成本汇集——对比
+     */
+    @ApiOperation(value = "项目成本汇集——对比", notes = "项目成本汇集——对比")
+    @GetMapping(value = "/compareList")
+    public List<ProjectCostHuiji> compareList(String ids) {
+        List<ProjectCostHuiji> list = projectCostHuijiService.compareListByIds(Arrays.asList(ids.split(",")));
+        return list;
+    }
+
+    /**
+     * 分页列表查询
+     *
+     * @param projectCostHuiji
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "项目成本汇集表-分页列表查询")
+    @ApiOperation(value = "项目成本汇集——分页查询——汇总+两级(一级汇集、二级主任务及主批产任务及子任务及子批产任务)", notes = "项目成本汇集——分页查询——两级(一级汇集、二级主任务及子任务)")
+    @GetMapping(value = "/list")
+    public Result<ProjectCostHuijiSumVO> queryPageList(ProjectCostHuiji projectCostHuiji,
+                                                       @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                       @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                       HttpServletRequest req) {
+        ProjectCostHuijiSumVO sumVO = new ProjectCostHuijiSumVO();
+        final List<ProjectCostHuiji> huijiList = new ArrayList<>();
+        CompletableFuture.runAsync(()->{
+            ProjectCostHuiji huiji = projectCostHuijiService.costHJSum(projectCostHuiji);//汇集总和
+            huijiList.add(huiji);
+        }).join();
+
+        QueryWrapper<ProjectCostHuiji> queryWrapper = QueryGenerator.initQueryWrapper(projectCostHuiji, req.getParameterMap());
+        Page<ProjectCostHuiji> page = new Page<ProjectCostHuiji>(pageNo, pageSize);
+        Page<ProjectCostHuiji> pageList = projectCostHuijiService.costHuijPage(page, queryWrapper);
+        if (pageList != null) {//costYsService
+            List<ProjectCostHuijiListVO> list = pageList.getRecords().stream().map(i -> {
+
+                List<ProjectCostVO> children1 = costService.costListByTaskNoMain(i.getTaskno()); //主任务及批产的主任务
+                List<ProjectCostVO> children2 = costService.costListByTaskNoSub(i.getTaskno()); //子任务及批产的子任务
+                List<ProjectCostVO> children = new ArrayList<>();
+
+                final ArrayList<List<ProjectCostVO>> children3List = new ArrayList<>();
+                CompletableFuture.runAsync(() -> {
+                    List<ProjectCostVO> children3 = children1.stream().map(x -> {
+                        KzksProjectCostYs ys = costYsService.selectYSByTaskno(x.getTaskno());
+                        if (ys != null) {
+                            if (ys.getClys() != null) {
+                                x.setClys(ys.getClys());
+                            } else {
+                                x.setClys(BigDecimal.valueOf(0));
+                            }
+                            if (ys.getWxys() != null) {
+                                x.setWxys(ys.getWxys());
+                            } else {
+                                x.setWxys(BigDecimal.valueOf(0));
+                            }
+                        }
+                        return x;
+                    }).collect(Collectors.toList());
+                    children3List.add(children3);
+                    children.addAll(children3List.get(0));
+                }).join();
+
+                final ArrayList<List<ProjectCostVO>> children4List = new ArrayList<>();
+                CompletableFuture.runAsync(() -> {
+                    List<ProjectCostVO> children4 = children2.stream().map(x -> {
+                        KzksProjectCostYs ys = costYsService.selectYSByTaskno(x.getTaskno());
+                        if (ys != null) {
+                            if (ys.getClys() != null) {
+                                x.setClys(ys.getClys());
+                            } else {
+                                x.setClys(BigDecimal.valueOf(0));
+                            }
+                            if (ys.getWxys() != null) {
+                                x.setWxys(ys.getWxys());
+                            } else {
+                                x.setWxys(BigDecimal.valueOf(0));
+                            }
+                        }
+                        return x;
+                    }).collect(Collectors.toList());
+                    children4List.add(children4);
+                    children.addAll(children4List.get(0));
+                }).join();
+
+                return ProjectCostHuijiConvert.INSTANCE.toHuijiListVO(i, children, 1);
+
+            }).collect(Collectors.toList());
+
+            IPage<ProjectCostHuijiListVO> pageList1 = ProjectCostHuijiConvert.INSTANCE.toHuijiListVOPage(pageList, list);
+
+            sumVO.setProjectCostHuijiSum(huijiList.get(0));
+            sumVO.setPageList(pageList1);
+            return Result.OK(sumVO);
+        } else return Result.OK(new ProjectCostHuijiSumVO());
+    }
+
+    /**
+     * 添加
+     *
+     * @param projectCostHuiji
+     * @return
+     */
+    @AutoLog(value = "项目成本汇集表-添加")
+    @ApiOperation(value = "项目成本汇集表-添加", notes = "项目成本汇集表-添加")
+    //@RequiresPermissions("org.jeecg.modules:kzks_project_cost_huiji:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody ProjectCostHuiji projectCostHuiji) {
+        projectCostHuijiService.save(projectCostHuiji);
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     *
+     * @param projectCostHuiji
+     * @return
+     */
+    @AutoLog(value = "项目成本汇集表-编辑")
+    @ApiOperation(value = "项目成本汇集表-编辑", notes = "项目成本汇集表-编辑")
+    //@RequiresPermissions("org.jeecg.modules:kzks_project_cost_huiji:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody ProjectCostHuiji projectCostHuiji) {
+        projectCostHuijiService.updateById(projectCostHuiji);
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "项目成本汇集表-通过id删除")
+    @ApiOperation(value = "项目成本汇集表-通过id删除", notes = "项目成本汇集表-通过id删除")
+    //@RequiresPermissions("org.jeecg.modules:kzks_project_cost_huiji:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        projectCostHuijiService.removeById(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "项目成本汇集表-批量删除")
+    @ApiOperation(value = "项目成本汇集表-批量删除", notes = "项目成本汇集表-批量删除")
+    //@RequiresPermissions("org.jeecg.modules:kzks_project_cost_huiji:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.projectCostHuijiService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "项目成本汇集表-通过id查询")
+    @ApiOperation(value = "项目成本汇集表-通过id查询", notes = "项目成本汇集表-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<ProjectCostHuiji> queryById(@RequestParam(name = "id", required = true) String id) {
+        ProjectCostHuiji projectCostHuiji = projectCostHuijiService.getById(id);
+        if (projectCostHuiji == null) {
+            return Result.error("未找到对应数据");
+        }
+        return Result.OK(projectCostHuiji);
+    }
 
     /**
-    * 导出excel
-    *
-    * @param request
-    * @param projectCostHuiji
-    */
+     * 导出excel
+     *
+     * @param request
+     * @param projectCostHuiji
+     */
     //@RequiresPermissions("org.jeecg.modules:kzks_project_cost_huiji:exportXls")
     @RequestMapping(value = "/exportXls")
     public ModelAndView exportXls(HttpServletRequest request, ProjectCostHuiji projectCostHuiji) {
@@ -230,12 +262,12 @@ public class ProjectCostHuijiController extends JeecgController<ProjectCostHuiji
     }
 
     /**
-      * 通过excel导入数据
-    *
-    * @param request
-    * @param response
-    * @return
-    */
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
     //@RequiresPermissions("kzks_project_cost_huiji:importExcel")
     @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
     public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {

+ 406 - 0
module_kzks/src/main/java/org/jeecg/modules/projectCostHuiji/vo/ProjectCostHuijiListVO.java

@@ -15,6 +15,8 @@ import org.jeecgframework.poi.excel.annotation.Excel;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -215,4 +217,408 @@ public class ProjectCostHuijiListVO implements Serializable {
     @ApiModelProperty(value = "子集")
     private List<ProjectCostVO> children;
 
+    /**材料预算*/
+    @Excel(name = "材料预算", width = 15)
+    @ApiModelProperty(value = "材料预算")
+    private java.math.BigDecimal clys;
+    /**外协预算*/
+    @Excel(name = "外协预算", width = 15)
+    @ApiModelProperty(value = "外协预算")
+    private java.math.BigDecimal wxys;
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getTaskno() {
+        return taskno;
+    }
+
+    public void setTaskno(String taskno) {
+        this.taskno = taskno;
+    }
+
+    public String getTaskname() {
+        return taskname;
+    }
+
+    public void setTaskname(String taskname) {
+        this.taskname = taskname;
+    }
+
+    public String getXhname() {
+        return xhname;
+    }
+
+    public void setXhname(String xhname) {
+        this.xhname = xhname;
+    }
+
+    public Date getJhwcsj() {
+        return jhwcsj;
+    }
+
+    public void setJhwcsj(Date jhwcsj) {
+        this.jhwcsj = jhwcsj;
+    }
+
+    public String getYzjdname() {
+        return yzjdname;
+    }
+
+    public void setYzjdname(String yzjdname) {
+        this.yzjdname = yzjdname;
+    }
+
+    public String getProcesspercent() {
+        return processpercent;
+    }
+
+    public void setProcesspercent(String processpercent) {
+        this.processpercent = processpercent;
+    }
+
+    public String getCostPercent() {
+        return costPercent;
+    }
+
+    public void setCostPercent(String costPercent) {
+        this.costPercent = costPercent;
+    }
+
+    public Integer getYzsl() {
+        return yzsl;
+    }
+
+    public void setYzsl(Integer yzsl) {
+        this.yzsl = yzsl;
+    }
+
+    public BigDecimal getOneIncome() {
+        return oneIncome;
+    }
+
+    public void setOneIncome(BigDecimal oneIncome) {
+        this.oneIncome = oneIncome;
+    }
+
+    public BigDecimal getOneCost() {
+        return oneCost;
+    }
+
+    public void setOneCost(BigDecimal oneCost) {
+        this.oneCost = oneCost;
+    }
+
+    public BigDecimal getOneProfit() {
+        return oneProfit;
+    }
+
+    public void setOneProfit(BigDecimal oneProfit) {
+        this.oneProfit = oneProfit;
+    }
+
+    public BigDecimal getLre() {
+        return lre;
+    }
+
+    public void setLre(BigDecimal lre) {
+        this.lre = lre;
+    }
+
+    public BigDecimal getLrl() {
+        return lrl;
+    }
+
+    public void setLrl(BigDecimal lrl) {
+        this.lrl = lrl;
+    }
+
+    public BigDecimal getEstimationcoat() {
+        return estimationcoat;
+    }
+
+    public void setEstimationcoat(BigDecimal estimationcoat) {
+        this.estimationcoat = estimationcoat;
+    }
+
+    public BigDecimal getContractfpe() {
+        return contractfpe;
+    }
+
+    public void setContractfpe(BigDecimal contractfpe) {
+        this.contractfpe = contractfpe;
+    }
+
+    public BigDecimal getTaskmoney() {
+        return taskmoney;
+    }
+
+    public void setTaskmoney(BigDecimal taskmoney) {
+        this.taskmoney = taskmoney;
+    }
+
+    public BigDecimal getZcb() {
+        return zcb;
+    }
+
+    public void setZcb(BigDecimal zcb) {
+        this.zcb = zcb;
+    }
+
+    public BigDecimal getClf() {
+        return clf;
+    }
+
+    public void setClf(BigDecimal clf) {
+        this.clf = clf;
+    }
+
+    public BigDecimal getZyf() {
+        return zyf;
+    }
+
+    public void setZyf(BigDecimal zyf) {
+        this.zyf = zyf;
+    }
+
+    public BigDecimal getSwf() {
+        return swf;
+    }
+
+    public void setSwf(BigDecimal swf) {
+        this.swf = swf;
+    }
+
+    public BigDecimal getWxf() {
+        return wxf;
+    }
+
+    public void setWxf(BigDecimal wxf) {
+        this.wxf = wxf;
+    }
+
+    public BigDecimal getRldlf() {
+        return rldlf;
+    }
+
+    public void setRldlf(BigDecimal rldlf) {
+        this.rldlf = rldlf;
+    }
+
+    public BigDecimal getGdzczj() {
+        return gdzczj;
+    }
+
+    public void setGdzczj(BigDecimal gdzczj) {
+        this.gdzczj = gdzczj;
+    }
+
+    public BigDecimal getGzjlwf() {
+        return gzjlwf;
+    }
+
+    public void setGzjlwf(BigDecimal gzjlwf) {
+        this.gzjlwf = gzjlwf;
+    }
+
+    public BigDecimal getGlf() {
+        return glf;
+    }
+
+    public void setGlf(BigDecimal glf) {
+        this.glf = glf;
+    }
+
+    public BigDecimal getZjcb() {
+        return zjcb;
+    }
+
+    public void setZjcb(BigDecimal zjcb) {
+        this.zjcb = zjcb;
+    }
+
+    public BigDecimal getLbsy() {
+        return lbsy;
+    }
+
+    public void setLbsy(BigDecimal lbsy) {
+        this.lbsy = lbsy;
+    }
+
+    public BigDecimal getWorkhour() {
+        return workhour;
+    }
+
+    public void setWorkhour(BigDecimal workhour) {
+        this.workhour = workhour;
+    }
+
+    public String getZrbm() {
+        return zrbm;
+    }
+
+    public void setZrbm(String zrbm) {
+        this.zrbm = zrbm;
+    }
+
+    public Integer getJycsid() {
+        return jycsid;
+    }
+
+    public void setJycsid(Integer jycsid) {
+        this.jycsid = jycsid;
+    }
+
+    public String getJycs() {
+        return jycs;
+    }
+
+    public void setJycs(String jycs) {
+        this.jycs = jycs;
+    }
+
+    public Integer getHxzxid() {
+        return hxzxid;
+    }
+
+    public void setHxzxid(Integer hxzxid) {
+        this.hxzxid = hxzxid;
+    }
+
+    public String getHxzxname() {
+        return hxzxname;
+    }
+
+    public void setHxzxname(String hxzxname) {
+        this.hxzxname = hxzxname;
+    }
+
+    public String getTasktype() {
+        return tasktype;
+    }
+
+    public void setTasktype(String tasktype) {
+        this.tasktype = tasktype;
+    }
+
+    public String getAuditprice() {
+        return auditprice;
+    }
+
+    public void setAuditprice(String auditprice) {
+        this.auditprice = auditprice;
+    }
+
+    public String getIflag() {
+        return iflag;
+    }
+
+    public void setIflag(String iflag) {
+        this.iflag = iflag;
+    }
+
+    public String getBrief() {
+        return brief;
+    }
+
+    public void setBrief(String brief) {
+        this.brief = brief;
+    }
+
+    public String getReftaskno() {
+        return reftaskno;
+    }
+
+    public void setReftaskno(String reftaskno) {
+        this.reftaskno = reftaskno;
+    }
+
+    public String getPccode() {
+        return pccode;
+    }
+
+    public void setPccode(String pccode) {
+        this.pccode = pccode;
+    }
+
+    public String getBccode() {
+        return bccode;
+    }
+
+    public void setBccode(String bccode) {
+        this.bccode = bccode;
+    }
+
+    public String getBlcode() {
+        return blcode;
+    }
+
+    public void setBlcode(String blcode) {
+        this.blcode = blcode;
+    }
+
+    public String getBusinessman() {
+        return businessman;
+    }
+
+    public void setBusinessman(String businessman) {
+        this.businessman = businessman;
+    }
+
+    public BigDecimal getSjgs() {
+        return sjgs;
+    }
+
+    public void setSjgs(BigDecimal sjgs) {
+        this.sjgs = sjgs;
+    }
+
+    public BigDecimal getScgs() {
+        return scgs;
+    }
+
+    public void setScgs(BigDecimal scgs) {
+        this.scgs = scgs;
+    }
+
+    public Integer getJi() {
+        return ji;
+    }
+
+    public void setJi(Integer ji) {
+        this.ji = ji;
+    }
+
+    public List<ProjectCostVO> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<ProjectCostVO> children) {
+        this.children = children;
+    }
+
+    public BigDecimal getClys() {
+        return clys;
+    }
+
+    public void setClys(BigDecimal clys) {
+        this.clys = clys;
+    }
+
+    public BigDecimal getWxys() {
+        return wxys;
+    }
+
+    public void setWxys(BigDecimal wxys) {
+        this.wxys = wxys;
+    }
 }