Browse Source

供应商期初代码调整

hy 6 years ago
parent
commit
7cd5b53554

+ 7 - 1
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/VendApamountMapper.java

@@ -16,10 +16,12 @@ public interface VendApamountMapper extends CommonBaseMapper<VendApamount> {
 
 
     int hasCurrency(@Param("name") String name, @Param("companyId") Long companyId);
     int hasCurrency(@Param("name") String name, @Param("companyId") Long companyId);
 
 
-    int validVendCodeAndCurrency(@Param("vendcode") String vendcode, @Param("companyId") Long companyId,@Param("currency") String currency,@Param("id") Long id);
+    VendApamount getVendApamountByVendCodeAndCurrency(@Param("vendcode") String vendcode, @Param("companyId") Long companyId,@Param("currency") String currency,@Param("id") Long id);
 
 
     void check(Map<String, Object> map);
     void check(Map<String, Object> map);
 
 
+    void checkForImport(Map<String, Object> map);
+
     String selectPeriod(@Param("companyId") Long companyId);
     String selectPeriod(@Param("companyId") Long companyId);
 
 
     int checkBeginData(@Param("pd_detno") String pd_detno,@Param("companyId") Long companyId);
     int checkBeginData(@Param("pd_detno") String pd_detno,@Param("companyId") Long companyId);
@@ -31,4 +33,8 @@ public interface VendApamountMapper extends CommonBaseMapper<VendApamount> {
     void updateCodeAndNameByVendid(@Param("ve_id") Long ve_id);
     void updateCodeAndNameByVendid(@Param("ve_id") Long ve_id);
 
 
     void deleteByVendid(@Param("ve_id") Long ve_id);
     void deleteByVendid(@Param("ve_id") Long ve_id);
+
+    void batchInsert(List<VendApamount> vendApamounts);
+
+    void batchUpdate(List<VendApamount> vendApamounts);
 }
 }

+ 62 - 35
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendApamountServiceImpl.java

@@ -20,6 +20,8 @@ import com.usoftchina.saas.document.service.VendApamountService;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.page.PageRequest;
 import com.usoftchina.saas.page.PageRequest;
 import com.usoftchina.saas.utils.DateUtils;
 import com.usoftchina.saas.utils.DateUtils;
+import com.usoftchina.saas.utils.ObjectUtils;
+import io.netty.util.internal.ObjectUtil;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -213,8 +215,8 @@ public class VendApamountServiceImpl extends CommonBaseServiceImpl<VendApamountM
         if (hasCurrency == 0){
         if (hasCurrency == 0){
             throw new BizException(BizExceptionCode.BIZ_NOCURRENCY_SAVE);
             throw new BizException(BizExceptionCode.BIZ_NOCURRENCY_SAVE);
         }
         }
-        int count = getMapper().validVendCodeAndCurrency(vendCode, BaseContextHolder.getCompanyId(), currency,id);
-        if (count > 0){
+        VendApamount oldVendApamount = getMapper().getVendApamountByVendCodeAndCurrency(vendCode, BaseContextHolder.getCompanyId(), currency,id);
+        if (!ObjectUtils.isEmpty(oldVendApamount)){
             return true;
             return true;
         }
         }
         return false;
         return false;
@@ -268,8 +270,8 @@ public class VendApamountServiceImpl extends CommonBaseServiceImpl<VendApamountM
         }
         }
         Long companyId = BaseContextHolder.getCompanyId();
         Long companyId = BaseContextHolder.getCompanyId();
         StringBuilder err = new StringBuilder();
         StringBuilder err = new StringBuilder();
-        List<VendApamount> list = new ArrayList<>();
-        VendApamount listDTO = null;
+        List<VendApamount> addList = new ArrayList<>();//新增
+        List<VendApamount> updateList = new ArrayList<>();//更新
         List<DataImportDetail> details = dataImportMapper.selectDataById(id);
         List<DataImportDetail> details = dataImportMapper.selectDataById(id);
         if (!CollectionUtils.isEmpty(details)) {
         if (!CollectionUtils.isEmpty(details)) {
             int i = 0;
             int i = 0;
@@ -279,6 +281,7 @@ public class VendApamountServiceImpl extends CommonBaseServiceImpl<VendApamountM
                     throw new BizException(BizExceptionCode.BIZ_REPORT_NOTCORRECT);
                     throw new BizException(BizExceptionCode.BIZ_REPORT_NOTCORRECT);
                 }
                 }
                 VendApamount vendApamount = JSONObject.parseObject(detail.getDd_maindata(), VendApamount.class);
                 VendApamount vendApamount = JSONObject.parseObject(detail.getDd_maindata(), VendApamount.class);
+                vendApamount.setCompanyId(companyId);
                 if(vendApamount.getId()==null){vendApamount.setId(0L);}
                 if(vendApamount.getId()==null){vendApamount.setId(0L);}
                 if(vendApamount.getVa_payamount()==null){vendApamount.setVa_payamount(0.00);}
                 if(vendApamount.getVa_payamount()==null){vendApamount.setVa_payamount(0.00);}
                 if(vendApamount.getVa_beginapamount()==null){vendApamount.setVa_beginapamount(0.00);}
                 if(vendApamount.getVa_beginapamount()==null){vendApamount.setVa_beginapamount(0.00);}
@@ -289,64 +292,88 @@ public class VendApamountServiceImpl extends CommonBaseServiceImpl<VendApamountM
                 if (vendors.size() == 0){
                 if (vendors.size() == 0){
                     err.append("第" + (i + 3) + "行 : 供应商编号不存在或该供应商已禁用!<br/> ");
                     err.append("第" + (i + 3) + "行 : 供应商编号不存在或该供应商已禁用!<br/> ");
                 }else{
                 }else{
-                    int hasVendNameByCode = getMapper().hasVendNameByCode(vendApamount.getVa_vendcode(),BaseContextHolder.getCompanyId(),vendApamount.getVa_vendname());
+                    int hasVendNameByCode = getMapper().hasVendNameByCode(vendApamount.getVa_vendcode(),companyId,vendApamount.getVa_vendname());
                     if(hasVendNameByCode==0){
                     if(hasVendNameByCode==0){
                         err.append("第" + (i + 3) + "行 : 供应商名称与编号不匹配!<br/> ");
                         err.append("第" + (i + 3) + "行 : 供应商名称与编号不匹配!<br/> ");
                     }
                     }
                     vendApamount.setVa_vendid(vendors.get(0).getId());
                     vendApamount.setVa_vendid(vendors.get(0).getId());
                 }
                 }
-                int hasCurrency = getMapper().hasCurrency(vendApamount.getVa_currency(), BaseContextHolder.getCompanyId());
+                int hasCurrency = getMapper().hasCurrency(vendApamount.getVa_currency(), companyId);
                 if (hasCurrency == 0){
                 if (hasCurrency == 0){
                     err.append("第" + (i + 3) + "行 : 币别不存在!<br/> ");
                     err.append("第" + (i + 3) + "行 : 币别不存在!<br/> ");
                 }
                 }
-                int count = getMapper().validVendCodeAndCurrency(vendApamount.getVa_vendcode(), BaseContextHolder.getCompanyId(), vendApamount.getVa_currency(),0L);
-                if (count > 0){
-                    //校验是否可以修改或新增供应商期初
+                SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMM");
+                VendApamount oldVendApamount = getMapper().getVendApamountByVendCodeAndCurrency(vendApamount.getVa_vendcode(), companyId, vendApamount.getVa_currency(),0L);
+                if (!ObjectUtils.isEmpty(oldVendApamount)){
+                    //更新
+                    //校验是否可以修改供应商期初
                     Map<String, Object> map = new HashMap<String, Object>();
                     Map<String, Object> map = new HashMap<String, Object>();
                     map.put("v_id",vendApamount.getVa_vendid());//供应商ID
                     map.put("v_id",vendApamount.getVa_vendid());//供应商ID
                     map.put("v_code", vendApamount.getVa_vendcode());//供应商编号
                     map.put("v_code", vendApamount.getVa_vendcode());//供应商编号
                     map.put("v_type","vendCurrency");
                     map.put("v_type","vendCurrency");
                     map.put("v_currency",vendApamount.getVa_currency());
                     map.put("v_currency",vendApamount.getVa_currency());
-                    map.put("v_companyid",BaseContextHolder.getCompanyId());
+                    map.put("v_companyid",companyId);
                     map.put("v_res","");
                     map.put("v_res","");
                     getMapper().check(map);
                     getMapper().check(map);
                     Object result =  map.get("v_res");
                     Object result =  map.get("v_res");
                     if(!StringUtils.isEmpty(result)){
                     if(!StringUtils.isEmpty(result)){
                         err.append("第" + (i + 3) + "行 : "+result.toString()+"<br/> ");
                         err.append("第" + (i + 3) + "行 : "+result.toString()+"<br/> ");
+                    }else{
+                        //加载已存在的数据
+                        vendApamount.setId(oldVendApamount.getId());
+                        vendApamount.setVa_payamount(oldVendApamount.getVa_payamount());
+                        vendApamount.setVa_preamount(oldVendApamount.getVa_preamount());
+                        vendApamount.setVa_begindate(oldVendApamount.getVa_begindate());
+                    }
+                    vendApamount.setUpdaterId(companyId);
+                    vendApamount.setUpdateTime(new Date());
+                    //期初日期是否已结账
+                    int checkBeginData = getMapper().checkBeginData(sdf.format(vendApamount.getVa_begindate()),companyId);
+                    if(checkBeginData > 0){
+                        err.append("第" + (i + 3) + "行 : "+BizExceptionCode.BIZ_NOPERIOD_UPDATE.getMessage()+"!<br/> ");
+                    }
+                    //更新余额
+                    vendApamount.setVa_leftamount(vendApamount.getVa_beginapamount()-vendApamount.getVa_beginprepayamount()+vendApamount.getVa_payamount()-vendApamount.getVa_preamount());
+                    updateList.add(vendApamount);
+                }else{
+                    //新增
+                    vendApamount.setCreatorId(companyId);
+                    vendApamount.setCreateTime(new Date());
+                    vendApamount.setCreatorName(BaseContextHolder.getUserName());
+                    //获取当前期间
+                    String now = getMapper().selectPeriod(companyId);
+                    Date date = null;
+                    try {
+                        date = sdf.parse(now);
+                    } catch (ParseException e) {
+                        e.printStackTrace();
                     }
                     }
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(date);
+                    calendar.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
+                    vendApamount.setVa_begindate(calendar.getTime());
+                    //更新余额
+                    vendApamount.setVa_leftamount(vendApamount.getVa_beginapamount()-vendApamount.getVa_beginprepayamount()+vendApamount.getVa_payamount()-vendApamount.getVa_preamount());
+                    addList.add(vendApamount);
                 }
                 }
-                list.add(vendApamount);
                 i++;
                 i++;
             }
             }
             if (err.length() > 0) {
             if (err.length() > 0) {
                 dataImportMapper.updateDataImportError(err.toString(), id);
                 dataImportMapper.updateDataImportError(err.toString(), id);
                 throw new BizException(12345, err.toString());
                 throw new BizException(12345, err.toString());
             }
             }
-            for (VendApamount  vendApamount : list) {
-                //新增
-                vendApamount.setCompanyId(BaseContextHolder.getCompanyId());
-                vendApamount.setCreatorId(BaseContextHolder.getUserId());
-                vendApamount.setCreateTime(new Date());
-                vendApamount.setCreatorName(BaseContextHolder.getUserName());
-                SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMM");
-                //更新余额
-                vendApamount.setVa_leftamount(vendApamount.getVa_beginapamount()-vendApamount.getVa_beginprepayamount()+vendApamount.getVa_payamount()-vendApamount.getVa_preamount());
-                //获取当前期间
-                String now = getMapper().selectPeriod(BaseContextHolder.getCompanyId());
-                Date date = null;
-                try {
-                    date = sdf.parse(now);
-                } catch (ParseException e) {
-                    e.printStackTrace();
-                }
-                Calendar calendar = Calendar.getInstance();
-                calendar.setTime(date);
-                calendar.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
-                vendApamount.setVa_begindate(calendar.getTime());
-                getMapper().insertSelective(vendApamount);
-                vendorMapper.updateVendleftamountByPrimaryKey(vendApamount.getVa_vendid());
+            //新增和更新 批量执行到数据库
+            if(addList.size()>0){
+                getMapper().batchInsert(addList);
+            }
+            if(updateList.size()>0){
+                getMapper().batchUpdate(updateList);
             }
             }
-            dataImportMapper.updateDataImport(id);
+            //校验是否可以修改供应商期初
+            Map<String, Object> map = new HashMap<String, Object>();
+            map.put("v_type","vendCurrency");
+            map.put("v_companyid",companyId);
+            getMapper().checkForImport(map);
         }
         }
     }
     }
 }
 }

+ 54 - 2
applications/document/document-server/src/main/resources/mapper/VendApamountMapper.xml

@@ -82,6 +82,14 @@
         <parameter property="v_res" jdbcType="VARCHAR" mode="OUT" />
         <parameter property="v_res" jdbcType="VARCHAR" mode="OUT" />
     </parameterMap>
     </parameterMap>
 
 
+    <select id="checkForImport" parameterMap="checkForImportParamMap" statementType="CALLABLE">
+        CALL SP_CUSTARORVENDAPAFTER(?, ?)
+    </select>
+    <parameterMap id="checkForImportParamMap" type="java.util.Map">
+        <parameter property="v_type" jdbcType="VARCHAR" mode="IN" />
+        <parameter property="v_companyid" jdbcType="INTEGER" mode="IN" />
+    </parameterMap>
+
     <insert id="insertSelective" parameterType="com.usoftchina.saas.document.entities.VendApamount">
     <insert id="insertSelective" parameterType="com.usoftchina.saas.document.entities.VendApamount">
         <selectKey resultType="java.lang.Long" keyProperty="id">
         <selectKey resultType="java.lang.Long" keyProperty="id">
             SELECT LAST_INSERT_ID() AS ID
             SELECT LAST_INSERT_ID() AS ID
@@ -285,8 +293,8 @@
         </where>
         </where>
     </select>
     </select>
 
 
-    <select id="validVendCodeAndCurrency" resultType="int">
-        SELECT COUNT(*) FROM vendapamount
+    <select id="getVendApamountByVendCodeAndCurrency" resultMap="VendApamountResultMapper">
+        SELECT * FROM vendapamount
         <where>
         <where>
             <if test="vendcode!=null">
             <if test="vendcode!=null">
                 and va_vendcode=#{vendcode}
                 and va_vendcode=#{vendcode}
@@ -313,4 +321,48 @@
         delete from vendapamount
         delete from vendapamount
         where va_vendid = #{ve_id}
         where va_vendid = #{ve_id}
     </delete>
     </delete>
+
+    <insert id="batchInsert" parameterType="java.util.List">
+        INSERT INTO vendapamount (va_vendid, va_vendcode, va_vendname, va_currency, va_begindate, va_beginapamount,
+        va_beginprepayamount, va_payamount, va_preamount, va_leftamount, companyId, creatorName, creatorId, createTime)
+        VALUES
+        <foreach collection="list" item="item" index="index" open="" close="" separator=",">
+            (
+            #{item.va_vendid,jdbcType=INTEGER},
+            #{item.va_vendcode,jdbcType=VARCHAR}, #{item.va_vendname,jdbcType=VARCHAR}, #{item.va_currency,jdbcType=VARCHAR},
+            #{item.va_begindate,jdbcType=TIMESTAMP}, #{item.va_beginapamount,jdbcType=DOUBLE}, #{item.va_beginprepayamount,jdbcType=DOUBLE},
+            #{item.va_payamount,jdbcType=DOUBLE},#{item.va_preamount,jdbcType=DOUBLE}, #{item.va_leftamount,jdbcType=DOUBLE},
+            #{item.companyId,jdbcType=INTEGER},#{item.creatorName,jdbcType=VARCHAR}, #{item.creatorId,jdbcType=INTEGER},
+            #{item.createTime,jdbcType=TIMESTAMP}
+            )
+        </foreach>
+    </insert>
+
+    <update id="batchUpdate" parameterType="com.usoftchina.saas.document.entities.VendApamount">
+        <foreach collection="list" item="item" index="index" separator=";">
+            update vendapamount
+            <set>
+                <if test="item.va_beginapamount != null">
+                    va_beginapamount = #{item.va_beginapamount,jdbcType=DOUBLE},
+                </if>
+                <if test="item.va_beginprepayamount != null">
+                    va_beginprepayamount = #{item.va_beginprepayamount,jdbcType=DOUBLE},
+                </if>
+                <if test="item.va_leftamount != null">
+                    va_leftamount = #{item.va_leftamount,jdbcType=DOUBLE},
+                </if>
+                <if test="item.updaterId != null">
+                    updaterId = #{item.updaterId,jdbcType=INTEGER},
+                </if>
+                <if test="item.updateTime != null">
+                    updateTime = #{item.updateTime,jdbcType=TIMESTAMP},
+                </if>
+                <if test="item.updaterName != null">
+                    updaterName = #{item.updaterName,jdbcType=VARCHAR},
+                </if>
+            </set>
+            where va_id = #{item.id}
+        </foreach>
+    </update>
+
 </mapper>
 </mapper>