Browse Source

付款单审核反审核按供应商+币别更新余额,更新供应商资料供应商余额本位币

dingyl 6 years ago
parent
commit
a9fc3e5a44

+ 9 - 4
applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/PaybalanceMapper.java

@@ -2,10 +2,7 @@ package com.usoftchina.saas.money.mapper;
 
 import com.usoftchina.saas.base.mapper.CommonBaseMapper;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
-import com.usoftchina.saas.money.po.Bankinformation;
-import com.usoftchina.saas.money.po.Paybalance;
-import com.usoftchina.saas.money.po.Recbalance;
-import com.usoftchina.saas.money.po.Vendor;
+import com.usoftchina.saas.money.po.*;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -51,4 +48,12 @@ public interface PaybalanceMapper extends CommonBaseMapper<Paybalance> {
 
     String validateAudit(List<DocBaseDTO> baseDTOs);
     void updateByAmount(@Param("id") Long id, @Param("companyId") Long companyId);
+
+    VendApamount selectVendApByCondition(@Param("con") String con, @Param("companyId") Long companyId);
+
+    int updateVendApamountByPrimaryKeySelective(VendApamount record);
+
+    int updateVendleftamountByPrimaryKey(Integer ve_id);
+
+    int insertVendApamount(VendApamount record);
 }

+ 101 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/VendApamount.java

@@ -0,0 +1,101 @@
+package com.usoftchina.saas.money.po;
+
+import com.usoftchina.saas.base.entity.CommonBaseEntity;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class VendApamount extends CommonBaseEntity implements Serializable {
+    private  Integer va_vendid;
+    private  String va_vendcode;
+    private  String va_vendname;
+    private  String va_currency;
+    private  Date va_begindate;
+    private  Double va_beginapamount;
+    private  Double va_beginprepayamount;
+    private  Double va_preamount;
+    private  Double va_payamount;
+    private  Double va_leftamount;
+
+    public Integer getVa_vendid() {
+        return va_vendid;
+    }
+
+    public void setVa_vendid(Integer va_vendid) {
+        this.va_vendid = va_vendid;
+    }
+
+    public String getVa_vendcode() {
+        return va_vendcode;
+    }
+
+    public void setVa_vendcode(String va_vendcode) {
+        this.va_vendcode = va_vendcode;
+    }
+
+    public String getVa_vendname() {
+        return va_vendname;
+    }
+
+    public void setVa_vendname(String va_vendname) {
+        this.va_vendname = va_vendname;
+    }
+
+    public String getVa_currency() {
+        return va_currency;
+    }
+
+    public void setVa_currency(String va_currency) {
+        this.va_currency = va_currency;
+    }
+
+    public Date getVa_begindate() {
+        return va_begindate;
+    }
+
+    public void setVa_begindate(Date va_begindate) {
+        this.va_begindate = va_begindate;
+    }
+
+    public Double getVa_beginapamount() {
+        return va_beginapamount;
+    }
+
+    public void setVa_beginapamount(Double va_beginapamount) {
+        this.va_beginapamount = va_beginapamount;
+    }
+
+    public Double getVa_beginprepayamount() {
+        return va_beginprepayamount;
+    }
+
+    public void setVa_beginprepayamount(Double va_beginprepayamount) {
+        this.va_beginprepayamount = va_beginprepayamount;
+    }
+
+    public Double getVa_preamount() {
+        return va_preamount;
+    }
+
+    public void setVa_preamount(Double va_preamount) {
+        this.va_preamount = va_preamount;
+    }
+
+    public Double getVa_payamount() {
+        return va_payamount;
+    }
+
+    public void setVa_payamount(Double va_payamount) {
+        this.va_payamount = va_payamount;
+    }
+
+    public Double getVa_leftamount() {
+        return va_leftamount;
+    }
+
+    public void setVa_leftamount(Double va_leftamount) {
+        this.va_leftamount = va_leftamount;
+    }
+}

+ 59 - 34
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/PaybalanceServiceImpl.java

@@ -228,25 +228,36 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         updatePay.setPb_auditdate(new Date());
         updatePay.setPb_auditman(BaseContextHolder.getUserName());
         paybalanceMapper.updateByPrimaryKeySelective(updatePay);
-        //updateByPrimaryKeySelective
         /**
-         * ve_preamount=nvl(ve_preamount,0)+pb_preamount,
-         * ve_payamount=nvl(ve_payamount,0)-pb_pbdamount,
-         * ve_leftamount=ve_beginapamount-ve_beginprepayamount+ve_payamount-ve_preamount;
+         * 更新供应商应付
          */
-        Vendor vendorData = paybalanceMapper.selectVendorByPrimaryKey(paybalance.getPb_vendid());
-        Double preamount = vendorData.getVe_preamount()==null?new Double(0):vendorData.getVe_preamount();
-        Double beginapamount = vendorData.getVe_beginapamount()==null?new Double(0):vendorData.getVe_beginapamount();
-        Double beginprepayamount= vendorData.getVe_beginprepayamount()==null?new Double(0):vendorData.getVe_beginprepayamount();
-        Double payamount = vendorData.getVe_payamount()==null?new Double(0):vendorData.getVe_payamount();
-
-        Vendor vendor = new Vendor();
-        Double recbalancePreamount = paybalance.getPb_preamount();
-        vendor.setId(Long.valueOf(String.valueOf(paybalance.getPb_vendid())));
-        vendor.setVe_preamount(preamount+recbalancePreamount);
-        vendor.setVe_payamount(payamount-amountTotal2);
-        vendor.setVe_leftamount(beginapamount-beginprepayamount+payamount-amountTotal2-preamount-recbalancePreamount);
-        paybalanceMapper.updateVendorByPrimaryKeySelective(vendor);
+        String con="va_vendid="+paybalance.getPb_vendid()+" and va_currency='"+paybalance.getPb_currency()+"'";
+        VendApamount vendap=paybalanceMapper.selectVendApByCondition(con,companyId);
+        Double paybalancePreamount = paybalance.getPb_preamount();
+        if(vendap == null){
+            vendap=new VendApamount();
+            vendap.setVa_vendid(paybalance.getPb_vendid());
+            vendap.setVa_vendcode(paybalance.getPb_vendcode());
+            vendap.setVa_vendname(paybalance.getPb_vendname());
+            vendap.setVa_currency(paybalance.getPb_currency());
+            vendap.setVa_begindate(null);
+            vendap.setVa_beginprepayamount(new Double(0));
+            vendap.setVa_beginapamount(new Double(0));
+            vendap.setVa_preamount(paybalancePreamount);
+            vendap.setVa_payamount(new Double(0));
+            vendap.setVa_leftamount(new Double(0)-paybalancePreamount);
+            vendap.setCompanyId(companyId);
+            paybalanceMapper.insertVendApamount(vendap);
+        }else{
+            Double vapreamount = vendap.getVa_preamount()==null?new Double(0):vendap.getVa_preamount();
+            Double vapayamount = vendap.getVa_payamount()==null?new Double(0):vendap.getVa_payamount();
+            Double valeftamount = vendap.getVa_leftamount()==null?new Double(0):vendap.getVa_leftamount();
+            vendap.setVa_preamount(vapreamount + paybalancePreamount);
+            vendap.setVa_payamount(vapayamount - amountTotal2);
+            vendap.setVa_leftamount(valeftamount-paybalancePreamount-amountTotal2);
+            paybalanceMapper.updateVendApamountByPrimaryKeySelective(vendap);
+        }
+        paybalanceMapper.updateVendleftamountByPrimaryKey(paybalance.getPb_vendid());
 
         for (Paybalancedetail detail: paybalancedetail) {
             Subledger subledger1 = new Subledger();
@@ -325,26 +336,40 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
 
     @Override
     public void unAudit(int id) {
-        //更新供应商资料
-        /**
-         * ve_preamount=nvl(ve_preamount,0)-pb_preamount,
-         * ve_payamount=nvl(ve_payamount,0)+pb_pbdamount,
-         * ve_leftamount=ve_beginapamount-ve_beginprepayamount+ve_payamount-ve_preamount;
-         */
+        Long companyId = BaseContextHolder.getCompanyId();
         Paybalance pay = paybalanceMapper.selectByPrimaryKey(Long.valueOf(id));
         Double pay_preamount = pay.getPb_preamount() == null ? new Double(0): pay.getPb_preamount();
         Double pay_pbdamount = pay.getPb_pbdamount() == null ? new Double(0): pay.getPb_pbdamount();
-        Vendor vendorData = paybalanceMapper.selectVendorByPrimaryKey(pay.getPb_vendid());
-        Double preamount = vendorData.getVe_preamount() == null ? new Double(0) : vendorData.getVe_preamount();
-        Double beginapamount = vendorData.getVe_beginapamount() == null ? new Double(0) : vendorData.getVe_beginapamount();
-        Double beginprepayamount= vendorData.getVe_beginprepayamount() == null ? new Double(0) : vendorData.getVe_beginprepayamount();
-        Double payamount = vendorData.getVe_payamount() == null ? new Double(0) : vendorData.getVe_payamount() ;
-        Vendor vendor = new Vendor();
-        vendor.setId(Long.valueOf(String.valueOf(pay.getPb_vendid())));
-        vendor.setVe_preamount(preamount - pay_preamount);
-        vendor.setVe_payamount(payamount + pay_pbdamount);
-        vendor.setVe_leftamount(beginapamount - beginprepayamount + payamount + pay_pbdamount - preamount + pay_preamount);
-        paybalanceMapper.updateVendorByPrimaryKeySelective(vendor);
+        /**
+         * 更新供应商应付
+         */
+        String con="va_vendid="+pay.getPb_vendid()+" and va_currency='"+pay.getPb_currency()+"'";
+        VendApamount vendap=paybalanceMapper.selectVendApByCondition(con,companyId);
+        Double paybalancePreamount = pay.getPb_preamount();
+        if(vendap == null){
+            vendap=new VendApamount();
+            vendap.setVa_vendid(pay.getPb_vendid());
+            vendap.setVa_vendcode(pay.getPb_vendcode());
+            vendap.setVa_vendname(pay.getPb_vendname());
+            vendap.setVa_currency(pay.getPb_currency());
+            vendap.setVa_begindate(null);
+            vendap.setVa_beginprepayamount(new Double(0));
+            vendap.setVa_beginapamount(new Double(0));
+            vendap.setVa_preamount(new Double(0)-paybalancePreamount);
+            vendap.setVa_payamount(new Double(0)+pay_pbdamount);
+            vendap.setVa_leftamount(new Double(0)+paybalancePreamount+pay_pbdamount);
+            vendap.setCompanyId(companyId);
+            paybalanceMapper.insertVendApamount(vendap);
+        }else{
+            Double vapreamount = vendap.getVa_preamount()==null?new Double(0):vendap.getVa_preamount();
+            Double vapayamount = vendap.getVa_payamount()==null?new Double(0):vendap.getVa_payamount();
+            Double valeftamount = vendap.getVa_leftamount()==null?new Double(0):vendap.getVa_leftamount();
+            vendap.setVa_preamount(vapreamount - paybalancePreamount);
+            vendap.setVa_payamount(vapayamount + pay_pbdamount);
+            vendap.setVa_leftamount(valeftamount+paybalancePreamount+pay_pbdamount);
+            paybalanceMapper.updateVendApamountByPrimaryKeySelective(vendap);
+        }
+        paybalanceMapper.updateVendleftamountByPrimaryKey(pay.getPb_vendid());
 
         //更新账户资料金额
         List<Paybalancedet> paybalancedet = paybalancedetMapper.selectByPrimaryKey(id);

+ 157 - 0
applications/money/money-server/src/main/resources/mapper/PaybalanceMapper.xml

@@ -760,4 +760,161 @@
   <select id="checkStatus" resultType="int">
     select count(1) from paybalance where ifnull(pb_statuscode,'')='AUDITED' and pb_id= #{id,jdbcType=INTEGER}
   </select>
+
+  <!--供应商应付-->
+  <resultMap id="VendApResultMap" type="com.usoftchina.saas.money.po.VendApamount">
+    <id column="va_id" jdbcType="INTEGER" property="id" />
+    <result column="va_vendid" jdbcType="INTEGER" property="va_vendid" />
+    <result column="va_vendcode" jdbcType="VARCHAR" property="va_vendcode" />
+    <result column="va_vendname" jdbcType="VARCHAR" property="va_vendname" />
+    <result column="va_currency" jdbcType="VARCHAR" property="va_currency" />
+    <result column="va_begindate" jdbcType="TIMESTAMP" property="va_begindate" />
+    <result column="va_beginapamount" jdbcType="DOUBLE" property="va_beginapamount" />
+    <result column="va_beginprepayamount" jdbcType="DOUBLE" property="va_beginprepayamount" />
+    <result column="va_preamount" jdbcType="DOUBLE" property="va_preamount" />
+    <result column="va_payamount" jdbcType="DOUBLE" property="va_payamount" />
+    <result column="va_leftamount" jdbcType="DOUBLE" property="va_leftamount" />
+    <result column="companyid" jdbcType="INTEGER" property="companyId" />
+  </resultMap>
+  <sql id="VendApamount_Column_List">
+    va_id,va_vendid,va_vendcode,va_vendname,va_currency,va_begindate,va_beginapamount,va_beginprepayamount,va_preamount,va_payamount,va_leftamount,companyid
+  </sql>
+  <select id="selectVendApByCondition" resultMap="VendApResultMap">
+    select
+    <include refid="VendApamount_Column_List" />
+    from VendApamount
+    <where>
+      <if test="con != null">
+        ${con}
+      </if>
+      <if test="companyId != null">
+        and   VendApamount.companyId = #{companyId}
+      </if>
+    </where>
+  </select>
+  <!--供应商+币别应付余额更新-->
+  <update id="updateVendApamountByPrimaryKeySelective" parameterType="com.usoftchina.saas.money.po.VendApamount">
+    update VendApamount
+    <set>
+      <if test="va_vendid != null">
+        va_vendid = #{va_vendid,jdbcType=INTEGER},
+      </if>
+      <if test="va_vendcode != null">
+        va_vendcode = #{va_vendcode,jdbcType=VARCHAR},
+      </if>
+      <if test="va_vendname != null">
+        va_vendname = #{va_vendname,jdbcType=VARCHAR},
+      </if>
+      <if test="va_currency != null">
+        va_currency = #{va_currency,jdbcType=VARCHAR},
+      </if>
+      <if test="va_begindate != null">
+        va_begindate = #{va_begindate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="va_beginapamount != null">
+        va_beginapamount = #{va_beginapamount,jdbcType=DOUBLE},
+      </if>
+      <if test="va_beginprepayamount != null">
+        va_beginprepayamount = #{va_beginprepayamount,jdbcType=DOUBLE},
+      </if>
+      <if test="va_payamount != null">
+        va_payamount = #{va_payamount,jdbcType=DOUBLE},
+      </if>
+      <if test="va_preamount != null">
+        va_preamount = #{va_preamount,jdbcType=DOUBLE},
+      </if>
+      <if test="va_leftamount != null">
+        va_leftamount = #{va_leftamount,jdbcType=DOUBLE},
+      </if>
+      <if test="companyId != null">
+        companyid = #{companyId,jdbcType=INTEGER},
+      </if>
+    </set>
+    where va_id = #{id}
+  </update>
+  <update id="updateVendleftamountByPrimaryKey" parameterType="java.lang.Integer">
+    update vendor
+    <set>
+      ve_leftamount=ifnull((select sum(va_leftamount*(case when ifnull(cr_rate,0)=0 then 1 else ifnull(cr_rate,0) end ))
+      from VendApamount left join currencys on cr_name=va_currency and VendApamount.companyid=currencys.companyid
+      where VendApamount.companyid=vendor.companyid and va_vendid=#{ve_id,jdbcType=INTEGER}),0)
+    </set>
+    where ve_id = #{ve_id,jdbcType=INTEGER}
+  </update>
+  <insert id="insertVendApamount" parameterType="com.usoftchina.saas.money.po.VendApamount">
+    <selectKey resultType="java.lang.Long" keyProperty="id">
+      SELECT LAST_INSERT_ID() AS ID
+    </selectKey>
+    insert into VendApamount
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="companyId != null">
+        companyId,
+      </if>
+      <if test="va_vendid != null">
+        va_vendid,
+      </if>
+      <if test="va_vendcode != null">
+        va_vendcode,
+      </if>
+      <if test="va_vendname != null">
+        va_vendname,
+      </if>
+      <if test="va_currency != null">
+        va_currency,
+      </if>
+      <if test="va_begindate != null">
+        va_begindate,
+      </if>
+      <if test="va_beginapamount != null">
+        va_beginapamount,
+      </if>
+      <if test="va_beginprepayamount != null">
+        va_beginprepayamount,
+      </if>
+      <if test="va_payamount != null">
+        va_payamount,
+      </if>
+      <if test="va_preamount != null" >
+        va_preamount,
+      </if>
+      <if test="va_leftamount != null" >
+        va_leftamount,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="companyId != null">
+        #{companyId,jdbcType=INTEGER},
+      </if>
+      <if test="va_vendid != null">
+        #{va_vendid,jdbcType=INTEGER},
+      </if>
+      <if test="va_vendcode != null">
+        #{va_vendcode,jdbcType=VARCHAR},
+      </if>
+      <if test="va_vendname != null">
+        #{va_vendname,jdbcType=VARCHAR},
+      </if>
+      <if test="va_currency != null">
+        #{va_currency,jdbcType=VARCHAR},
+      </if>
+      <if test="va_begindate != null">
+        #{va_begindate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="va_beginapamount != null">
+        #{va_beginapamount,jdbcType=DOUBLE},
+      </if>
+      <if test="va_beginprepayamount != null">
+        #{va_beginprepayamount,jdbcType=DOUBLE},
+      </if>
+      <if test="va_payamount != null">
+        #{va_payamount,jdbcType=DOUBLE},
+      </if>
+      <if test="va_preamount != null" >
+        #{va_preamount,jdbcType=DOUBLE},
+      </if>
+      <if test="va_leftamount != null" >
+        #{va_leftamount,jdbcType=DOUBLE},
+      </if>
+    </trim>
+  </insert>
 </mapper>